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