package org.jboss.forge.addon.thorntail.ui; import org.jboss.forge.addon.facets.FacetFactory; import org.jboss.forge.addon.projects.Project; import org.jboss.forge.addon.projects.Projects; import org.jboss.forge.addon.thorntail.config.ThorntailConfiguration; import org.jboss.forge.addon.thorntail.config.ThorntailConfigurationBuilder; import org.jboss.forge.addon.thorntail.facet.ThorntailFacet; 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.input.InputComponentFactory; import org.jboss.forge.addon.ui.input.UIInput; 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; import org.jboss.forge.furnace.container.simple.lifecycle.SimpleContainer; /** * The Thorntail: Setup command * * @author <a href="mailto:[email protected]">George Gastaldi</a> * @author <a href="mailto:[email protected]">Antonio Goncalves</a> */ public class SetupCommand extends AbstractThorntailCommand { private UIInput<Integer> httpPort; private UIInput<String> contextPath; private UIInput<Integer> portOffset; @Override public void initializeUI(UIBuilder builder) { InputComponentFactory inputFactory = builder.getInputComponentFactory(); httpPort = inputFactory.createInput("httpPort", Integer.class) .setLabel("HTTP Port").setDescription("HTTP Port Thorntail will listen to") .setDefaultValue(ThorntailConfiguration.HTTP_PORT_DEFAULT_VALUE); contextPath = inputFactory.createInput("contextPath", String.class) .setLabel("Context Path").setDescription("The context path of the web application") .setDefaultValue(ThorntailConfiguration.CONTEXT_PATH_DEFAULT_VALUE); portOffset = inputFactory.createInput("portOffset", Integer.class) .setLabel("HTTP Port Offset").setDescription("HTTP Port Offset") .setDefaultValue(ThorntailConfiguration.PORT_OFFSET_DEFAULT_VALUE); Project project = Projects.getSelectedProject(getProjectFactory(), builder.getUIContext()); if (project != null) { project.getFacetAsOptional(ThorntailFacet.class) .ifPresent((facet) -> { ThorntailConfiguration config = facet.getConfiguration(); httpPort.setDefaultValue(config.getHttpPort()); contextPath.setDefaultValue(config.getContextPath()); portOffset.setDefaultValue(config.getPortOffset()); }); } builder.add(httpPort).add(contextPath).add(portOffset); } @Override public UICommandMetadata getMetadata(UIContext context) { return Metadata.from(super.getMetadata(context), getClass()).name("Thorntail: Setup") .description("Setup Thorntail in your web application") .category(Categories.create("Thorntail")); } @Override public Result execute(UIExecutionContext context) { Project project = getSelectedProject(context); ThorntailConfigurationBuilder builder = ThorntailConfigurationBuilder.create(); builder.contextPath(contextPath.getValue()).httpPort(httpPort.getValue()).portOffset(portOffset.getValue()); FacetFactory facetFactory = SimpleContainer.getServices(getClass().getClassLoader(), FacetFactory.class).get(); if (project.hasFacet(ThorntailFacet.class)) { ThorntailFacet facet = project.getFacet(ThorntailFacet.class); facet.setConfiguration(builder); } else { ThorntailFacet facet = facetFactory.create(project, ThorntailFacet.class); facet.setConfiguration(builder); facetFactory.install(project, facet); } return Results.success("Thorntail is now set up! Enjoy!"); } }