All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.cli.commands.CliCommand Maven / Gradle / Ivy

package org.infinispan.cli.commands;

import org.aesh.command.Command;
import org.aesh.command.CommandException;
import org.aesh.command.CommandResult;
import org.aesh.terminal.utils.ANSI;
import org.infinispan.cli.impl.ContextAwareCommandInvocation;
import org.infinispan.commons.CacheConfigurationException;
import org.infinispan.commons.util.Util;

/**
 * @author Tristan Tarrant <[email protected]>
 * @since 10.0
 **/
public abstract class CliCommand implements Command {

   @Override
   public CommandResult execute(ContextAwareCommandInvocation invocation) throws CommandException {
      if (isHelp()) {
         invocation.println(invocation.getHelpInfo());
         return CommandResult.SUCCESS;
      }
      try {
         return exec(invocation);
      } catch (CommandException e) {
         Throwable cause = Util.getRootCause(e);
         invocation.getShell().writeln(ANSI.RED_TEXT + e.getLocalizedMessage() + ANSI.DEFAULT_TEXT);
         if (cause != e) {
            invocation.getShell().writeln(ANSI.RED_TEXT + cause.getClass().getSimpleName() + ": " + cause.getLocalizedMessage() + ANSI.DEFAULT_TEXT);
         }
         return CommandResult.FAILURE;
      } catch (CacheConfigurationException e) {
         System.err.println(ANSI.RED_TEXT + e.getLocalizedMessage() + ANSI.DEFAULT_TEXT);
         return CommandResult.FAILURE;
      } catch (Throwable e) {
         // These are unhandled
         Throwable cause = Util.getRootCause(e);
         System.err.println(ANSI.RED_TEXT + cause.getClass().getSimpleName() +": " + cause.getLocalizedMessage() + ANSI.DEFAULT_TEXT);
         return CommandResult.FAILURE;
      }
   }

   protected abstract boolean isHelp();

   protected abstract CommandResult exec(ContextAwareCommandInvocation invocation) throws CommandException;

   public int nesting() {
      return 0;
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy