This is an automated email from the ASF dual-hosted git repository.
apkhmv pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 5346cd0408 IGNITE-19036 Add cli config remove command (#1961)
5346cd0408 is described below
commit 5346cd0408b148ace772eb2843552d75c0cb8d8c
Author: Vadim Pakhnushev <[email protected]>
AuthorDate: Fri Apr 21 17:02:34 2023 +0300
IGNITE-19036 Add cli config remove command (#1961)
---
.../cli/call/cliconfig/CliConfigGetCall.java | 8 ++-
...ConfigGetCall.java => CliConfigRemoveCall.java} | 17 +++---
.../call/cliconfig/CliConfigRemoveCallInput.java | 64 ++++++++++++++++++++++
.../cli/commands/cliconfig/CliConfigCommand.java | 1 +
.../commands/cliconfig/CliConfigRemoveCommand.java | 55 +++++++++++++++++++
.../cliconfig/CliConfigRemoveReplCommand.java | 49 +++++++++++++++++
.../commands/cliconfig/CliConfigReplCommand.java | 1 +
.../apache/ignite/internal/cli/config/Config.java | 10 +++-
.../ignite/internal/cli/config/ConfigManager.java | 4 ++
.../apache/ignite/internal/cli/config/Profile.java | 20 +++++--
.../ignite/internal/cli/config/StateConfig.java | 1 +
.../ConfigInitializationException.java | 2 +-
.../{ => exception}/ConfigStoringException.java | 2 +-
.../NonexistentPropertyException.java} | 12 ++--
.../{ => exception}/ProfileNotFoundException.java | 2 +-
.../ignite/internal/cli/config/ini/IniConfig.java | 7 +++
.../internal/cli/config/ini/IniConfigManager.java | 4 +-
.../ignite/internal/cli/config/ini/IniFile.java | 2 +-
.../ignite/internal/cli/config/ini/IniProfile.java | 27 ++++-----
.../ignite/internal/cli/config/ini/IniSection.java | 4 ++
.../handler/ConfigStoringExceptionHandler.java | 2 +-
.../handler/ProfileNotFoundExceptionHandler.java | 2 +-
.../completer/DynamicCompleterActivationPoint.java | 1 +
.../cliconfig/CliConfigGetCommandTest.java | 8 +--
.../CliConfigProfileCreateCommandTest.java | 2 +-
...ndTest.java => CliConfigRemoveCommandTest.java} | 47 ++++++++++------
.../cli/commands/cliconfig/ConfigManagerTest.java | 12 ++++
27 files changed, 298 insertions(+), 68 deletions(-)
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigGetCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigGetCall.java
index e64960df1d..d6356f3db1 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigGetCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigGetCall.java
@@ -21,6 +21,7 @@ import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import org.apache.ignite.internal.cli.config.ConfigManager;
import org.apache.ignite.internal.cli.config.ConfigManagerProvider;
+import
org.apache.ignite.internal.cli.config.exception.NonexistentPropertyException;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
@@ -37,7 +38,10 @@ public class CliConfigGetCall implements
Call<CliConfigGetCallInput, String> {
ConfigManager configManager = configManagerProvider.get();
String key = input.getKey();
String profileName = input.getProfileName();
- String property = configManager.getProperty(key, profileName, "");
- return DefaultCallOutput.success(property);
+ String property = configManager.getProperty(key, profileName);
+ if (property != null) {
+ return DefaultCallOutput.success(property);
+ }
+ return DefaultCallOutput.failure(new
NonexistentPropertyException(key));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigGetCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigRemoveCall.java
similarity index 69%
copy from
modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigGetCall.java
copy to
modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigRemoveCall.java
index e64960df1d..d03c7aedeb 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigGetCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigRemoveCall.java
@@ -21,23 +21,26 @@ import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import org.apache.ignite.internal.cli.config.ConfigManager;
import org.apache.ignite.internal.cli.config.ConfigManagerProvider;
+import
org.apache.ignite.internal.cli.config.exception.NonexistentPropertyException;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
/**
- * Gets CLI configuration parameter.
+ * Removes CLI configuration parameter.
*/
@Singleton
-public class CliConfigGetCall implements Call<CliConfigGetCallInput, String> {
+public class CliConfigRemoveCall implements Call<CliConfigRemoveCallInput,
String> {
@Inject
private ConfigManagerProvider configManagerProvider;
@Override
- public DefaultCallOutput<String> execute(CliConfigGetCallInput input) {
+ public DefaultCallOutput<String> execute(CliConfigRemoveCallInput input) {
ConfigManager configManager = configManagerProvider.get();
- String key = input.getKey();
- String profileName = input.getProfileName();
- String property = configManager.getProperty(key, profileName, "");
- return DefaultCallOutput.success(property);
+ String key = input.key();
+ String profileName = input.profileName();
+ if (configManager.removeProperty(key, profileName) != null) {
+ return DefaultCallOutput.empty();
+ }
+ return DefaultCallOutput.failure(new
NonexistentPropertyException(key));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigRemoveCallInput.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigRemoveCallInput.java
new file mode 100644
index 0000000000..a820020820
--- /dev/null
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cliconfig/CliConfigRemoveCallInput.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.cli.call.cliconfig;
+
+import org.apache.ignite.internal.cli.core.call.CallInput;
+
+/** Input for {@link CliConfigRemoveCall}. */
+public class CliConfigRemoveCallInput implements CallInput {
+ private final String key;
+
+ private final String profileName;
+
+ private CliConfigRemoveCallInput(String key, String profileName) {
+ this.key = key;
+ this.profileName = profileName;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public String key() {
+ return key;
+ }
+
+ public String profileName() {
+ return profileName;
+ }
+
+ /** Builder of {@link CliConfigRemoveCallInput}. */
+ public static class Builder {
+ private String key;
+ private String profileName;
+
+ public Builder key(String key) {
+ this.key = key;
+ return this;
+ }
+
+ public Builder profileName(String profileName) {
+ this.profileName = profileName;
+ return this;
+ }
+
+ public CliConfigRemoveCallInput build() {
+ return new CliConfigRemoveCallInput(key, profileName);
+ }
+ }
+}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigCommand.java
index c62cf0c54e..a4f7216bda 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigCommand.java
@@ -29,6 +29,7 @@ import picocli.CommandLine.Command;
subcommands = {
CliConfigGetCommand.class,
CliConfigSetCommand.class,
+ CliConfigRemoveCommand.class,
CliConfigShowCommand.class,
CliConfigProfileCommand.class,
})
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigRemoveCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigRemoveCommand.java
new file mode 100644
index 0000000000..01c6fda5f8
--- /dev/null
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigRemoveCommand.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.cli.commands.cliconfig;
+
+import jakarta.inject.Inject;
+import java.util.concurrent.Callable;
+import org.apache.ignite.internal.cli.call.cliconfig.CliConfigRemoveCall;
+import org.apache.ignite.internal.cli.call.cliconfig.CliConfigRemoveCallInput;
+import org.apache.ignite.internal.cli.commands.BaseCommand;
+import org.apache.ignite.internal.cli.commands.ProfileMixin;
+import org.apache.ignite.internal.cli.core.call.CallExecutionPipeline;
+import picocli.CommandLine.Command;
+import picocli.CommandLine.Mixin;
+import picocli.CommandLine.Parameters;
+
+/** Command to remove CLI configuration parameters. */
+@Command(name = "remove", description = "Removes configuration parameters")
+public class CliConfigRemoveCommand extends BaseCommand implements
Callable<Integer> {
+ @Parameters(description = "Property name")
+ private String key;
+
+ @Mixin
+ private ProfileMixin profileName;
+
+ @Inject
+ private CliConfigRemoveCall call;
+
+ @Override
+ public Integer call() {
+ return CallExecutionPipeline.builder(call)
+ .inputProvider(CliConfigRemoveCallInput.builder()
+ .key(key)
+ .profileName(profileName.getProfileName())::build)
+ .output(spec.commandLine().getOut())
+ .errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
+ .build()
+ .runPipeline();
+ }
+}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigRemoveReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigRemoveReplCommand.java
new file mode 100644
index 0000000000..7fc6f96463
--- /dev/null
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigRemoveReplCommand.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.cli.commands.cliconfig;
+
+import jakarta.inject.Inject;
+import java.util.concurrent.Callable;
+import org.apache.ignite.internal.cli.call.cliconfig.CliConfigRemoveCall;
+import org.apache.ignite.internal.cli.call.cliconfig.CliConfigRemoveCallInput;
+import org.apache.ignite.internal.cli.commands.BaseCommand;
+import org.apache.ignite.internal.cli.core.call.CallExecutionPipeline;
+import picocli.CommandLine.Command;
+import picocli.CommandLine.Parameters;
+
+/** Command to remove CLI configuration parameters in REPL mode. */
+@Command(name = "remove", description = "Removes configuration parameters")
+public class CliConfigRemoveReplCommand extends BaseCommand implements
Callable<Integer> {
+ @Parameters(description = "Property name")
+ private String key;
+
+ @Inject
+ private CliConfigRemoveCall call;
+
+ @Override
+ public Integer call() {
+ return CallExecutionPipeline.builder(call)
+ .inputProvider(CliConfigRemoveCallInput.builder()
+ .key(key)::build)
+ .output(spec.commandLine().getOut())
+ .errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
+ .build()
+ .runPipeline();
+ }
+}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigReplCommand.java
index cd41593cbe..747d0bdb25 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigReplCommand.java
@@ -29,6 +29,7 @@ import picocli.CommandLine.Command;
subcommands = {
CliConfigGetReplCommand.class,
CliConfigSetReplCommand.class,
+ CliConfigRemoveReplCommand.class,
CliConfigShowReplCommand.class,
CliConfigProfileCommand.class,
})
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/Config.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/Config.java
index 2faaac2717..8b99f10c95 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/Config.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/Config.java
@@ -57,7 +57,15 @@ public interface Config {
void setProperty(String key, String value);
/**
- * Sets properties to this profile.
+ * Removes a property.
+ *
+ * @param key property to remove
+ * @return removed property, or {@code null} if there was no such property.
+ */
+ String removeProperty(String key);
+
+ /**
+ * Sets properties.
*
* @param values map of properties to set
*/
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigManager.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigManager.java
index 5e3e2c8468..eb1cddfe92 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigManager.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigManager.java
@@ -49,6 +49,10 @@ public interface ConfigManager {
return getConfig(profileName).getProperty(key, defaultValue);
}
+ default String removeProperty(String key, String profileName) {
+ return getConfig(profileName).removeProperty(key);
+ }
+
private Profile getConfig(String profileName) {
return profileName == null ? getCurrentProfile() :
getProfile(profileName);
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/Profile.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/Profile.java
index 179427100d..b6e080323e 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/Profile.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/Profile.java
@@ -24,21 +24,21 @@ import java.util.Map;
*/
public interface Profile {
/**
- * Gets name of the profile.
+ * Gets name.
*
* @return profile name
*/
String getName();
/**
- * Convenience method to get all properties from this profile.
+ * Gets all properties.
*
* @return map of all properties
*/
Map<String, String> getAll();
/**
- * Convenience method to get a property from this profile.
+ * Gets a property.
*
* @param key property to get
* @return property value or {@code null} if config doesn't contain this
property
@@ -46,7 +46,7 @@ public interface Profile {
String getProperty(String key);
/**
- * Convenience method to get a property from this profile.
+ * Gets a property.
*
* @param key property to get
* @param defaultValue default value of the property
@@ -56,7 +56,7 @@ public interface Profile {
String getProperty(String key, String defaultValue);
/**
- * Convenience method to set a property to this profile.
+ * Sets a property.
*
* @param key property to set
* @param value value to set
@@ -64,7 +64,15 @@ public interface Profile {
void setProperty(String key, String value);
/**
- * Convenience method to set properties to this profile.
+ * Removes a property.
+ *
+ * @param key property to remove
+ * @return removed property, or {@code null} if there was no such property.
+ */
+ String removeProperty(String key);
+
+ /**
+ * Set properties.
*
* @param values map of properties to set
*/
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/StateConfig.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/StateConfig.java
index 6dc1c42d6e..426c3c5c75 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/StateConfig.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/StateConfig.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cli.config;
import java.io.File;
import java.io.IOException;
+import
org.apache.ignite.internal.cli.config.exception.ConfigInitializationException;
import org.apache.ignite.internal.cli.config.ini.IniConfig;
import org.apache.ignite.internal.cli.config.ini.IniFile;
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigInitializationException.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/ConfigInitializationException.java
similarity index 95%
rename from
modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigInitializationException.java
rename to
modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/ConfigInitializationException.java
index 17e0bb3624..4f1830e78c 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigInitializationException.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/ConfigInitializationException.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.ignite.internal.cli.config;
+package org.apache.ignite.internal.cli.config.exception;
/**
* Config initialization exception.
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigStoringException.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/ConfigStoringException.java
similarity index 95%
rename from
modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigStoringException.java
rename to
modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/ConfigStoringException.java
index 577b21a92b..336ab05822 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ConfigStoringException.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/ConfigStoringException.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.ignite.internal.cli.config;
+package org.apache.ignite.internal.cli.config.exception;
/**
* Exception for case when config not stored correctly.
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ProfileNotFoundException.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/NonexistentPropertyException.java
similarity index 74%
copy from
modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ProfileNotFoundException.java
copy to
modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/NonexistentPropertyException.java
index b879c4b625..a4245b0d7b 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ProfileNotFoundException.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/NonexistentPropertyException.java
@@ -15,13 +15,11 @@
* limitations under the License.
*/
-package org.apache.ignite.internal.cli.config;
+package org.apache.ignite.internal.cli.config.exception;
-/**
- * CLI profile not found.
- */
-public class ProfileNotFoundException extends RuntimeException {
- public ProfileNotFoundException(String profileName) {
- super("Profile " + profileName + " not found.");
+/** CLI config property not found. */
+public class NonexistentPropertyException extends RuntimeException {
+ public NonexistentPropertyException(String property) {
+ super("Property " + property + " doesn't exist.");
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ProfileNotFoundException.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/ProfileNotFoundException.java
similarity index 94%
rename from
modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ProfileNotFoundException.java
rename to
modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/ProfileNotFoundException.java
index b879c4b625..c3a2a99b4a 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ProfileNotFoundException.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/exception/ProfileNotFoundException.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.ignite.internal.cli.config;
+package org.apache.ignite.internal.cli.config.exception;
/**
* CLI profile not found.
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfig.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfig.java
index 7b4e57af34..db65370388 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfig.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfig.java
@@ -57,6 +57,13 @@ public class IniConfig implements Config {
saveAction.run();
}
+ @Override
+ public String removeProperty(String key) {
+ String removedProperty = section.removeProperty(key);
+ saveAction.run();
+ return removedProperty;
+ }
+
/** {@inheritDoc} */
@Override
public void setProperties(Map<String, String> values) {
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfigManager.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfigManager.java
index 9bf32d8fe1..03ab1b867f 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfigManager.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfigManager.java
@@ -40,10 +40,10 @@ import java.nio.file.attribute.PosixFilePermissions;
import java.util.Collection;
import java.util.NoSuchElementException;
import java.util.Set;
-import org.apache.ignite.internal.cli.config.ConfigInitializationException;
import org.apache.ignite.internal.cli.config.ConfigManager;
import org.apache.ignite.internal.cli.config.Profile;
-import org.apache.ignite.internal.cli.config.ProfileNotFoundException;
+import
org.apache.ignite.internal.cli.config.exception.ConfigInitializationException;
+import
org.apache.ignite.internal.cli.config.exception.ProfileNotFoundException;
import org.apache.ignite.internal.cli.core.exception.IgniteCliException;
import org.apache.ignite.internal.cli.logger.CliLoggers;
import org.apache.ignite.internal.cli.util.OperatingSystem;
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniFile.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniFile.java
index aa95e41fea..c34b0aacc3 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniFile.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniFile.java
@@ -26,7 +26,7 @@ import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Map;
-import org.apache.ignite.internal.cli.config.ConfigStoringException;
+import org.apache.ignite.internal.cli.config.exception.ConfigStoringException;
/**
* Representation of INI file.
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniProfile.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniProfile.java
index 0cabe5e53e..7e3f641a7b 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniProfile.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniProfile.java
@@ -62,31 +62,24 @@ public class IniProfile implements Profile {
/** {@inheritDoc} */
@Override
public String getProperty(String key) {
- if (CliConfigKeys.secretConfigKeys().contains(key)) {
- return secretConfig.getProperty(key);
- } else {
- return config.getProperty(key);
- }
+ return getConfig(key).getProperty(key);
}
/** {@inheritDoc} */
@Override
public String getProperty(String key, String defaultValue) {
- if (CliConfigKeys.secretConfigKeys().contains(key)) {
- return secretConfig.getProperty(key, defaultValue);
- } else {
- return config.getProperty(key, defaultValue);
- }
+ return getConfig(key).getProperty(key, defaultValue);
}
/** {@inheritDoc} */
@Override
public void setProperty(String key, String value) {
- if (CliConfigKeys.secretConfigKeys().contains(key)) {
- secretConfig.setProperty(key, value);
- } else {
- config.setProperty(key, value);
- }
+ getConfig(key).setProperty(key, value);
+ }
+
+ @Override
+ public String removeProperty(String key) {
+ return getConfig(key).removeProperty(key);
}
/** {@inheritDoc} */
@@ -106,4 +99,8 @@ public class IniProfile implements Profile {
secretConfig.setProperties(secretConfigValues);
}
}
+
+ private IniConfig getConfig(String key) {
+ return CliConfigKeys.secretConfigKeys().contains(key) ? secretConfig :
config;
+ }
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniSection.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniSection.java
index b9ce806372..03b5c8384e 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniSection.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniSection.java
@@ -52,6 +52,10 @@ public class IniSection {
props.put(key, value);
}
+ public String removeProperty(String key) {
+ return props.remove(key);
+ }
+
public void setProperties(Map<String, String> values) {
props.putAll(values);
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ConfigStoringExceptionHandler.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ConfigStoringExceptionHandler.java
index 4fa2dc2593..1d337158da 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ConfigStoringExceptionHandler.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ConfigStoringExceptionHandler.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.cli.core.exception.handler;
-import org.apache.ignite.internal.cli.config.ConfigStoringException;
+import org.apache.ignite.internal.cli.config.exception.ConfigStoringException;
import org.apache.ignite.internal.cli.core.exception.ExceptionHandler;
import org.apache.ignite.internal.cli.core.exception.ExceptionWriter;
import org.apache.ignite.internal.cli.core.style.component.ErrorUiComponent;
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ProfileNotFoundExceptionHandler.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ProfileNotFoundExceptionHandler.java
index 8df2a84227..f58faa62df 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ProfileNotFoundExceptionHandler.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ProfileNotFoundExceptionHandler.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.cli.core.exception.handler;
-import org.apache.ignite.internal.cli.config.ProfileNotFoundException;
+import
org.apache.ignite.internal.cli.config.exception.ProfileNotFoundException;
import org.apache.ignite.internal.cli.core.exception.ExceptionHandler;
import org.apache.ignite.internal.cli.core.exception.ExceptionWriter;
import org.apache.ignite.internal.cli.core.style.component.ErrorUiComponent;
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/completer/DynamicCompleterActivationPoint.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/completer/DynamicCompleterActivationPoint.java
index 3f8792b3bb..596fa2f545 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/completer/DynamicCompleterActivationPoint.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/completer/DynamicCompleterActivationPoint.java
@@ -139,6 +139,7 @@ public class DynamicCompleterActivationPoint {
CompleterConf.builder()
.command("cli", "config", "set")
.command("cli", "config", "get")
+ .command("cli", "config", "remove")
.singlePositionalParameter()
.build(),
cliConfigDynamicCompleterFactory
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommandTest.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommandTest.java
index 2625537b3c..d0054f2cf6 100644
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommandTest.java
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommandTest.java
@@ -55,15 +55,15 @@ class CliConfigGetCommandTest extends
CliConfigCommandTestBase {
}
@Test
- @DisplayName("Displays empty string for nonexistent key")
+ @DisplayName("Displays error for nonexistent key")
void nonexistentKey() {
// When executed with nonexistent key
execute("nonexistentKey");
assertAll(
- this::assertExitCodeIsZero,
- () -> assertOutputIs(System.lineSeparator()),
- this::assertErrOutputIsEmpty
+ () -> assertExitCodeIs(1),
+ this::assertOutputIsEmpty,
+ () -> assertErrOutputContains("Property nonexistentKey doesn't
exist")
);
}
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigProfileCreateCommandTest.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigProfileCreateCommandTest.java
index c42426115a..93e4c75cd7 100644
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigProfileCreateCommandTest.java
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigProfileCreateCommandTest.java
@@ -22,7 +22,7 @@ import static
org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertAll;
import
org.apache.ignite.internal.cli.commands.cliconfig.profile.CliConfigProfileCreateCommand;
-import org.apache.ignite.internal.cli.config.ProfileNotFoundException;
+import
org.apache.ignite.internal.cli.config.exception.ProfileNotFoundException;
import org.junit.jupiter.api.Test;
class CliConfigProfileCreateCommandTest extends CliConfigCommandTestBase {
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommandTest.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigRemoveCommandTest.java
similarity index 62%
copy from
modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommandTest.java
copy to
modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigRemoveCommandTest.java
index 2625537b3c..04c4ab9ef2 100644
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommandTest.java
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigRemoveCommandTest.java
@@ -17,15 +17,17 @@
package org.apache.ignite.internal.cli.commands.cliconfig;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;
+import org.apache.ignite.internal.cli.config.ConfigManager;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
-class CliConfigGetCommandTest extends CliConfigCommandTestBase {
+class CliConfigRemoveCommandTest extends CliConfigCommandTestBase {
@Override
protected Class<?> getCommandClass() {
- return CliConfigGetCommand.class;
+ return CliConfigRemoveCommand.class;
}
@Test
@@ -42,28 +44,29 @@ class CliConfigGetCommandTest extends
CliConfigCommandTestBase {
}
@Test
- @DisplayName("Displays value for specified key")
+ @DisplayName("Removes a value")
void singleKey() {
- // When executed with single key
+ // When executed with key
execute("server");
assertAll(
this::assertExitCodeIsZero,
- () -> assertOutputIs("127.0.0.1" + System.lineSeparator()),
- this::assertErrOutputIsEmpty
+ this::assertOutputIsEmpty,
+ this::assertErrOutputIsEmpty,
+ () ->
assertThat(configManagerProvider.get().getCurrentProperty("server")).isNull()
);
}
@Test
- @DisplayName("Displays empty string for nonexistent key")
+ @DisplayName("Displays error for nonexistent key")
void nonexistentKey() {
// When executed with nonexistent key
execute("nonexistentKey");
assertAll(
- this::assertExitCodeIsZero,
- () -> assertOutputIs(System.lineSeparator()),
- this::assertErrOutputIsEmpty
+ () -> assertExitCodeIs(1),
+ this::assertOutputIsEmpty,
+ () -> assertErrOutputContains("Property nonexistentKey doesn't
exist")
);
}
@@ -81,23 +84,33 @@ class CliConfigGetCommandTest extends
CliConfigCommandTestBase {
}
@Test
- public void testWithNonDefaultProfile() {
- execute("organization --profile owner");
+ @DisplayName("Remove with profile")
+ public void testWithProfile() {
+ // When executed with multiple keys
+ execute("name --profile owner");
+
+ ConfigManager configManager = configManagerProvider.get();
assertAll(
+ this::assertExitCodeIsZero,
+ this::assertOutputIsEmpty,
this::assertErrOutputIsEmpty,
- () -> assertOutputContains("Apache Ignite")
+ () ->
assertThat(configManager.getProfile("owner").getProperty("name")).isNull()
);
-
}
@Test
- public void testWithNonNotExistedProfile() {
- execute("organization --profile notExist");
+ @DisplayName("Displays error for nonexistent profile")
+ public void testWithNonexistentProfile() {
+ execute("server --profile notExist");
+
+ ConfigManager configManager = configManagerProvider.get();
assertAll(
+ () -> assertExitCodeIs(1),
this::assertOutputIsEmpty,
- () -> assertErrOutputContains("Profile notExist not found.")
+ () -> assertErrOutputContains("Profile notExist not found"),
+ () ->
assertThat(configManager.getCurrentProperty("server")).isEqualTo("127.0.0.1")
);
}
}
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/ConfigManagerTest.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/ConfigManagerTest.java
index 99a3050cbb..5b52a24758 100644
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/ConfigManagerTest.java
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/cliconfig/ConfigManagerTest.java
@@ -75,4 +75,16 @@ class ConfigManagerTest {
assertThat(configManager.getCurrentProfile().getProperty("test")).isEqualTo("testValue");
assertThat(configManager.getCurrentProfile().getName()).isEqualTo("database");
}
+
+ @Test
+ public void testRemoveProperty() {
+ File tempFile =
TestConfigManagerHelper.createSectionWithDefaultProfile();
+ File tempSecretFile =
TestConfigManagerHelper.createEmptySecretConfig();
+ IniConfigManager configManager = new IniConfigManager(tempFile,
tempSecretFile);
+
+ assertThat(configManager.removeProperty("server",
configManager.getCurrentProfile().getName())).isEqualTo("127.0.0.1");
+
+ assertThat(tempFile.exists()).isTrue();
+
assertThat(configManager.getCurrentProfile().getProperty("server")).isNull();
+ }
}