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 public class RecRequest extends Atom{
014 private final Ref toolId;
015 private final Ref request;
016 private ToolInstance toolInstance;
017
018 public RecRequest(ATerm toolId, ATerm request, TBTermFactory tbfactory, PositionInformation posInfo){
019 super(tbfactory, posInfo);
020
021 this.toolId = new Ref(toolId);
022 this.request = new Ref(request);
023 setAtomArgs(new Ref[]{this.toolId, this.request});
024 externalNameAsReceivedByTool = "snd-request";
025 }
026
027 public ProcessExpression copy(){
028 Atom a = new RecRequest(toolId.value, request.value, tbfactory, getPosInfo());
029 a.copyAtomAttributes(this);
030
031 return a;
032 }
033
034 public void activate(){
035 toolInstance = null;
036 super.activate();
037 }
038
039 public boolean execute() throws ToolBusException{
040 if(!isEnabled()) return false;
041
042 if(toolInstance == null){
043 ATerm tid = getEnv().getValue((TBTermVar) toolId.value);
044 toolInstance = getToolBus().getToolInstanceManager().get(tid);
045 if(toolInstance == null) return false;
046 }
047 return toolInstance.getRequestFromTool(request.value, getEnv());
048 }
049 }