001 /*
002 * Created on Jul 7, 2005 @author paulk
003 */
004 package toolbus.atom.tool;
005
006 import toolbus.TBTermFactory;
007 import toolbus.TBTermVar;
008 import toolbus.atom.Atom;
009 import toolbus.atom.Ref;
010 import toolbus.exceptions.ToolBusException;
011 import toolbus.logging.ILogger;
012 import toolbus.logging.IToolBusLoggerConstants;
013 import toolbus.logging.LoggerFactory;
014 import toolbus.parsercup.PositionInformation;
015 import toolbus.process.ProcessExpression;
016 import toolbus.tool.ToolInstance;
017 import aterm.ATerm;
018
019 public class SndKill extends Atom{
020 private final Ref toolId;
021 private final Ref message;
022 private ToolInstance toolInstance;
023
024 public SndKill(ATerm toolId, ATerm value, TBTermFactory tbfactory, PositionInformation posInfo){
025 super(tbfactory, posInfo);
026
027 this.toolId = new Ref(toolId);
028 this.message = new Ref(value);
029 setAtomArgs(new Ref[]{this.toolId});
030 externalNameAsReceivedByTool = "snd-kill";
031 }
032
033 /**
034 * @see toolbus.process.ProcessExpression#copy()
035 */
036 public ProcessExpression copy(){
037 Atom a = new SndKill(toolId.value, message.value, tbfactory, getPosInfo());
038 a.copyAtomAttributes(this);
039
040 return a;
041 }
042
043 public void activate(){
044 toolInstance = null;
045 super.activate();
046 }
047
048 public boolean execute() throws ToolBusException{
049 if(!isEnabled()) return false;
050
051 if(toolInstance == null){
052 ATerm tid = getEnv().getValue((TBTermVar) toolId.value);
053 toolInstance = getToolBus().getToolInstanceManager().get(tid);
054 if(toolInstance == null) return false;
055 }
056
057 if(toolInstance.isExecutedTool()){
058 toolInstance.kill();
059 }else{
060 LoggerFactory.log("Unable to kill tool with id: "+getEnv().getValue((TBTermVar) toolId.value)+", since it it's not a remotely executed tool.", ILogger.ERROR, IToolBusLoggerConstants.TOOLCOM);
061 }
062 //LoggerFactory.log(getProcess().getProcessName(), "Send kill: "+message.value, IToolBusLoggerConstants.TOOLCOM);
063 return true;
064 }
065 }