/*
* Patterns Library - Implementation of various design patterns
* Copyright (C) 2004 Philippe Herlin
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Contact: philippe_herlin@yahoo.fr
*
*/
package name.herlin.command;
/**
* A command interface
*/
public interface Command extends java.io.Serializable {
/**
* A command can execute. If a technical error or unexpected condition
* occurred, a command may throw a CommandException. The execution method
* returns nothing. It is expected that command result is returned via
* output properties.
* @throws CommandException on unexpected condition
*/
void performExecute() throws CommandException;
/**
* @return true if the command is a read only command, that is it doesn't
* apply any modification to the underlying model.
*/
boolean isReadOnly();
/**
* @return true if the command is ready to execute. It is expected that
* concrete commands are not ready by default and switched to ready only
* when all input properties are set. If a perform execute is called when
* ready to execute is false, then a UnsetPropertiesException is thrown.
*/
boolean isReadyToExecute();
/**
* @return whether this command has terminated its job
*/
boolean isTerminated();
/**
* Concrete command should implement this method to reset input properties
* in order to make the instance of the command to be reused for further
* usage.
*/
void reset();
/**
* @return the name of the Command
*/
String getName();
/**
* @return the description of the Command
*/
String getDescription();
/**
* Wait until that command is finished
*
*/
void join() throws CommandException;
}