diff --git a/addons/impl/src/main/java/org/jboss/forge/addon/addons/ui/NewUICommandWizard.java b/addons/impl/src/main/java/org/jboss/forge/addon/addons/ui/NewUICommandWizard.java index ce3a1cd3e8..34a14314a3 100644 --- a/addons/impl/src/main/java/org/jboss/forge/addon/addons/ui/NewUICommandWizard.java +++ b/addons/impl/src/main/java/org/jboss/forge/addon/addons/ui/NewUICommandWizard.java @@ -6,11 +6,6 @@ */ package org.jboss.forge.addon.addons.ui; -import java.util.ArrayList; -import java.util.Iterator; - -import javax.inject.Inject; - import org.jboss.forge.addon.maven.projects.util.Packages; import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet; import org.jboss.forge.addon.parser.java.resources.JavaResource; @@ -30,18 +25,23 @@ import org.jboss.forge.addon.ui.result.Results; import org.jboss.forge.addon.ui.util.Categories; import org.jboss.forge.addon.ui.util.Metadata; +import org.jboss.forge.furnace.util.Strings; import org.jboss.forge.roaster.model.source.JavaClassSource; import org.jboss.forge.roaster.model.source.JavaSource; import org.jboss.forge.roaster.model.source.MethodSource; +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.Iterator; + /** * @author Lincoln Baxter, III - * + * */ public class NewUICommandWizard extends AbstractJavaSourceCommand { @Inject - @WithAttributes(label = "Command name", required = true) + @WithAttributes(label = "Command name", required = false) private UIInput commandName; @Inject @@ -72,6 +72,12 @@ public Result execute(UIExecutionContext context) throws Exception { JavaResource javaResource = context.getUIContext().getSelection(); JavaClassSource command = javaResource.getJavaType(); + + if (Strings.isNullOrEmpty(commandName.getValue())) + { + commandName.setValue(calculateCommandName(command.getName())); + } + JavaClassSource javaClass = createCommand(command, commandName.getValue(), categories.getValue()); Project project = getSelectedProject(context); final JavaSourceFacet java = project.getFacet(JavaSourceFacet.class); @@ -156,4 +162,35 @@ protected String getType() { return "UI Command"; } + + static String calculateCommandName(String value) + { + StringBuilder builder = new StringBuilder(); + + if (Strings.isNullOrEmpty(value)) + { + throw new IllegalArgumentException("It isn't possible to parse a null value"); + } + + if (value.toLowerCase().endsWith("command")) + { + value = value.substring(0, value.toLowerCase().lastIndexOf("command")); + } + + value = value + .replaceFirst(Character.toString(value.charAt(0)), Character.toString(value.charAt(0)).toLowerCase()); + for (int index = 0; index < value.length(); index++) + { + char charValue = value.charAt(index); + if (index > 0 && Character.isUpperCase(charValue) && Character.isLowerCase(value.charAt(index - 1))) + { + builder.append("-").append(Character.toLowerCase(charValue)); + } + else + { + builder.append(Character.toLowerCase(charValue)); + } + } + return builder.toString(); + } } diff --git a/addons/tests/src/test/java/org/jboss/forge/addon/addons/ui/NewUICommandWizardTest.java b/addons/tests/src/test/java/org/jboss/forge/addon/addons/ui/NewUICommandWizardTest.java new file mode 100644 index 0000000000..7a0feb9c96 --- /dev/null +++ b/addons/tests/src/test/java/org/jboss/forge/addon/addons/ui/NewUICommandWizardTest.java @@ -0,0 +1,115 @@ +/** + * 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.addons.ui; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.forge.addon.addons.facets.AddonTestFacet; +import org.jboss.forge.addon.addons.facets.FurnaceVersionFacet; +import org.jboss.forge.addon.facets.FacetFactory; +import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet; +import org.jboss.forge.addon.projects.Project; +import org.jboss.forge.addon.projects.ProjectFactory; +import org.jboss.forge.addon.ui.controller.CommandController; +import org.jboss.forge.addon.ui.test.UITestHarness; +import org.jboss.forge.arquillian.AddonDependency; +import org.jboss.forge.arquillian.Dependencies; +import org.jboss.forge.arquillian.archive.ForgeArchive; +import org.jboss.forge.furnace.Furnace; +import org.jboss.forge.furnace.repositories.AddonDependencyEntry; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +/** + * + * @author Daniel Cunha (soro) + * + */ +@RunWith(Arquillian.class) +public class NewUICommandWizardTest +{ + @Deployment + @Dependencies({ + @AddonDependency(name = "org.jboss.forge.addon:addons"), + @AddonDependency(name = "org.jboss.forge.addon:ui"), + @AddonDependency(name = "org.jboss.forge.addon:ui-test-harness"), + @AddonDependency(name = "org.jboss.forge.furnace.container:cdi"), + @AddonDependency(name = "org.jboss.forge.addon:parser-java"), + @AddonDependency(name = "org.jboss.forge.addon:maven"), + @AddonDependency(name = "org.jboss.forge.addon:projects") + }) + public static ForgeArchive getDeployment() + { + ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class) + .addBeansXML() + .addAsAddonDependencies( + AddonDependencyEntry.create("org.jboss.forge.addon:addons"), + AddonDependencyEntry.create("org.jboss.forge.addon:ui"), + AddonDependencyEntry.create("org.jboss.forge.addon:ui-test-harness"), + AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi"), + AddonDependencyEntry.create("org.jboss.forge.addon:parser-java"), + AddonDependencyEntry.create("org.jboss.forge.addon:maven"), + AddonDependencyEntry.create("org.jboss.forge.addon:projects") + ); + return archive; + } + + @Inject + private ProjectFactory projectFactory; + + @Inject + private FacetFactory facetFactory; + + @Inject + private UITestHarness testHarness; + + @Inject + private Furnace furnace; + + @Test + public void testDefaultCommandNameBasedOnTypeNameUpperCaseWithCommandSuffix() throws Exception + { + Project project = projectFactory.createTempProject(); + facetFactory.install(project, JavaSourceFacet.class); + facetFactory.install(project, FurnaceVersionFacet.class); + project.getFacet(FurnaceVersionFacet.class).setVersion(furnace.getVersion().toString()); + facetFactory.install(project, AddonTestFacet.class); + CommandController controller = testHarness.createCommandController(NewUICommandWizard.class, project.getRoot()); + controller.initialize(); + controller.setValueFor("named", "MyTestCaseCOMMAND"); + controller.setValueFor("targetPackage", "org.jboss.forge.ui.test"); + controller.execute(); + Assert.assertTrue(project.getFacet(JavaSourceFacet.class) + .getJavaResource("org.jboss.forge.ui.test.MyTestCaseCOMMAND.java").exists()); + Assert.assertEquals("my-test-case", controller.getValueFor("commandName")); + + CommandController controller2 = testHarness.createCommandController(NewUICommandWizard.class, project.getRoot()); + controller2.initialize(); + controller2.setValueFor("named", "MyTestCommand"); + controller2.setValueFor("targetPackage", "org.jboss.forge.ui.test"); + controller2.execute(); + Assert.assertEquals("my-test", controller2.getValueFor("commandName")); + + CommandController controller3 = testHarness.createCommandController(NewUICommandWizard.class, project.getRoot()); + controller3.initialize(); + controller3.setValueFor("named", "MyUITestCommandWizard"); + controller3.setValueFor("targetPackage", "org.jboss.forge.ui.test"); + controller3.execute(); + Assert.assertEquals("my-uitest-command-wizard", controller3.getValueFor("commandName")); + + CommandController controller4 = testHarness.createCommandController(NewUICommandWizard.class, project.getRoot()); + controller4.initialize(); + controller4.setValueFor("named", "MyUITestCommandCommand"); + controller4.setValueFor("targetPackage", "org.jboss.forge.ui.test"); + controller4.execute(); + Assert.assertEquals("my-uitest-command", controller4.getValueFor("commandName")); + } +}