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

org.impalaframework.interactive.command.InteractiveTestCommand Maven / Gradle / Ivy

There is a newer version: 1.0.3
Show newest version
/*
 * Copyright 2007-2010 the original author or authors.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package org.impalaframework.interactive.command;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.impalaframework.command.framework.Command;
import org.impalaframework.command.framework.CommandDefinition;
import org.impalaframework.command.framework.CommandInfo;
import org.impalaframework.command.framework.CommandPropertyValue;
import org.impalaframework.command.framework.CommandState;
import org.impalaframework.command.framework.GlobalCommandState;
import org.impalaframework.command.framework.TerminatedApplicationException;
import org.impalaframework.command.framework.TerminatedCommandException;
import org.impalaframework.command.framework.TextParsingCommand;
import org.impalaframework.interactive.command.listener.TestCommandListener;

public class InteractiveTestCommand implements Command {
    
    private Map commandMap = new HashMap();
    private Map aliasMap = new HashMap();
    private List listeners = new ArrayList(); 
    
    public boolean execute(CommandState commandState) {
        
        CommandPropertyValue fullCommandText = commandState.getProperties().get(CommandStateConstants.COMMAND_TEXT);
        GlobalCommandState.getInstance().addProperty(CommandStateConstants.LAST_COMMAND, fullCommandText);
        
        String commandText = fullCommandText.getValue();
        String[] commandTerms = commandText.split(" ");
        String[] extraTerms = new String[commandTerms.length -1];
        
        if (commandTerms.length > 1) {
            System.arraycopy(commandTerms, 1, extraTerms, 0, extraTerms.length);
        }
        
        final String commandName = commandTerms[0];
        Command command = commandMap.get(commandName);
        
        if (command == null && aliasMap != null) {
            //treat command name as an alias
            String aliasName = commandName;
            String aliasCommandName = aliasMap.get(aliasName);
            command = commandMap.get(aliasCommandName);
        }
        
        if (command != null) {
            if (extraTerms.length > 0 && command instanceof TextParsingCommand) {
                TextParsingCommand t = (TextParsingCommand) command;
                t.extractText(extraTerms, commandState);
            }
        
            try {
                commandState.captureInput(command);
                command.execute(commandState);
            }
            catch (TerminatedCommandException e) {
                //a terminated application exception should be silently caught and ignored
            }
            catch (TerminatedApplicationException e) {
                //a terminated application exception should be rethrown
                throw e;
            }
            catch (RuntimeException e) {
                System.out.println("Error executing command " + fullCommandText);
                InteractiveCommandUtils.printException(e);
            }
        } else {
            System.out.println("Unrecognised command or alias " + commandName);
        }
        
        for (TestCommandListener testCommandListener : listeners) {
            testCommandListener.commandExecuted(commandText);
        }
        
        return false;
    }

    public void addCommand(String name, Command command) {
        commandMap.put(name, command);
    }
    
    public void setCommandMap(Map commandMap) {
        this.commandMap.clear();
        this.commandMap.putAll(commandMap);
    }

    public void addAlias(String name, String alias) {
        aliasMap.put(name, alias);
    }
    
    public void setAliasMap(Map aliasMap) {
        this.aliasMap.clear();
        this.aliasMap.putAll(aliasMap);
    }

    public void addTestListener(TestCommandListener listener) {
        this.listeners.add(listener);
    }
    
    public CommandDefinition getCommandDefinition() {
        CommandInfo commandInfo = new CommandInfo("commandText", "Command text", "Please enter your command text",
                null, null, false, false, false, false);

        CommandDefinition commandDefinititon = new CommandDefinition();
        commandDefinititon.add(commandInfo);
        return commandDefinititon;  
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy