/*------------------------------------------------------------------------- svninfo: $Id$ Maarten's Mud, WWW-based MUD using MYSQL Copyright (C) 1998 Maarten van Leunen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Maarten van Leunen Appelhof 27 5345 KA Oss Nederland Europe maarten_l@yahoo.com -------------------------------------------------------------------------*/ package mmud.commands; import java.util.logging.Logger; import mmud.MethodDoesNotExistException; import mmud.MudException; import mmud.UserCommandInfo; import mmud.characters.User; import mmud.database.Database; /** * The Script Command. Runs a script. * * @see mmud.Constants#getCommand */ public class ScriptCommand extends NormalCommand { private final UserCommandInfo theCommandInfo; private String theResult; /** * Constructor for the script command. * * @param aCommandInfo * data class containing information about the command. */ public ScriptCommand(UserCommandInfo aCommandInfo) { super(aCommandInfo.getCommand()); theCommandInfo = aCommandInfo; } @Override public boolean run(User aUser) throws MudException { Logger.getLogger("mmud").finer(""); if ((theCommandInfo.getRoom() != null) && (aUser.getRoom().getId() != theCommandInfo.getRoom() .intValue())) { return false; } String mySource = Database.getMethodSource(theCommandInfo .getMethodName()); Object stuff = null; try { if (mySource == null) { throw new MethodDoesNotExistException(" (" + theCommandInfo.getMethodName() + ")"); } stuff = aUser.runScript("command", mySource, getParsedCommand()); } catch (MudException e) { theCommandInfo.deactivateCommand(); throw e; } if (!(stuff instanceof String)) { theResult = null; return true; } theResult = (String) stuff; if ("false".equalsIgnoreCase(theResult)) { theResult = null; return false; } theResult += aUser.printForm(); return true; } @Override public String getResult() { Logger.getLogger("mmud").finer(""); return theResult; } /** * There are too many parameters required for this one to be automatically * created using the standard. Instead, this method will return the object * on which it was called. This should not be a problem, as script commands * are always created anew. * * @return <I>this</I> */ public Command createCommand() { return this; } }