From cc8e4805fa9049594c533ee7af3e6538b155ed71 Mon Sep 17 00:00:00 2001 From: "Ivan St. Ivanov" Date: Tue, 11 Feb 2014 00:55:56 +0200 Subject: [PATCH] FORGE-1561 Added config-list command that lists the user and project configurations --- configuration/addon/pom.xml | 6 + configuration/impl/pom.xml | 7 +- .../configuration/ui/ConfigListCommand.java | 103 ++++++++++++++ configuration/pom.xml | 7 + configuration/tests/pom.xml | 6 + .../ui/ConfigListCommandTest.java | 129 ++++++++++++++++++ 6 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 configuration/impl/src/main/java/org/jboss/forge/addon/configuration/ui/ConfigListCommand.java create mode 100644 configuration/tests/src/test/java/org/jboss/forge/addon/configuration/ui/ConfigListCommandTest.java diff --git a/configuration/addon/pom.xml b/configuration/addon/pom.xml index 8e93945b7c..1d2f52c439 100644 --- a/configuration/addon/pom.xml +++ b/configuration/addon/pom.xml @@ -31,6 +31,12 @@ forge-addon true + + org.jboss.forge.addon + shell + forge-addon + true + org.jboss.forge.furnace.container diff --git a/configuration/impl/pom.xml b/configuration/impl/pom.xml index f054511f8a..d3088581d2 100644 --- a/configuration/impl/pom.xml +++ b/configuration/impl/pom.xml @@ -14,7 +14,12 @@ cdi-api provided - + + org.jboss.forge.addon + shell + forge-addon + provided + org.jboss.forge.addon configuration-api 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 new file mode 100644 index 0000000000..fa1a0c4e50 --- /dev/null +++ b/configuration/impl/src/main/java/org/jboss/forge/addon/configuration/ui/ConfigListCommand.java @@ -0,0 +1,103 @@ +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/pom.xml b/configuration/pom.xml index 0781126956..ecd5725cd8 100644 --- a/configuration/pom.xml +++ b/configuration/pom.xml @@ -40,6 +40,13 @@ ${project.version} forge-addon + + org.jboss.forge.addon + shell + ${project.version} + forge-addon + provided + diff --git a/configuration/tests/pom.xml b/configuration/tests/pom.xml index ce66d28da1..55aac61667 100644 --- a/configuration/tests/pom.xml +++ b/configuration/tests/pom.xml @@ -42,5 +42,11 @@ arquillian-furnace-classpath test + + org.jboss.forge.addon + shell-test-harness + forge-addon + test + 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/ConfigListCommandTest.java new file mode 100644 index 0000000000..9d95e7f4c2 --- /dev/null +++ b/configuration/tests/src/test/java/org/jboss/forge/addon/configuration/ui/ConfigListCommandTest.java @@ -0,0 +1,129 @@ +package org.jboss.forge.addon.configuration.ui; + +import static org.hamcrest.CoreMatchers.containsString; + +import java.util.concurrent.TimeUnit; + +import javax.inject.Inject; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.forge.addon.configuration.Configuration; +import org.jboss.forge.addon.configuration.ConfigurationFactoryImpl; +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.shell.test.ShellTest; +import org.jboss.forge.arquillian.AddonDependency; +import org.jboss.forge.arquillian.Dependencies; +import org.jboss.forge.arquillian.archive.ForgeArchive; +import org.jboss.forge.furnace.repositories.AddonDependencyEntry; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(Arquillian.class) +public class ConfigListCommandTest +{ + @Deployment + @Dependencies({ + @AddonDependency(name = "org.jboss.forge.addon:shell-test-harness"), + @AddonDependency(name = "org.jboss.forge.addon:configuration"), + @AddonDependency(name = "org.jboss.forge.addon:shell"), + @AddonDependency(name = "org.jboss.forge.addon:projects"), + @AddonDependency(name = "org.jboss.forge.addon:maven"), + }) + public static ForgeArchive getDeployment() + { + ForgeArchive archive = ShrinkWrap + .create(ForgeArchive.class) + .addBeansXML() + .addAsAddonDependencies( + AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi"), + AddonDependencyEntry.create("org.jboss.forge.addon:configuration"), + AddonDependencyEntry.create("org.jboss.forge.addon:shell-test-harness"), + AddonDependencyEntry.create("org.jboss.forge.addon:projects"), + AddonDependencyEntry.create("org.jboss.forge.addon:shell") + ); + + return archive; + } + + @Inject + private Configuration userConfig; + + @Inject + private ShellTest test; + + @Inject + private ProjectFactory projectFactory; + + + static + { + ConfigurationFactoryImpl.setupTemporaryUserConfig(); + } + + @Before + public void setUp() throws Exception + { + test.clearScreen(); + } + + @Test + public void testConfigList() throws Exception + { + addPropsToUserConfig(); + test.execute("config-list", 5, TimeUnit.SECONDS); + Assert.assertThat(test.getStdOut(), containsString("key1=user: [userValue1]")); + Assert.assertThat(test.getStdOut(), containsString("key2=user: [userValue2]")); + } + + @Test + public void testConfigListInProject() throws Exception + { + Project project = projectFactory.createTempProject(); + Configuration projectConfig = project.getFacet(ConfigurationFacet.class).getConfiguration(); + addPropsToProjectConfig(projectConfig); + test.getShell().setCurrentResource(project.getRootDirectory()); + test.execute("config-list", 5, TimeUnit.SECONDS); + Assert.assertThat(test.getStdOut(), containsString("key2=project: [projectValue2]")); + Assert.assertThat(test.getStdOut(), containsString("key3=project: [projectValue3]")); + } + + @Test + public void testMergedConfigList() throws Exception + { + addPropsToUserConfig(); + Project project = projectFactory.createTempProject(); + Configuration projectConfig = project.getFacet(ConfigurationFacet.class).getConfiguration(); + addPropsToProjectConfig(projectConfig); + test.getShell().setCurrentResource(project.getRootDirectory()); + test.execute("config-list", 5, TimeUnit.SECONDS); + Assert.assertThat(test.getStdOut(), containsString("key1=user: [userValue1]")); + 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"); + userConfig.setProperty("key2", "userValue2"); + } + + private void addPropsToProjectConfig(Configuration projectConfig) + { + projectConfig.addProperty("key2", "projectValue2"); + projectConfig.addProperty("key3", "projectValue3"); + } + + @After + public void tearDown() throws Exception + { + userConfig.clearProperty("key1"); + userConfig.clearProperty("key2"); + } +} \ No newline at end of file