001 /* 002 * Created on Oct 6, 2005 003 */ 004 package toolbus.atom.tool; 005 006 import toolbus.TBTermFactory; 007 import toolbus.TBTermVar; 008 import toolbus.ToolInstanceManager; 009 import toolbus.atom.Atom; 010 import toolbus.atom.Ref; 011 import toolbus.exceptions.ToolBusException; 012 import toolbus.parsercup.PositionInformation; 013 import toolbus.process.ProcessExpression; 014 import toolbus.tool.ToolInstance; 015 import aterm.ATerm; 016 import aterm.ATermAppl; 017 018 /** 019 * @author paulk 020 */ 021 public class Connect extends Atom{ 022 private final Ref toolId; 023 private final boolean followsExecute; 024 025 public Connect(ATerm toolId, TBTermFactory tbfactory, PositionInformation posInfo, boolean followsExecute){ 026 super(tbfactory, posInfo); 027 028 this.toolId = new Ref(toolId); 029 setAtomArgs(new Ref[]{this.toolId}); 030 031 this.followsExecute = followsExecute; 032 033 externalNameAsReceivedByTool = "snd-connect"; 034 } 035 036 public ProcessExpression copy(){ 037 Atom a = new Connect(toolId.value, tbfactory, getPosInfo(), followsExecute); 038 a.copyAtomAttributes(this); 039 040 return a; 041 } 042 043 /** 044 * @see toolbus.StateElement#execute() 045 */ 046 public boolean execute() throws ToolBusException{ 047 if(!isEnabled()) return false; 048 049 // System.err.println("Connect.execute called; toolname = " + toolId.value); 050 ATerm tid = getEnv().getValue((TBTermVar) toolId.value); 051 052 String toolname = ((ATermAppl) ((TBTermVar) toolId.value).getVarType()).getName(); 053 ToolInstanceManager toolInstanceManager = getToolBus().getToolInstanceManager(); 054 055 ToolInstance ti; 056 if(followsExecute){ 057 ti = toolInstanceManager.activatePendingTool(tid); 058 }else{ 059 ti = toolInstanceManager.activateDynamiclyConnectedTool(toolname); 060 } 061 if(ti == null) return false; 062 063 // System.err.println(getProcess().getProcessName() + ": id = " + id); 064 065 ATerm toolid = ti.getToolKey(); 066 getEnv().assignVar((TBTermVar) toolId.value, toolid); 067 // System.err.println("Connect.execute (" + id + ") assigns: " + toolid); 068 //LoggerFactory.log(this.getProcess().getProcessName(), "Connect " + toolid, IToolBusLoggerConstants.TOOLCOM); 069 return true; 070 } 071 072 }