From d7cea862798eb4656810bf913e1213241febf1db Mon Sep 17 00:00:00 2001 From: George Gastaldi Date: Tue, 26 Nov 2013 17:39:47 -0200 Subject: [PATCH] UI-CONTROLLER --- .../ui/controller/CommandController.java | 62 ++++++++++++++ .../controller/CommandControllerFactory.java | 30 +++++++ .../controller/WizardCommandController.java | 43 ++++++++++ .../forge/addon/ui/spi/UIContextFactory.java | 41 +++++++++ .../controller/AbstractCommandController.java | 34 ++++++++ .../CommandControllerFactoryImpl.java | 68 +++++++++++++++ .../controller/SingleCommandController.java | 25 ++++++ .../WizardCommandControllerImpl.java | 85 +++++++++++++++++++ 8 files changed, 388 insertions(+) create mode 100644 ui/api/src/main/java/org/jboss/forge/addon/ui/controller/CommandController.java create mode 100644 ui/api/src/main/java/org/jboss/forge/addon/ui/controller/CommandControllerFactory.java create mode 100644 ui/api/src/main/java/org/jboss/forge/addon/ui/controller/WizardCommandController.java create mode 100644 ui/api/src/main/java/org/jboss/forge/addon/ui/spi/UIContextFactory.java create mode 100644 ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/AbstractCommandController.java create mode 100644 ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/CommandControllerFactoryImpl.java create mode 100644 ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/SingleCommandController.java create mode 100644 ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/WizardCommandControllerImpl.java diff --git a/ui/api/src/main/java/org/jboss/forge/addon/ui/controller/CommandController.java b/ui/api/src/main/java/org/jboss/forge/addon/ui/controller/CommandController.java new file mode 100644 index 0000000000..df0055f2cd --- /dev/null +++ b/ui/api/src/main/java/org/jboss/forge/addon/ui/controller/CommandController.java @@ -0,0 +1,62 @@ +/** + * Copyright 2013 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.ui.controller; + +import java.util.List; + +import org.jboss.forge.addon.ui.UICommand; +import org.jboss.forge.addon.ui.result.Result; + +/** + * A Controller for a specific {@link UICommand} + * + * @author George Gastaldi + */ +public interface CommandController +{ + /** + * Returns the initial {@link UICommand} + */ + public UICommand getInitialCommand(); + + /** + * Launch the currrent wizard execution + * + * @throws Exception + */ + public void launch() throws Exception; + + /** + * Is the wizard allowed to finish? + */ + public boolean canFinish(); + + /** + * Lets the controller know that some value in the Wizard was modified, so it should invalidate subsequent pages. + */ + public void valueChanged(); + + /** + * Finish clicked + * + * @throws Exception if anything wrong happens + */ + public Result finish() throws Exception; + + /** + * Is the current wizard page valid ? + * + * @return true if valid, false otherwise + */ + public boolean isValid(); + + /** + * The validation errors for the current page + */ + public List getErrorMessages(); +} diff --git a/ui/api/src/main/java/org/jboss/forge/addon/ui/controller/CommandControllerFactory.java b/ui/api/src/main/java/org/jboss/forge/addon/ui/controller/CommandControllerFactory.java new file mode 100644 index 0000000000..7f85a995ce --- /dev/null +++ b/ui/api/src/main/java/org/jboss/forge/addon/ui/controller/CommandControllerFactory.java @@ -0,0 +1,30 @@ +/** + * Copyright 2013 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.ui.controller; + +import org.jboss.forge.addon.ui.UICommand; +import org.jboss.forge.addon.ui.spi.UIContextFactory; +import org.jboss.forge.addon.ui.wizard.UIWizard; + +/** + * Creates {@link CommandController} objects + * + * @author George Gastaldi + */ +public interface CommandControllerFactory +{ + /** + * Create a {@link SingleCommandController}. Should be called when a single command execution must be performed. + */ + CommandController createSingleController(Class command, UIContextFactory uiFactory); + + /** + * Create a {@link WizardCommandController}. Should be called when a wizard (multisteps) execution must be performed. + */ + WizardCommandController createWizardController(Class wizard, UIContextFactory uiFactory); +} diff --git a/ui/api/src/main/java/org/jboss/forge/addon/ui/controller/WizardCommandController.java b/ui/api/src/main/java/org/jboss/forge/addon/ui/controller/WizardCommandController.java new file mode 100644 index 0000000000..e6ccf2f8d5 --- /dev/null +++ b/ui/api/src/main/java/org/jboss/forge/addon/ui/controller/WizardCommandController.java @@ -0,0 +1,43 @@ +/** + * Copyright 2013 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.ui.controller; + +import org.jboss.forge.addon.ui.UICommand; + +/** + * + * @author George Gastaldi + */ +public interface WizardCommandController extends CommandController +{ + /** + * Returns the current {@link UICommand} based on the navigation + */ + public UICommand getCurrentCommand(); + + /** + * Is it possible to navigate to the next page ? + */ + public boolean canFlipToNextPage(); + + /** + * Is it possible to navigate to the previous page ? + * + */ + public boolean canFlipToPreviousPage(); + + /** + * Navigate to the next page. Throws {@link IllegalStateException} if navigation is not possible + */ + public UICommand next() throws IllegalStateException; + + /** + * Navigate to the previous visited page + */ + public UICommand previous() throws IllegalStateException; +} diff --git a/ui/api/src/main/java/org/jboss/forge/addon/ui/spi/UIContextFactory.java b/ui/api/src/main/java/org/jboss/forge/addon/ui/spi/UIContextFactory.java new file mode 100644 index 0000000000..b414d1ebc8 --- /dev/null +++ b/ui/api/src/main/java/org/jboss/forge/addon/ui/spi/UIContextFactory.java @@ -0,0 +1,41 @@ +/** + * Copyright 2013 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.ui.spi; + +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.context.UIValidationContext; + +/** + * Creates UI objects. Should be implemented by UI Providers + * + * @author George Gastaldi + */ +public interface UIContextFactory +{ + /** + * Creates the {@link UIContext} used + */ + UIContext createUIContext(); + + /** + * Creates a {@link UIBuilder} when needed + */ + UIBuilder createUIBuilder(UIContext context); + + /** + * Creates a new {@link UIValidationContext} + */ + UIValidationContext createUIValidationContext(UIContext context); + + /** + * Creates a new {@link UIExecutionContext} + */ + UIExecutionContext createUIExecutionContext(UIContext context); +} diff --git a/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/AbstractCommandController.java b/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/AbstractCommandController.java new file mode 100644 index 0000000000..c757376e81 --- /dev/null +++ b/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/AbstractCommandController.java @@ -0,0 +1,34 @@ +/** + * Copyright 2013 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.ui.impl.controller; + +import org.jboss.forge.addon.ui.UICommand; +import org.jboss.forge.addon.ui.controller.CommandController; +import org.jboss.forge.furnace.addons.AddonRegistry; + +/** + * + * @author George Gastaldi + */ +public abstract class AbstractCommandController implements CommandController +{ + protected final AddonRegistry addonRegistry; + private final UICommand initialCommand; + + protected AbstractCommandController(AddonRegistry addonRegistry, UICommand initialCommand) + { + this.addonRegistry = addonRegistry; + this.initialCommand = initialCommand; + } + + @Override + public UICommand getInitialCommand() + { + return this.initialCommand; + } +} diff --git a/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/CommandControllerFactoryImpl.java b/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/CommandControllerFactoryImpl.java new file mode 100644 index 0000000000..9a18ac7aec --- /dev/null +++ b/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/CommandControllerFactoryImpl.java @@ -0,0 +1,68 @@ +/** + * Copyright 2013 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.ui.impl.controller; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jboss.forge.addon.ui.UICommand; +import org.jboss.forge.addon.ui.context.UIContext; +import org.jboss.forge.addon.ui.controller.CommandController; +import org.jboss.forge.addon.ui.controller.CommandControllerFactory; +import org.jboss.forge.addon.ui.controller.WizardCommandController; +import org.jboss.forge.addon.ui.spi.UIContextFactory; +import org.jboss.forge.addon.ui.wizard.UIWizard; +import org.jboss.forge.addon.ui.wizard.UIWizardStep; +import org.jboss.forge.furnace.addons.AddonRegistry; + +/** + * Creates {@link CommandController} objects + * + * @author George Gastaldi + */ +@Singleton +public class CommandControllerFactoryImpl implements CommandControllerFactory +{ + private final AddonRegistry addonRegistry; + + @Inject + public CommandControllerFactoryImpl(AddonRegistry addonRegistry) + { + this.addonRegistry = addonRegistry; + } + + @Override + public CommandController createSingleController(Class command, UIContextFactory uiFactory) + { + return null; + } + + @Override + public WizardCommandController createWizardController(Class wizard, UIContextFactory uiFactory) + { + return null; + } + + public CommandController create(Class command, UIContext context) + { + if (UIWizardStep.class.isAssignableFrom(command)) + { + throw new IllegalArgumentException("Class " + command.getName() + + " implements UIWizardStep, and it's not possible to start from a step"); + } + else if (UIWizard.class.isAssignableFrom(command)) + { + return null; + } + else if (UICommand.class.isAssignableFrom(command)) + { + // return new SingleCommandController(addonRegistry, addonRegistry.getServices(command).get()); + } + throw new IllegalArgumentException(command + " is not a valid UICommand"); + } +} diff --git a/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/SingleCommandController.java b/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/SingleCommandController.java new file mode 100644 index 0000000000..2b02fd9e4c --- /dev/null +++ b/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/SingleCommandController.java @@ -0,0 +1,25 @@ +/** + * Copyright 2013 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.ui.impl.controller; + +import org.jboss.forge.addon.ui.UICommand; +import org.jboss.forge.furnace.addons.AddonRegistry; + +/** + * + * @author George Gastaldi + */ +abstract class SingleCommandController extends AbstractCommandController +{ + + public SingleCommandController(AddonRegistry addonRegistry, UICommand initialCommand) + { + super(addonRegistry, initialCommand); + } + +} diff --git a/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/WizardCommandControllerImpl.java b/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/WizardCommandControllerImpl.java new file mode 100644 index 0000000000..9831a5eaa1 --- /dev/null +++ b/ui/impl/src/main/java/org/jboss/forge/addon/ui/impl/controller/WizardCommandControllerImpl.java @@ -0,0 +1,85 @@ +/** + * Copyright 2013 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.ui.impl.controller; + +import org.jboss.forge.addon.ui.UICommand; +import org.jboss.forge.addon.ui.controller.WizardCommandController; +import org.jboss.forge.addon.ui.wizard.UIWizard; +import org.jboss.forge.furnace.addons.AddonRegistry; + +/** + * + * @author George Gastaldi + */ +abstract class WizardCommandControllerImpl extends AbstractCommandController implements WizardCommandController +{ + + public WizardCommandControllerImpl(AddonRegistry addonRegistry, UIWizard initialCommand) + { + super(addonRegistry, initialCommand); + } + + @Override + public UIWizard getInitialCommand() + { + return (UIWizard) super.getInitialCommand(); + } + + @Override + public UICommand getCurrentCommand() + { + return null; + } + + @Override + public void launch() throws Exception + { + + } + + @Override + public boolean canFlipToNextPage() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean canFlipToPreviousPage() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean canFinish() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public UICommand next() throws IllegalStateException + { + return null; + } + + @Override + public UICommand previous() throws IllegalStateException + { + return null; + } + + @Override + public void valueChanged() + { + // TODO Auto-generated method stub + + } + +}