From 97178c2821a9985c2f45188a561dfd9d101c4710 Mon Sep 17 00:00:00 2001 From: George Gastaldi Date: Fri, 19 Sep 2014 16:03:27 -0300 Subject: [PATCH] FORGE-2023: Created config-set and config-clear --- .../addon/configuration/ui/ConfigCommand.java | 150 ++++++++++++++++++ .../configuration/ui/ConfigListCommand.java | 103 ------------ ...ommandTest.java => ConfigCommandTest.java} | 45 +++++- .../addon/shell/aesh/CommandLineUtil.java | 2 +- 4 files changed, 190 insertions(+), 110 deletions(-) create mode 100644 configuration/impl/src/main/java/org/jboss/forge/addon/configuration/ui/ConfigCommand.java delete mode 100644 configuration/impl/src/main/java/org/jboss/forge/addon/configuration/ui/ConfigListCommand.java rename configuration/tests/src/test/java/org/jboss/forge/addon/configuration/ui/{ConfigListCommandTest.java => ConfigCommandTest.java} (70%) diff --git a/configuration/impl/src/main/java/org/jboss/forge/addon/configuration/ui/ConfigCommand.java b/configuration/impl/src/main/java/org/jboss/forge/addon/configuration/ui/ConfigCommand.java new file mode 100644 index 0000000000..f219188a72 --- /dev/null +++ b/configuration/impl/src/main/java/org/jboss/forge/addon/configuration/ui/ConfigCommand.java @@ -0,0 +1,150 @@ +/** + * Copyright 2014 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Eclipse Public License version 1.0, available at + * http://www.eclipse.org/legal/epl-v10.html + */ + +package org.jboss.forge.addon.configuration.ui; + +import java.io.PrintStream; +import java.util.Iterator; + +import javax.inject.Inject; + +import org.jboss.forge.addon.configuration.Configuration; +import org.jboss.forge.addon.configuration.facets.ConfigurationFacet; +import org.jboss.forge.addon.projects.Project; +import org.jboss.forge.addon.projects.ProjectFactory; +import org.jboss.forge.addon.projects.Projects; +import org.jboss.forge.addon.ui.annotation.Command; +import org.jboss.forge.addon.ui.annotation.Option; +import org.jboss.forge.addon.ui.annotation.predicate.NonGUIEnabledPredicate; +import org.jboss.forge.addon.ui.context.UIContext; +import org.jboss.forge.addon.ui.output.UIOutput; +import org.jboss.forge.addon.ui.result.Result; +import org.jboss.forge.addon.ui.result.Results; + +/** + * Configuration commands + * + * @author George Gastaldi + */ +public class ConfigCommand +{ + @Inject + private Configuration userConfig; + + @Inject + private ProjectFactory projectFactory; + + @Command(value = "Config: Set", categories = { "Configuration" }, enabled = NonGUIEnabledPredicate.class) + public Result setConfigurationProperty(UIContext context, + @Option(value = "key", required = true) String key, + @Option(value = "value", required = true) String value, + @Option(value = "local") boolean local) throws Exception + { + if (local) + { + Project project = Projects.getSelectedProject(projectFactory, context); + if (project != null) + { + Configuration projectConfig = project.getFacet(ConfigurationFacet.class).getConfiguration(); + projectConfig.setProperty(key, value); + } + else + { + return Results.fail("No project found in current context. Can't store in local configuration."); + } + } + else + { + userConfig.setProperty(key, value); + } + return Results.success(); + } + + @Command(value = "Config: Clear", categories = { "Configuration" }, enabled = NonGUIEnabledPredicate.class) + public Result clearProperty(UIContext context, + @Option(value = "key", required = true) String key, + @Option(value = "local") boolean local) throws Exception + { + if (local) + { + Project project = Projects.getSelectedProject(projectFactory, context); + if (project != null) + { + Configuration projectConfig = project.getFacet(ConfigurationFacet.class).getConfiguration(); + projectConfig.clearProperty(key); + } + else + { + return Results.fail("No project found in current context. Can't clear from local configuration."); + } + } + else + { + userConfig.clearProperty(key); + } + return Results.success(); + } + + @Command(value = "Config: List", categories = { "Configuration" }, enabled = NonGUIEnabledPredicate.class) + public void listConfiguration(UIContext context, UIOutput output) + { + PrintStream out = output.out(); + + Project project = Projects.getSelectedProject(projectFactory, context); + Configuration projectConfig = null; + + if (project != null) + { + projectConfig = project.getFacet(ConfigurationFacet.class).getConfiguration(); + } + + Iterator userConfigKeys = userConfig.getKeys(); + + while (userConfigKeys.hasNext()) + { + Object key = userConfigKeys.next(); + + if (key != null) + { + out.print(key.toString()); + out.print("="); + + out.print("user: [" + userConfig.getProperty(key.toString()) + "]"); + if (projectConfig != null) + { + out.print(", project: "); + Object value = projectConfig.getProperty(key.toString()); + if (value != null) + { + out.print("[" + value.toString() + "] "); + } + else + out.print("[]"); + } + } + out.println(); + } + + if (projectConfig != null) + { + Iterator projectConfigKeys = projectConfig.getKeys(); + + while (projectConfigKeys.hasNext()) + { + String key = projectConfigKeys.next().toString(); + if (!userConfig.containsKey(key)) + { + out.print(key.toString()); + out.print("=project: ["); + out.print(projectConfig.getProperty(key.toString()).toString() + "]"); + } + out.println(); + } + } + } + +} diff --git a/configuration/impl/src/main/java/org/jboss/forge/addon/configuration/ui/ConfigListCommand.java b/configuration/impl/src/main/java/org/jboss/forge/addon/configuration/ui/ConfigListCommand.java deleted file mode 100644 index fa1a0c4e50..0000000000 --- a/configuration/impl/src/main/java/org/jboss/forge/addon/configuration/ui/ConfigListCommand.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.jboss.forge.addon.configuration.ui; - -import java.io.PrintStream; -import java.util.Iterator; - -import javax.inject.Inject; - -import org.jboss.forge.addon.configuration.Configuration; -import org.jboss.forge.addon.configuration.facets.ConfigurationFacet; -import org.jboss.forge.addon.projects.Project; -import org.jboss.forge.addon.projects.ProjectFactory; -import org.jboss.forge.addon.projects.Projects; -import org.jboss.forge.addon.shell.Shell; -import org.jboss.forge.addon.shell.ui.AbstractShellCommand; -import org.jboss.forge.addon.ui.context.UIBuilder; -import org.jboss.forge.addon.ui.context.UIContext; -import org.jboss.forge.addon.ui.context.UIExecutionContext; -import org.jboss.forge.addon.ui.metadata.UICommandMetadata; -import org.jboss.forge.addon.ui.result.Result; -import org.jboss.forge.addon.ui.result.Results; -import org.jboss.forge.addon.ui.util.Categories; -import org.jboss.forge.addon.ui.util.Metadata; - - -public class ConfigListCommand extends AbstractShellCommand -{ - - @Override - public UICommandMetadata getMetadata(UIContext context) - { - return Metadata.from(super.getMetadata(context), getClass()).category(Categories.create("Configuration")).name("Config: List"); - } - - @Override - public void initializeUI(UIBuilder builder) throws Exception - { - } - - @Inject - private Configuration userConfig; - - @Inject - private ProjectFactory projectFactory; - - @Override - public Result execute(UIExecutionContext context) throws Exception - { - Shell shell = (Shell) context.getUIContext().getProvider(); - PrintStream out = shell.getOutput().out(); - - Project project = Projects.getSelectedProject(projectFactory, context.getUIContext()); - Configuration projectConfig = null; - - if (project != null) - { - projectConfig = project.getFacet(ConfigurationFacet.class).getConfiguration(); - } - - Iterator userConfigKeys = userConfig.getKeys(); - - while (userConfigKeys.hasNext()) - { - Object key = userConfigKeys.next(); - - if (key != null) - { - out.print(key.toString()); - out.print("="); - - out.print("user: [" + userConfig.getProperty(key.toString()) + "]"); - if (projectConfig != null) - { - out.print(", project: "); - Object value = projectConfig.getProperty(key.toString()); - if (value != null) - { - out.print("[" + value.toString() + "] "); - } - else - out.print("[]"); - } - } - out.println(); - } - - if (projectConfig != null) - { - Iterator projectConfigKeys = projectConfig.getKeys(); - - while (projectConfigKeys.hasNext()) - { - String key = projectConfigKeys.next().toString(); - if (!userConfig.containsKey(key)) - { - out.print(key.toString()); - out.print("=project: ["); - out.print(projectConfig.getProperty(key.toString()).toString() + "]"); - } - } - } - return Results.success(); - } -} diff --git a/configuration/tests/src/test/java/org/jboss/forge/addon/configuration/ui/ConfigListCommandTest.java b/configuration/tests/src/test/java/org/jboss/forge/addon/configuration/ui/ConfigCommandTest.java similarity index 70% rename from configuration/tests/src/test/java/org/jboss/forge/addon/configuration/ui/ConfigListCommandTest.java rename to configuration/tests/src/test/java/org/jboss/forge/addon/configuration/ui/ConfigCommandTest.java index 8e8cd2cf07..c5d7024898 100644 --- a/configuration/tests/src/test/java/org/jboss/forge/addon/configuration/ui/ConfigListCommandTest.java +++ b/configuration/tests/src/test/java/org/jboss/forge/addon/configuration/ui/ConfigCommandTest.java @@ -1,6 +1,7 @@ package org.jboss.forge.addon.configuration.ui; import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.not; import java.util.concurrent.TimeUnit; @@ -13,6 +14,7 @@ import org.jboss.forge.addon.projects.Project; import org.jboss.forge.addon.projects.ProjectFactory; import org.jboss.forge.addon.shell.test.ShellTest; +import org.jboss.forge.addon.ui.result.Failed; import org.jboss.forge.arquillian.AddonDependency; import org.jboss.forge.arquillian.Dependencies; import org.jboss.forge.arquillian.archive.ForgeArchive; @@ -25,7 +27,7 @@ import org.junit.runner.RunWith; @RunWith(Arquillian.class) -public class ConfigListCommandTest +public class ConfigCommandTest { @Deployment @Dependencies({ @@ -50,7 +52,7 @@ public static ForgeArchive getDeployment() return archive; } - + @Inject private Configuration userConfig; @@ -60,7 +62,6 @@ public static ForgeArchive getDeployment() @Inject private ProjectFactory projectFactory; - @Before public void setUp() throws Exception { @@ -76,6 +77,14 @@ public void testConfigList() throws Exception Assert.assertThat(test.getStdOut(), containsString("key2=user: [userValue2]")); } + @Test + public void testConfigSetProperty() throws Exception + { + Assert.assertFalse(test.execute("config-set --key key1 --value userValue1", 5, TimeUnit.SECONDS) instanceof Failed); + Assert.assertFalse(test.execute("config-list", 5, TimeUnit.SECONDS) instanceof Failed); + Assert.assertThat(test.getStdOut(), containsString("key1=user: [userValue1]")); + } + @Test public void testConfigListInProject() throws Exception { @@ -87,7 +96,31 @@ public void testConfigListInProject() throws Exception Assert.assertThat(test.getStdOut(), containsString("key2=project: [projectValue2]")); Assert.assertThat(test.getStdOut(), containsString("key3=project: [projectValue3]")); } - + + @Test + public void testConfigClear() throws Exception + { + Assert.assertFalse(test.execute("config-set --key key1 --value userValue1", 5, TimeUnit.SECONDS) instanceof Failed); + Assert.assertFalse(test.execute("config-list", 5, TimeUnit.SECONDS) instanceof Failed); + Assert.assertThat(test.getStdOut(), containsString("key1=user: [userValue1]")); + test.clearScreen(); + Assert.assertFalse(test.execute("config-clear --key key1", 5, TimeUnit.SECONDS) instanceof Failed); + Assert.assertFalse(test.execute("config-list", 5, TimeUnit.SECONDS) instanceof Failed); + Assert.assertThat(test.getStdOut(), not(containsString("key1=user: [userValue1]"))); + } + + @Test + public void testConfigSetPropertyListInProject() throws Exception + { + Project project = projectFactory.createTempProject(); + test.getShell().setCurrentResource(project.getRoot()); + test.execute("config-set --key key2 --value projectValue2 --local", 5, TimeUnit.MINUTES); + test.execute("config-set --key key3 --value projectValue3 --local", 5, TimeUnit.SECONDS); + Assert.assertFalse(test.execute("config-list", 5, TimeUnit.SECONDS) instanceof Failed); + Assert.assertThat(test.getStdOut(), containsString("key2=project: [projectValue2]")); + Assert.assertThat(test.getStdOut(), containsString("key3=project: [projectValue3]")); + } + @Test public void testMergedConfigList() throws Exception { @@ -101,7 +134,7 @@ public void testMergedConfigList() throws Exception Assert.assertThat(test.getStdOut(), containsString("key2=user: [userValue2], project: [projectValue2]")); Assert.assertThat(test.getStdOut(), containsString("key3=project: [projectValue3]")); } - + private void addPropsToUserConfig() { userConfig.setProperty("key1", "userValue1"); @@ -113,7 +146,7 @@ private void addPropsToProjectConfig(Configuration projectConfig) projectConfig.addProperty("key2", "projectValue2"); projectConfig.addProperty("key3", "projectValue3"); } - + @After public void tearDown() throws Exception { diff --git a/shell/impl/src/main/java/org/jboss/forge/addon/shell/aesh/CommandLineUtil.java b/shell/impl/src/main/java/org/jboss/forge/addon/shell/aesh/CommandLineUtil.java index 6d6224baed..e2cc2926ed 100644 --- a/shell/impl/src/main/java/org/jboss/forge/addon/shell/aesh/CommandLineUtil.java +++ b/shell/impl/src/main/java/org/jboss/forge/addon/shell/aesh/CommandLineUtil.java @@ -89,7 +89,7 @@ private ProcessedCommand generateCommand(final CommandController command, final final Object defaultValue = InputComponents.getValueFor(input); final boolean isMultiple = input instanceof ManyValued; final boolean hasValue = (!InputType.CHECKBOX.equals(InputComponents.getInputType(input)) && !Boolean.class - .isAssignableFrom(input.getValueType())); + .isAssignableFrom(input.getValueType()) && !boolean.class.isAssignableFrom(input.getValueType())); try { OptionBuilder optionBuilder = new OptionBuilder();