Package org.jboss.forge.addon.ui.impl.controller

Source Code of org.jboss.forge.addon.ui.impl.controller.AbstractCommandController

/**
* 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 java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.jboss.forge.addon.ui.UIRuntime;
import org.jboss.forge.addon.ui.command.CommandExecutionListener;
import org.jboss.forge.addon.ui.command.UICommand;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.context.UIExecutionContext;
import org.jboss.forge.addon.ui.controller.CommandController;
import org.jboss.forge.addon.ui.impl.context.UIValidationContextImpl;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.output.UIMessage;
import org.jboss.forge.addon.ui.result.Result;
import org.jboss.forge.furnace.addons.AddonRegistry;
import org.jboss.forge.furnace.util.Assert;

/**
* Base class for {@link CommandController} implementations.
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public abstract class AbstractCommandController implements CommandController
{
   protected final AddonRegistry addonRegistry;
   protected final UIRuntime runtime;
   protected final UIContext context;
   protected final UICommand initialCommand;

   private static final Logger log = Logger.getLogger(AbstractCommandController.class.getName());

   protected AbstractCommandController(AddonRegistry addonRegistry, UIRuntime runtime,
            UICommand initialCommand, UIContext context)
   {
      this.addonRegistry = addonRegistry;
      this.runtime = runtime;
      this.initialCommand = initialCommand;
      this.context = context;
   }

   protected void assertInitialized()
   {
      Assert.isTrue(isInitialized(), "Controller must be initialized.");
   }

   protected void assertValid()
   {
      Assert.isTrue(isValid(), "Controller is not in valid state.");
   }

   @Override
   public List<UIMessage> validate(InputComponent<?, ?> input)
   {
      assertInitialized();
      Assert.notNull(input, "InputComponent must not be null.");
      Assert.isTrue(getInputs().values().contains(input), "InputComponent must belong to this command.");
      UIValidationContextImpl validationContext = new UIValidationContextImpl(context);
      input.validate(validationContext);
      return validationContext.getMessages();
   }

   @Override
   public UIContext getContext()
   {
      return context;
   }

   @Override
   public boolean equals(Object obj)
   {
      boolean result = false;
      if (obj instanceof CommandController)
      {
         CommandController newController = (CommandController) obj;
         // Same class Name
         if (!getCommand().getClass().getName().equals(newController.getCommand().getClass().getName()))
         {
            result = false;
         }
         else if (isInitialized() && newController.isInitialized())
         {
            // Compare inputs
            Set<String> originalInputNames = getInputs().keySet();
            Set<String> newInputNames = newController.getInputs().keySet();
            if (originalInputNames.containsAll(newInputNames) && newInputNames.containsAll(originalInputNames))
            {
               result = true;
            }
         }
      }
      return result;
   }

   protected void firePreCommandExecuted(UIExecutionContext executionContext,
            Set<CommandExecutionListener> listeners, UICommand command)
   {
      for (CommandExecutionListener listener : listeners)
      {
         try
         {
            listener.preCommandExecuted(command, executionContext);
         }
         catch (Throwable t)
         {
            log.log(Level.SEVERE, "Error while notifying listeners", t);
         }
      }
   }

   protected void firePostCommandFailure(UIExecutionContext executionContext,
            Set<CommandExecutionListener> listeners, UICommand command, Exception e)
   {
      for (CommandExecutionListener listener : listeners)
      {
         try
         {
            listener.postCommandFailure(command, executionContext, e);
         }
         catch (Throwable t)
         {
            log.log(Level.SEVERE, "Error while notifying listeners", t);
         }
      }
   }

   protected void firePostCommandExecuted(UIExecutionContext executionContext,
            Set<CommandExecutionListener> listeners, UICommand command, Result currentResult)
   {
      for (CommandExecutionListener listener : listeners)
      {
         try
         {
            listener.postCommandExecuted(command, executionContext, currentResult);
         }
         catch (Throwable t)
         {
            log.log(Level.SEVERE, "Error while notifying listeners", t);
         }
      }
   }
}
TOP

Related Classes of org.jboss.forge.addon.ui.impl.controller.AbstractCommandController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.