001 package toolbus.adapter.eclipse; 002 003 import java.net.InetAddress; 004 import java.net.UnknownHostException; 005 import java.nio.ByteBuffer; 006 007 import toolbus.ToolBusEclipsePlugin; 008 import toolbus.adapter.java.AbstractJavaTool; 009 import aterm.ATerm; 010 import aterm.ATermAppl; 011 import aterm.ATermBlob; 012 import aterm.ATermList; 013 import aterm.pure.PureFactory; 014 import aterm.pure.binary.BinaryReader; 015 016 public class EclipseTool extends AbstractJavaTool{ 017 protected static final String TIME_OUT = "time-out"; 018 019 protected static PureFactory factory = ToolBusEclipsePlugin.getFactory(); 020 021 private static InetAddress host; 022 static{ 023 try{ 024 host = InetAddress.getLocalHost(); 025 }catch(UnknownHostException uhex){ 026 uhex.printStackTrace(); 027 } 028 } 029 private final static int port = ToolBusEclipsePlugin.getPort(); 030 031 private final String name; 032 033 public EclipseTool(String name){ 034 this.name = name; 035 } 036 037 public void connect(){ 038 try{ 039 //connect(new String[0]); 040 connectDirectly(); 041 }catch(Exception e){ 042 e.printStackTrace(); 043 } 044 } 045 046 protected ATerm decode(ATerm encoded) { 047 if (encoded.getType() == ATerm.APPL) { 048 ATermAppl tmp = (ATermAppl) encoded; 049 ATermList chunkList = (ATermList) tmp.getArgument(0); 050 int nrOfChunks = chunkList.getLength(); 051 BinaryReader reader = new BinaryReader((PureFactory) encoded.getFactory()); 052 053 do { 054 ATermBlob chunk = (ATermBlob) chunkList.elementAt(--nrOfChunks); 055 byte[] data = chunk.getBlobData(); 056 057 ByteBuffer buffer = ByteBuffer.allocate(data.length); 058 buffer.put(data); 059 buffer.flip(); 060 061 reader.deserialize(buffer); 062 } while(nrOfChunks > 0); 063 064 return reader.getRoot(); 065 } 066 067 return encoded; 068 } 069 070 private void connectDirectly() throws Exception{ 071 connectDirectly(ToolBusEclipsePlugin.getToolBus(), name, -1); 072 } 073 074 public String getName() { 075 return name; 076 } 077 078 public void connect(String[] args) throws Exception{ 079 EclipseToolBridge bridge = new EclipseToolBridge(factory, this, name, -1, host, port); 080 setToolBridge(bridge); 081 bridge.run(); 082 } 083 084 public void receiveTerminate(ATerm aTerm){ 085 // Intentionally left empty. 086 } 087 088 public void receiveAckEvent(ATerm aTerm){ 089 // Intentionally left empty. 090 } 091 }