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    }