Package org.jboss.forge.addon.shell.aesh

Source Code of org.jboss.forge.addon.shell.aesh.CommandAdapter

/**
* 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.shell.aesh;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.jboss.aesh.console.command.Command;
import org.jboss.aesh.console.command.CommandInvocation;
import org.jboss.aesh.console.command.CommandResult;
import org.jboss.aesh.extensions.manual.ManCommand;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.addon.shell.ShellImpl;
import org.jboss.forge.addon.shell.ShellMessages;
import org.jboss.forge.addon.shell.ui.ShellContext;
import org.jboss.forge.addon.shell.ui.ShellValidationContext;
import org.jboss.forge.addon.ui.result.Failed;
import org.jboss.forge.addon.ui.result.Result;

/**
* Adapts the current {@link AbstractShellInteraction} to a {@link Command}
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
class CommandAdapter implements Command<CommandInvocation>, ManCommand
{
   private final ShellImpl shell;
   private final AbstractShellInteraction interaction;

   public CommandAdapter(ShellImpl shell, AbstractShellInteraction interaction)
   {
      this.shell = shell;
      this.interaction = interaction;
   }

   @SuppressWarnings("unchecked")
   @Override
   public CommandResult execute(CommandInvocation commandInvocation) throws IOException
   {
      boolean failure;
      ShellValidationContext validationContext = interaction.validate();
      List<String> errors = validationContext.getErrors();
      if (errors.isEmpty())
      {
         Result result = shell.execute(interaction);
         failure = (result instanceof Failed);
         if (result != null && result.getMessage() != null && !result.getMessage().isEmpty())
         {
            if (failure)
            {
               ShellMessages.error(shell.getConsole().err(), result.getMessage());
            }
            else
            {
               ShellMessages.success(shell.getConsole().out(), result.getMessage());
            }
         }
         ShellContext context = interaction.getContext();
         Object selection = context.getSelection();
         if (selection != null)
         {
            if (selection instanceof Iterable<?>)
            {
               for (FileResource<?> item : (Iterable<FileResource<?>>) selection)
               {
                  if (item != null)
                  {
                     shell.setCurrentResource(item);
                     break;
                  }
               }
            }
            else
            {
               shell.setCurrentResource((FileResource<?>) selection);
            }
         }

      }
      else
      {
         failure = true;
         // Display the error messages
         for (String error : errors)
         {
            ShellMessages.error(shell.getConsole().err(), error);
         }
      }
      return failure ? CommandResult.FAILURE : CommandResult.SUCCESS;
   }

   @Override
   public File getManLocation()
   {
      return interaction.getManLocation();
   }
}
TOP

Related Classes of org.jboss.forge.addon.shell.aesh.CommandAdapter

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.