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 }