001 package toolbus.atom.tool;
002
003 import toolbus.TBTermFactory;
004 import toolbus.TBTermVar;
005 import toolbus.atom.Atom;
006 import toolbus.atom.Ref;
007 import toolbus.exceptions.ToolBusException;
008 import toolbus.parsercup.PositionInformation;
009 import toolbus.process.ProcessExpression;
010 import toolbus.tool.ToolInstance;
011 import aterm.ATerm;
012
013 /**
014 * @author paulk, Aug 7, 2002
015 */
016 public class Event extends Atom{
017 private final Ref toolId;
018 private final Ref result;
019 private ToolInstance toolInstance;
020
021 public Event(ATerm toolId, ATerm result, TBTermFactory tbfactory, PositionInformation posInfo){
022 super(tbfactory, posInfo);
023
024 this.toolId = new Ref(toolId);
025 this.result = new Ref(result);
026 setAtomArgs(new Ref[]{this.toolId, this.result});
027 externalNameAsReceivedByTool = "snd-event";
028 }
029
030 public ProcessExpression copy(){
031 Atom a = new Event(toolId.value, result.value, tbfactory, getPosInfo());
032 a.copyAtomAttributes(this);
033
034 return a;
035 }
036
037 public void activate(){
038 toolInstance = null;
039 super.activate();
040 }
041
042 public boolean execute() throws ToolBusException{
043 if(!isEnabled()) return false;
044
045 if(toolInstance == null){
046 ATerm tid = getEnv().getValue((TBTermVar) toolId.value);
047 toolInstance = getToolBus().getToolInstanceManager().get(tid);
048 if(toolInstance == null) return false;
049 }
050
051 if(toolInstance.getEventFromTool(result.value, getEnv())){
052 //LoggerFactory.log(this.getProcess().getProcessName(), "Event " + result.value, IToolBusLoggerConstants.TOOLCOM);
053 return true;
054 }
055 return false;
056 }
057 }