View Javadoc

1   /*
2    * Copyright (c) 2006 Stiftung Deutsches Elektronen-Synchroton,
3    * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
4    *
5    * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS.
6    * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
7    * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND
8    * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
9    * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
10   * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
11   * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE
12   * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR
13   * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.
14   * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
15   * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
16   * OR MODIFICATIONS.
17   * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION,
18   * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS
19   * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY
20   * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM
21   */
22  
23  package de.desy.acop.transport.tine;
24  
25  import java.util.Date;
26  import java.util.Vector;
27  import de.desy.acop.chart.Acop;
28  import de.desy.acop.transport.AcopTransportAccessMethods;
29  import de.desy.acop.transport.AcopTransportPlug;
30  import de.desy.acop.transport.AcopTransportRequest;
31  import de.desy.tine.queryUtils.*;
32  import de.desy.tine.client.*;
33  import de.desy.tine.dataUtils.*;
34  import de.desy.tine.definitions.*;
35  import de.desy.tine.io.*;
36  import de.desy.tine.structUtils.*;
37  import de.desy.tine.stringUtils.*;
38  import de.desy.tine.types.*;
39  
40  /**
41   * @version 	1.0
42   * @author
43   */
44  public class AcopTransportTine implements AcopTransportPlug
45  {
46    private AcopTransportTineCallback tcb;
47    private Vector linkTable = new Vector();
48    private int addLink(TLink tl)
49    {
50      linkTable.addElement(tl);
51      return linkTable.indexOf(tl);
52    }
53    private int getTableId(TLink tl)
54    {
55      return linkTable.indexOf(tl);
56    }  
57    private int getTableId(int linkId)
58    {
59      for (int i=0; i<linkTable.size(); i++)
60      {
61        if (((TLink)linkTable.elementAt(i)).linkId == linkId) return i;
62      }
63      return -1;
64    }  
65    private int rmvLink(TLink tl)
66    {
67      linkTable.removeElement(tl);
68      return 0;
69    }
70    private String deviceName;
71    private String makeDeviceName(AcopTransportRequest atr)
72    {
73      if (atr.deviceContext != null && atr.deviceContext.length() > 0)
74      {
75        return new String("/" + atr.deviceContext + 
76                             "/" + atr.deviceGroup + 
77                             "/" + atr.deviceName);
78      }
79      else
80      {
81        return new String(atr.deviceGroup + "/" + atr.deviceName);
82      }
83    }
84    private int makeAccessRate(AcopTransportRequest atr)
85    {
86      int rate = (new Integer(atr.accessRate)).intValue();
87      if (rate == 0) rate = 1000;
88      return rate;
89    }
90    private short makeAccessMode(AcopTransportRequest atr)
91    {
92      short m = 0;
93      String tmp = atr.accessMode.toString();
94      if (tmp.indexOf("READ") >= 0) m |= TMode.CM_SINGLE;
95      if (tmp.indexOf("WRITE") >= 0) m |= TMode.CM_SINGLE;
96      if (tmp.indexOf("POLL") >= 0) m |= TMode.CM_POLL;
97      if (tmp.indexOf("REFRESH") >= 0) m |= TMode.CM_REFRESH;
98      if (tmp.indexOf("EVENT") >= 0) m |= TMode.CM_EVENT;
99      if (tmp.indexOf("CONNECT") >= 0) m |= TMode.CM_CONNECT;
100     if (tmp.indexOf("NETWORK") >= 0) m |= TMode.CM_NETWORK;
101     if (tmp.indexOf("BROADCAST") >= 0) m |= TMode.CM_BCAST;
102     if (tmp.indexOf("MULTICAST") >= 0) m |= TMode.CM_MCAST;
103     if (tmp.indexOf("RECEIVE") >= 0) m |= TMode.CM_GLOBAL;
104     if (tmp.indexOf("GLOBAL") >= 0) m |= TMode.CM_GLOBAL;
105     if (tmp.indexOf("WAIT") >= 0) m |= TMode.CM_WAIT;
106     if (tmp.indexOf("USE_ON_ERROR") >= 0) m |= TMode.CM_WAIT;
107     return m;
108   }
109   public int acquireDisplayProperties(Acop a,String deviceContext,String deviceGroup,String deviceName,String deviceProperty)
110   {
111     PropertyQueryEx[] p = TQuery.getDevicePropertyInformation(deviceContext, deviceGroup, deviceName, deviceProperty);
112     if (p != null)
113     {
114       a.setYMax(p[0].prpMaxValue);
115       a.setYMin(p[0].prpMinValue);
116       a.setXMax(p[0].prpSize);
117       a.setXMin(0);
118       a.setYAxisLabel(p[0].prpUnits);
119       a.setXAxisLabel(p[0].prpDescription);
120       switch (p[0].prpGraphType) 
121       {
122         case 0: a.setGraphStyle(0); break;// lin-lin
123         case 1: a.setGraphStyle(1); break;// log-lin
124       }
125       return 0;
126     }
127     return -1;
128   }
129   /**
130    * @see AcopPack.acopTransportPlug#handleRequest(acopTransportRequest)
131    */
132   public int handleRequest(AcopTransportRequest atr)
133   {
134     TDataType dout, din;
135     short access;
136     int id;
137     TLink tl = null;
138 
139     switch (atr.accessMethod)
140     {
141       case AcopTransportAccessMethods.EXECUTE:
142         if (!atr.accessMode.isReadMode() && !atr.accessMode.isWriteMode())
143         {
144           atr.status = "illegal mode (READ or WRITE required)";
145           atr.setDataTimeStamp(new Date());
146           return -1;
147         }
148         deviceName = makeDeviceName(atr);
149         dout = toTDataType(atr.getData(),atr.getArraySize(),!atr.isUnboundToData);
150         if (dout == null) dout = new TDataType();
151         din = toTDataType(atr.getDataEx(),atr.getArraySizeEx(),!atr.isUnboundToData);
152         if (din == null) din = new TDataType();
153         access = TAccess.CA_READ;
154         if (atr.accessMode.isWriteMode()) access |= TAccess.CA_WRITE;
155         try
156         {
157           tl = new TLink(deviceName,atr.deviceProperty,dout,din,access);
158           atr.statusCode = tl.execute(makeAccessRate(atr));
159           atr.setDataSize(dout.getLastDataSize());
160           if (atr.statusCode > 0) atr.status = tl.getLastError();
161           else atr.status = "Success";
162           tl.cancel();
163           if (atr.getDataTimeStamp() == null) atr.setDataTimeStamp(new Date());
164           atr.getDataTimeStamp().setTime(dout.getTimeStamp());
165           return atr.statusCode;
166         }
167         catch (Exception e)
168         {
169           atr.status = e.getMessage();
170           if (tl != null) tl.cancel();
171           return -1;
172         }
173       case AcopTransportAccessMethods.ATTACH:
174         deviceName = makeDeviceName(atr);
175         dout = toTDataType(atr.getData(),atr.getArraySize(),!atr.isUnboundToData);
176         din = toTDataType(atr.getDataEx(),atr.getArraySizeEx(),!atr.isUnboundToData);
177         access = TAccess.CA_READ;
178         if (atr.accessMode.isWriteMode()) access |= TAccess.CA_WRITE;
179         tl = new TLink(deviceName,atr.deviceProperty,dout,din,access);
180         tcb = new AcopTransportTineCallback(atr.atc);
181         addLink(tl);
182         short mode = makeAccessMode(atr);
183         try
184         {
185           if ((mode & TMode.CM_GLOBAL) == TMode.CM_GLOBAL)
186           {
187             atr.setLinkHandle(tl.receive(tcb));
188           }
189           else
190           {
191             atr.setLinkHandle(tl.attach(mode,tcb,makeAccessRate(atr)));
192           }
193           if (atr.getLinkHandle() < 0)
194           {
195             atr.statusCode = -atr.getLinkHandle();
196             atr.status = tl.getError(atr.statusCode);
197             return -1;
198           }
199           return atr.getLinkHandle();
200         }
201         catch (Exception e)
202         {
203           atr.statusCode = -1;
204           atr.status = e.getMessage();
205           return -1;
206         }
207       case AcopTransportAccessMethods.CLOSE:
208         id = getTableId(atr.getLinkHandle());
209         if (id >= 0) tl = (TLink)linkTable.elementAt(id);
210         if (tl != null) 
211         {
212           tl.cancel();
213           linkTable.remove(id);
214         }
215         break;
216       case AcopTransportAccessMethods.GETDATA: 
217         id = getTableId(atr.getLinkHandle());
218         if (id >= 0) tl = (TLink)linkTable.elementAt(id);
219         if (tl == null)
220         {
221           atr.statusCode = -1;  
222           atr.status = "Invalid Link Index";
223           return -1;
224         }
225         atr.statusCode = tl.getLinkStatus();  
226         if (atr.statusCode > 0) atr.status = tl.getLastError();
227         else atr.status = "Success";
228         if (atr.getDataTimeStamp() == null) atr.setDataTimeStamp(new Date());        
229         atr.getDataTimeStamp().setTime(tl.getLastTimeStamp());
230         if (atr.isUnboundToData)
231         {
232           if (atr.getData() != null)
233           {
234             dout = tl.getOutputDataObject();
235             dout.getData(atr.getData());
236           }
237           if (atr.getDataEx() != null)
238           {
239             din = tl.getInputDataObject();
240             din.getData(atr.getDataEx());
241           }
242         }
243         break;
244       case AcopTransportAccessMethods.SHUTDOWN:
245         for (id=0; id<linkTable.size(); id++)
246         {
247           ((TLink)linkTable.elementAt(id)).cancel();
248         }
249         break;
250       case AcopTransportAccessMethods.GETINFO:
251         id = getTableId(atr.getLinkHandle());
252         if (id >= 0) tl = (TLink)linkTable.elementAt(id);
253         if (tl == null)
254         {
255           atr.statusCode = -1;  
256           atr.status = "Invalid Link Index";
257           return -1;
258         }
259         atr.setDeviceInfo(TQuery.getModuleAddressInfo(tl.getDeviceServer(), tl.getContext()));
260         break;
261       default: 
262         return -1;
263     }
264 		return 0;
265   }
266   /**
267    * @see AcopPack.acopTransportPlug#getPlugName()
268    */
269   public String getPlugName()
270   {
271     return "TINE";
272   }
273   public double[] getYAxis(Object data)
274   {
275     int siz = getObjectSize(data);
276     if (siz > 0)
277     {
278       if (data instanceof double[]) return (double[])data;
279       double[] y;
280       if (data instanceof SPECTRUM)
281       { 
282         siz = ((SPECTRUM)data).length;
283         y = new double[siz];
284         for (int i=0; i<siz; i++) y[i] = ((SPECTRUM)data).d_spect_array[i];
285         return y;
286       }
287       y = new double[siz];
288       if (data instanceof float[]) for (int i=0; i<siz; i++) y[i] = ((float[])data)[i];
289       else if (data instanceof byte[]) for (int i=0; i<siz; i++) y[i] = ((byte[])data)[i];
290       else if (data instanceof short[]) for (int i=0; i<siz; i++) y[i] = ((short[])data)[i];
291       else if (data instanceof int[]) for (int i=0; i<siz; i++) y[i] = ((int[])data)[i];
292       else if (data instanceof long[]) for (int i=0; i<siz; i++) y[i] = (double)((long[])data)[i];
293       else if (data instanceof FLTINT[]) for (int i=0; i<siz; i++) y[i] = ((FLTINT[])data)[i] != null ? ((FLTINT[])data)[i].fval : 0;
294       else if (data instanceof POINT[]) for (int i=0; i<siz; i++) y[i] = ((POINT[])data)[i] != null ? ((POINT[])data)[i].f2val : 0;
295       else if (data instanceof FLTFLT[]) for (int i=0; i<siz; i++) y[i] = ((FLTFLT[])data)[i] != null ? ((FLTFLT[])data)[i].f1val : 0;
296       else if (data instanceof DBLINT[]) for (int i=0; i<siz; i++) y[i] = ((DBLINT[])data)[i] != null ? ((DBLINT[])data)[i].dval : 0;
297       else if (data instanceof INTINT[]) for (int i=0; i<siz; i++) y[i] = ((INTINT[])data)[i] != null ? ((INTINT[])data)[i].i1val : 0;
298       else if (data instanceof DBLDBL[]) for (int i=0; i<siz; i++) y[i] = ((DBLDBL[])data)[i] != null ? ((DBLDBL[])data)[i].d1val : 0;
299       else if (data instanceof TDS[]) for (int i=0; i<siz; i++) y[i] = ((TDS[])data)[i] != null ? ((TDS[])data)[i].dval : 0;
300       else if (data instanceof INTFLTINT[]) for (int i=0; i<siz; i++) y[i] = ((INTFLTINT[])data)[i] != null ? ((INTFLTINT[])data)[i].fval : 0;
301       else if (data instanceof FLTFLTINT[]) for (int i=0; i<siz; i++) y[i] = ((FLTFLTINT[])data)[i] != null ? ((FLTFLTINT[])data)[i].f1val : 0;
302       else if (data instanceof FLTINTINT[]) for (int i=0; i<siz; i++) y[i] = ((FLTINTINT[])data)[i] != null ? ((FLTINTINT[])data)[i].f1val : 0;
303       else if (data instanceof INTINTINT[]) for (int i=0; i<siz; i++) y[i] = ((INTINTINT[])data)[i] != null ? ((INTINTINT[])data)[i].i1val : 0;
304       else if (data instanceof INTINTINTINT[]) for (int i=0; i<siz; i++) y[i] = ((INTINTINTINT[])data)[i] != null ? ((INTINTINTINT[])data)[i].i1val : 0;
305       else if (data instanceof NAME16I[]) for (int i=0; i<siz; i++) y[i] = ((NAME16I[])data)[i] != null ? ((NAME16I[])data)[i].ival : 0;
306       else if (data instanceof NAME32I[]) for (int i=0; i<siz; i++) y[i] = ((NAME32I[])data)[i] != null ? ((NAME32I[])data)[i].ival : 0;
307       else if (data instanceof NAME64I[]) for (int i=0; i<siz; i++) y[i] = ((NAME64I[])data)[i] != null ? ((NAME64I[])data)[i].ival : 0;
308       else if (data instanceof NAME16FI[]) for (int i=0; i<siz; i++) y[i] = ((NAME16FI[])data)[i] != null ? ((NAME16FI[])data)[i].fval : 0;
309       else if (data instanceof NAME16II[]) for (int i=0; i<siz; i++) y[i] = ((NAME16II[])data)[i] != null ? ((NAME16II[])data)[i].i1val : 0;
310       else if (data instanceof NAME16DBLDBL[]) for (int i=0; i<siz; i++) y[i] = ((NAME16DBLDBL[])data)[i] != null ? ((NAME16DBLDBL[])data)[i].d1val : 0;
311       else if (data instanceof NAME32DBLDBL[]) for (int i=0; i<siz; i++) y[i] = ((NAME32DBLDBL[])data)[i] != null ? ((NAME32DBLDBL[])data)[i].d1val : 0;
312       else if (data instanceof NAME64DBLDBL[]) for (int i=0; i<siz; i++) y[i] = ((NAME64DBLDBL[])data)[i] != null ? ((NAME64DBLDBL[])data)[i].d1val : 0;
313       else if (data instanceof USTRING[]) for (int i=0; i<siz; i++) y[i] = ((USTRING[])data)[i] != null ? ((USTRING[])data)[i].f1val : 0;
314       else if (data instanceof UNAME[]) for (int i=0; i<siz; i++) y[i] = ((UNAME[])data)[i] != null ? ((UNAME[])data)[i].f2val : 0;
315       else if (data instanceof Object[]) 
316       {
317         if ((((Object[])data)[0]) instanceof Double) for (int i=0; i<siz; i++) y[i] =  ((Double)(((Object[])data)[i])).doubleValue();
318         else if ((((Object[])data)[0]) instanceof Float) for (int i=0; i<siz; i++) y[i] =  ((Float)(((Object[])data)[i])).floatValue();
319         else if ((((Object[])data)[0]) instanceof Short) for (int i=0; i<siz; i++) y[i] =  ((Short)(((Object[])data)[i])).shortValue();
320         else if ((((Object[])data)[0]) instanceof Integer) for (int i=0; i<siz; i++) y[i] =  ((Integer)(((Object[])data)[i])).intValue();
321         else if ((((Object[])data)[0]) instanceof Long) for (int i=0; i<siz; i++) y[i] =  (double)((Long)(((Object[])data)[i])).intValue();
322         else if ((((Object[])data)[0]) instanceof Byte) for (int i=0; i<siz; i++) y[i] =  ((Byte)(((Object[])data)[i])).intValue();
323         else if ((((Object[])data)[0]) instanceof FLTINT) for (int i=0; i<siz; i++) y[i] =  ((FLTINT)(((Object[])data)[i])).fval;
324         else if ((((Object[])data)[0]) instanceof POINT) for (int i=0; i<siz; i++) y[i] =  ((POINT)(((Object[])data)[i])).f2val;
325         else if ((((Object[])data)[0]) instanceof FLTFLT) for (int i=0; i<siz; i++) y[i] =  ((FLTFLT)(((Object[])data)[i])).f1val;
326         else if ((((Object[])data)[0]) instanceof INTINT) for (int i=0; i<siz; i++) y[i] =  ((INTINT)(((Object[])data)[i])).i1val;
327         else if ((((Object[])data)[0]) instanceof DBLDBL) for (int i=0; i<siz; i++) y[i] =  ((DBLDBL)(((Object[])data)[i])).d1val;
328         else if ((((Object[])data)[0]) instanceof TDS) for (int i=0; i<siz; i++) y[i] =  ((TDS)(((Object[])data)[i])).dval;
329         else if ((((Object[])data)[0]) instanceof INTFLTINT) for (int i=0; i<siz; i++) y[i] =  ((INTFLTINT)(((Object[])data)[i])).fval;
330         else if ((((Object[])data)[0]) instanceof FLTFLTINT) for (int i=0; i<siz; i++) y[i] =  ((FLTFLTINT)(((Object[])data)[i])).f1val;
331         else if ((((Object[])data)[0]) instanceof FLTINTINT) for (int i=0; i<siz; i++) y[i] =  ((FLTINTINT)(((Object[])data)[i])).f1val;
332         else if ((((Object[])data)[0]) instanceof INTINTINT) for (int i=0; i<siz; i++) y[i] =  ((INTINTINT)(((Object[])data)[i])).i1val;
333         else if ((((Object[])data)[0]) instanceof INTINTINTINT) for (int i=0; i<siz; i++) y[i] =  ((INTINTINTINT)(((Object[])data)[i])).i1val;
334         else if ((((Object[])data)[0]) instanceof NAME16I) for (int i=0; i<siz; i++) y[i] =  ((NAME16I)(((Object[])data)[i])).ival;
335         else if ((((Object[])data)[0]) instanceof NAME32I) for (int i=0; i<siz; i++) y[i] =  ((NAME32I)(((Object[])data)[i])).ival;
336         else if ((((Object[])data)[0]) instanceof NAME64I) for (int i=0; i<siz; i++) y[i] =  ((NAME64I)(((Object[])data)[i])).ival;
337         else if ((((Object[])data)[0]) instanceof NAME16FI) for (int i=0; i<siz; i++) y[i] =  ((NAME16FI)(((Object[])data)[i])).fval;
338         else if ((((Object[])data)[0]) instanceof NAME16II) for (int i=0; i<siz; i++) y[i] =  ((NAME16II)(((Object[])data)[i])).i1val;
339         else if ((((Object[])data)[0]) instanceof NAME16DBLDBL) for (int i=0; i<siz; i++) y[i] =  ((NAME16DBLDBL)(((Object[])data)[i])).d1val;
340         else if ((((Object[])data)[0]) instanceof NAME32DBLDBL) for (int i=0; i<siz; i++) y[i] =  ((NAME32DBLDBL)(((Object[])data)[i])).d1val;
341         else if ((((Object[])data)[0]) instanceof NAME64DBLDBL) for (int i=0; i<siz; i++) y[i] =  ((NAME64DBLDBL)(((Object[])data)[i])).d1val;
342         else if ((((Object[])data)[0]) instanceof USTRING) for (int i=0; i<siz; i++) y[i] =  ((USTRING)(((Object[])data)[i])).f1val;
343         else if ((((Object[])data)[0]) instanceof UNAME) for (int i=0; i<siz; i++) y[i] =  ((UNAME)(((Object[])data)[i])).f2val;
344       }
345       return y;
346     }
347     return null;    
348   }
349   public double[] getXAxis(Object data)
350   {
351     int siz = getObjectSize(data);
352     if (siz > 0)
353     {
354       if (data instanceof double[]) return (double[])data;
355       double[] x;
356       if (data instanceof SPECTRUM)
357       { 
358         siz = ((SPECTRUM)data).length;
359         x = new double[siz];
360         for (int i=0; i<siz; i++) 
361           x[i] = ((SPECTRUM)data).s_start + i * ((SPECTRUM)data).s_inc;
362         return x;
363       }
364       x = new double[siz];
365       if (data instanceof float[]) for (int i=0; i<siz; i++) x[i] = ((float[])data)[i];
366       else if (data instanceof byte[]) for (int i=0; i<siz; i++) x[i] = ((byte[])data)[i];
367       else if (data instanceof short[]) for (int i=0; i<siz; i++) x[i] = ((short[])data)[i];
368       else if (data instanceof int[]) for (int i=0; i<siz; i++) x[i] = ((int[])data)[i];
369       else if (data instanceof long[]) for (int i=0; i<siz; i++) x[i] = (double)((long[])data)[i];
370       else if (data instanceof FLTINT[]) for (int i=0; i<siz; i++) x[i] = ((FLTINT[])data)[i] != null ? ((FLTINT[])data)[i].ival : 0;
371       else if (data instanceof POINT[]) for (int i=0; i<siz; i++) x[i] = ((POINT[])data)[i] != null ? ((POINT[])data)[i].f1val :  0;
372       else if (data instanceof FLTFLT[]) for (int i=0; i<siz; i++) x[i] = ((FLTFLT[])data)[i] != null ? ((FLTFLT[])data)[i].f2val : 0;
373       else if (data instanceof DBLINT[]) for (int i=0; i<siz; i++) x[i] = ((DBLINT[])data)[i] != null ? ((DBLINT[])data)[i].ival : 0;
374       else if (data instanceof INTINT[]) for (int i=0; i<siz; i++) x[i] = ((INTINT[])data)[i] != null ? ((INTINT[])data)[i].i2val : 0;
375       else if (data instanceof DBLDBL[]) for (int i=0; i<siz; i++) x[i] = ((DBLDBL[])data)[i] != null ? ((DBLDBL[])data)[i].d2val : 0;
376       else if (data instanceof TDS[]) for (int i=0; i<siz; i++) x[i] = ((TDS[])data)[i] != null ? ((TDS[])data)[i].tval : 0;
377       else if (data instanceof INTFLTINT[]) for (int i=0; i<siz; i++) x[i] = ((INTFLTINT[])data)[i] != null ? ((INTFLTINT[])data)[i].i1val : 0;
378       else if (data instanceof FLTFLTINT[]) for (int i=0; i<siz; i++) x[i] = ((FLTFLTINT[])data)[i] != null ? ((FLTFLTINT[])data)[i].f2val : 0;
379       else if (data instanceof FLTINTINT[]) for (int i=0; i<siz; i++) x[i] = ((FLTINTINT[])data)[i] != null ? ((FLTINTINT[])data)[i].i1val : 0;
380       else if (data instanceof INTINTINT[]) for (int i=0; i<siz; i++) x[i] = ((INTINTINT[])data)[i] != null ? ((INTINTINT[])data)[i].i2val : 0;
381       else if (data instanceof INTINTINTINT[]) for (int i=0; i<siz; i++) x[i] = ((INTINTINTINT[])data)[i] != null ? ((INTINTINTINT[])data)[i].i2val : 0;
382       else if (data instanceof NAME16I[]) for (int i=0; i<siz; i++) x[i] = ((NAME16I[])data)[i] != null ? i : 0;
383       else if (data instanceof NAME32I[]) for (int i=0; i<siz; i++) x[i] = ((NAME32I[])data)[i] != null ? i : 0;
384       else if (data instanceof NAME64I[]) for (int i=0; i<siz; i++) x[i] = ((NAME64I[])data)[i] != null ? i : 0;
385       else if (data instanceof NAME16FI[]) for (int i=0; i<siz; i++) x[i] = ((NAME16FI[])data)[i] != null ? ((NAME16FI[])data)[i].ival : 0;
386       else if (data instanceof NAME16II[]) for (int i=0; i<siz; i++) x[i] = ((NAME16II[])data)[i] != null ? ((NAME16II[])data)[i].i2val : 0;
387       else if (data instanceof NAME16DBLDBL[]) for (int i=0; i<siz; i++) x[i] = ((NAME16DBLDBL[])data)[i] != null ? ((NAME16DBLDBL[])data)[i].d2val : 0;
388       else if (data instanceof NAME32DBLDBL[]) for (int i=0; i<siz; i++) x[i] = ((NAME32DBLDBL[])data)[i] != null ? ((NAME32DBLDBL[])data)[i].d2val : 0;
389       else if (data instanceof NAME64DBLDBL[]) for (int i=0; i<siz; i++) x[i] = ((NAME64DBLDBL[])data)[i] != null ? ((NAME64DBLDBL[])data)[i].d2val : 0;
390       else if (data instanceof USTRING[]) for (int i=0; i<siz; i++) x[i] = ((USTRING[])data)[i] != null ? ((USTRING[])data)[i].f2val : 0;
391       else if (data instanceof UNAME[]) for (int i=0; i<siz; i++) x[i] = ((UNAME[])data)[i] != null ? ((UNAME[])data)[i].f1val : 0;
392       else if (data instanceof Object[]) 
393       {
394         if ((((Object[])data)[0]) instanceof Double) for (int i=0; i<siz; i++) x[i] =  ((Double)(((Object[])data)[i])).doubleValue();
395         else if ((((Object[])data)[0]) instanceof Float) for (int i=0; i<siz; i++) x[i] =  ((Float)(((Object[])data)[i])).floatValue();
396         else if ((((Object[])data)[0]) instanceof Short) for (int i=0; i<siz; i++) x[i] =  ((Short)(((Object[])data)[i])).shortValue();
397         else if ((((Object[])data)[0]) instanceof Integer) for (int i=0; i<siz; i++) x[i] =  ((Integer)(((Object[])data)[i])).intValue();
398         else if ((((Object[])data)[0]) instanceof Long) for (int i=0; i<siz; i++) x[i] =  (double)((Long)(((Object[])data)[i])).intValue();
399         else if ((((Object[])data)[0]) instanceof Byte) for (int i=0; i<siz; i++) x[i] =  ((Byte)(((Object[])data)[i])).intValue();
400         else if ((((Object[])data)[0]) instanceof FLTINT) for (int i=0; i<siz; i++) x[i] =  ((FLTINT)(((Object[])data)[i])).ival;
401         else if ((((Object[])data)[0]) instanceof POINT) for (int i=0; i<siz; i++) x[i] =  ((POINT)(((Object[])data)[i])).f1val;
402         else if ((((Object[])data)[0]) instanceof FLTFLT) for (int i=0; i<siz; i++) x[i] =  ((FLTFLT)(((Object[])data)[i])).f2val;
403         else if ((((Object[])data)[0]) instanceof INTINT) for (int i=0; i<siz; i++) x[i] =  ((INTINT)(((Object[])data)[i])).i2val;
404         else if ((((Object[])data)[0]) instanceof DBLDBL) for (int i=0; i<siz; i++) x[i] =  ((DBLDBL)(((Object[])data)[i])).d2val;
405         else if ((((Object[])data)[0]) instanceof TDS) for (int i=0; i<siz; i++) x[i] =  ((TDS)(((Object[])data)[i])).tval;
406         else if ((((Object[])data)[0]) instanceof INTFLTINT) for (int i=0; i<siz; i++) x[i] =  ((INTFLTINT)(((Object[])data)[i])).i1val;
407         else if ((((Object[])data)[0]) instanceof FLTFLTINT) for (int i=0; i<siz; i++) x[i] =  ((FLTFLTINT)(((Object[])data)[i])).f2val;
408         else if ((((Object[])data)[0]) instanceof FLTINTINT) for (int i=0; i<siz; i++) x[i] =  ((FLTINTINT)(((Object[])data)[i])).i1val;
409         else if ((((Object[])data)[0]) instanceof INTINTINT) for (int i=0; i<siz; i++) x[i] =  ((INTINTINT)(((Object[])data)[i])).i2val;
410         else if ((((Object[])data)[0]) instanceof INTINTINTINT) for (int i=0; i<siz; i++) x[i] =  ((INTINTINTINT)(((Object[])data)[i])).i2val;
411         else if ((((Object[])data)[0]) instanceof NAME16I) for (int i=0; i<siz; i++) x[i] =  i;
412         else if ((((Object[])data)[0]) instanceof NAME32I) for (int i=0; i<siz; i++) x[i] =  i;
413         else if ((((Object[])data)[0]) instanceof NAME64I) for (int i=0; i<siz; i++) x[i] =  i;
414         else if ((((Object[])data)[0]) instanceof NAME16FI) for (int i=0; i<siz; i++) x[i] =  ((NAME16FI)(((Object[])data)[i])).ival;
415         else if ((((Object[])data)[0]) instanceof NAME16II) for (int i=0; i<siz; i++) x[i] =  ((NAME16II)(((Object[])data)[i])).i2val;
416         else if ((((Object[])data)[0]) instanceof NAME16DBLDBL) for (int i=0; i<siz; i++) x[i] =  ((NAME16DBLDBL)(((Object[])data)[i])).d2val;
417         else if ((((Object[])data)[0]) instanceof NAME32DBLDBL) for (int i=0; i<siz; i++) x[i] =  ((NAME32DBLDBL)(((Object[])data)[i])).d2val;
418         else if ((((Object[])data)[0]) instanceof NAME64DBLDBL) for (int i=0; i<siz; i++) x[i] =  ((NAME64DBLDBL)(((Object[])data)[i])).d2val;
419         else if ((((Object[])data)[0]) instanceof USTRING) for (int i=0; i<siz; i++) x[i] =  ((USTRING)(((Object[])data)[i])).f2val;
420         else if ((((Object[])data)[0]) instanceof UNAME) for (int i=0; i<siz; i++) x[i] =  ((UNAME)(((Object[])data)[i])).f3val;
421       }
422       return x;
423     }
424     return null;    
425   }
426   public String[] getXAxisChannelNames(Object data)
427   {
428     int siz = getObjectSize(data);
429     if (siz > 0)
430     {
431       String[] s;
432       s = new String[siz];
433       if (data instanceof NAME8[]) for (int i=0; i<siz; i++) s[i] = ((NAME16I[])data)[i] != null ? ((NAME8[])data)[i].getName() : "";
434       if (data instanceof NAME16[]) for (int i=0; i<siz; i++) s[i] = ((NAME16I[])data)[i] != null ? ((NAME16[])data)[i].getName() : "";
435       else if (data instanceof NAME32[]) for (int i=0; i<siz; i++) s[i] = ((NAME32I[])data)[i] != null ? ((NAME32[])data)[i].getName() : "";
436       else if (data instanceof NAME48[]) for (int i=0; i<siz; i++) s[i] = ((NAME32I[])data)[i] != null ? ((NAME48[])data)[i].getName() : "";
437       else if (data instanceof NAME64[]) for (int i=0; i<siz; i++) s[i] = ((NAME64I[])data)[i] != null ? ((NAME64[])data)[i].getName() : "";
438       else if (data instanceof NAME16I[]) for (int i=0; i<siz; i++) s[i] = ((NAME16I[])data)[i] != null ? ((NAME16I[])data)[i].getName() : "";
439       else if (data instanceof NAME32I[]) for (int i=0; i<siz; i++) s[i] = ((NAME32I[])data)[i] != null ? ((NAME32I[])data)[i].getName() : "";
440       else if (data instanceof NAME64I[]) for (int i=0; i<siz; i++) s[i] = ((NAME64I[])data)[i] != null ? ((NAME64I[])data)[i].getName() : "";
441       else if (data instanceof NAME16FI[]) for (int i=0; i<siz; i++) s[i] = ((NAME16FI[])data)[i] != null ? ((NAME16FI[])data)[i].getName() : "";
442       else if (data instanceof NAME16II[]) for (int i=0; i<siz; i++) s[i] = ((NAME16II[])data)[i] != null ? ((NAME16II[])data)[i].getName() : "";
443       else if (data instanceof NAME16DBLDBL[]) for (int i=0; i<siz; i++) s[i] = ((NAME16DBLDBL[])data)[i] != null ? ((NAME16DBLDBL[])data)[i].getName() : "";
444       else if (data instanceof NAME32DBLDBL[]) for (int i=0; i<siz; i++) s[i] = ((NAME32DBLDBL[])data)[i] != null ? ((NAME32DBLDBL[])data)[i].getName() : "";
445       else if (data instanceof NAME64DBLDBL[]) for (int i=0; i<siz; i++) s[i] = ((NAME64DBLDBL[])data)[i] != null ? ((NAME64DBLDBL[])data)[i].getName() : "";
446       else if (data instanceof USTRING[]) for (int i=0; i<siz; i++) s[i] = ((USTRING[])data)[i] != null ? ((USTRING[])data)[i].getString() : "";
447       else if (data instanceof UNAME[]) for (int i=0; i<siz; i++) s[i] = ((UNAME[])data)[i] != null ? ((UNAME[])data)[i].getString() : "";
448       else if (data instanceof Object[]) 
449       {
450         if ((((Object[])data)[0]) instanceof NAME8) for (int i=0; i<siz; i++) s[i] =  ((NAME8)(((Object[])data)[i])).getName();
451         else if ((((Object[])data)[0]) instanceof NAME16) for (int i=0; i<siz; i++) s[i] =  ((NAME16)(((Object[])data)[i])).getName();
452         else if ((((Object[])data)[0]) instanceof NAME32) for (int i=0; i<siz; i++) s[i] =  ((NAME32)(((Object[])data)[i])).getName();
453         else if ((((Object[])data)[0]) instanceof NAME48) for (int i=0; i<siz; i++) s[i] =  ((NAME48)(((Object[])data)[i])).getName();
454         else if ((((Object[])data)[0]) instanceof NAME64) for (int i=0; i<siz; i++) s[i] =  ((NAME64)(((Object[])data)[i])).getName();
455         else if ((((Object[])data)[0]) instanceof NAME16I) for (int i=0; i<siz; i++) s[i] =  ((NAME16I)(((Object[])data)[i])).getName();
456         else if ((((Object[])data)[0]) instanceof NAME32I) for (int i=0; i<siz; i++) s[i] =  ((NAME32I)(((Object[])data)[i])).getName();
457         else if ((((Object[])data)[0]) instanceof NAME64I) for (int i=0; i<siz; i++) s[i] =  ((NAME64I)(((Object[])data)[i])).getName();
458         else if ((((Object[])data)[0]) instanceof NAME16FI) for (int i=0; i<siz; i++) s[i] =  ((NAME16FI)(((Object[])data)[i])).getName();
459         else if ((((Object[])data)[0]) instanceof NAME16II) for (int i=0; i<siz; i++) s[i] =  ((NAME16II)(((Object[])data)[i])).getName();
460         else if ((((Object[])data)[0]) instanceof NAME16DBLDBL) for (int i=0; i<siz; i++) s[i] =  ((NAME16DBLDBL)(((Object[])data)[i])).getName();
461         else if ((((Object[])data)[0]) instanceof NAME32DBLDBL) for (int i=0; i<siz; i++) s[i] =  ((NAME32DBLDBL)(((Object[])data)[i])).getName();
462         else if ((((Object[])data)[0]) instanceof NAME64DBLDBL) for (int i=0; i<siz; i++) s[i] =  ((NAME64DBLDBL)(((Object[])data)[i])).getName();
463         else if ((((Object[])data)[0]) instanceof USTRING) for (int i=0; i<siz; i++) s[i] =  ((USTRING)(((Object[])data)[i])).getString();
464         else if ((((Object[])data)[0]) instanceof UNAME) for (int i=0; i<siz; i++) s[i] =  ((UNAME)(((Object[])data)[i])).getString();
465         else return null;
466       }
467       else return null;
468       return s;
469     }
470     return null;    
471   }
472   public int getObjectSize(Object data)
473   {
474     if (data == null) return 0;
475     if (data instanceof char[]) return ((char[])data).length;
476     if (data instanceof TTaggedStructure[]) return ((TTaggedStructure[])data).length;
477     if (data instanceof TTaggedStructure) return 1;
478     return TDataType.getObjectSize(data);
479   }
480   private TDataType toTDataType(Object data, int length, boolean isBound)
481   {
482     if (data == null) return null;  // return null if Object is null !
483     if (data instanceof double[])
484     {
485       return isBound ? new TDataType((double[])data, length) : new TDataType(((double[])data).length,TFormat.CF_DOUBLE);
486     }
487     if (data instanceof float[])
488     {
489       return isBound ? new TDataType((float[])data, length) : new TDataType(length,TFormat.CF_FLOAT);
490     }
491     if (data instanceof int[])
492     {
493       return isBound ? new TDataType((int[])data, length) : new TDataType(((int[])data).length,TFormat.CF_LONG);
494     }
495     if (data instanceof short[])
496     {
497       return isBound ? new TDataType((short[])data, length) : new TDataType(((short[])data).length,TFormat.CF_SHORT);
498     }
499     if (data instanceof byte[])
500     {
501       return isBound ? new TDataType((byte[])data, length) : new TDataType(((byte[])data).length,TFormat.CF_BYTE);
502     }
503     if (data instanceof long[])
504     {
505       return isBound ? new TDataType((long[])data, length) : new TDataType(((long[])data).length,TFormat.CF_DLONG);
506     }
507     if (data instanceof TCompoundDataObject[])
508     {
509       return isBound ? new TDataType((TCompoundDataObject[])data, length) : new TDataType(((TCompoundDataObject[])data).length,((TCompoundDataObject[])data)[0].getFormat());
510     } 
511     if (data instanceof SPECTRUM)
512     {
513       return isBound ? new TDataType((SPECTRUM)data) : new TDataType(((SPECTRUM)data).length,TFormat.CF_SPECTRUM);
514     }
515     if (data instanceof String)
516     {
517       return isBound ? new TDataType((String)data, length) : new TDataType(((String[])data).length,TFormat.CF_TEXT);
518     }
519     if (data instanceof StringBuffer)
520     {
521       return isBound ? new TDataType((StringBuffer)data, length) : new TDataType(((StringBuffer)data).length(),TFormat.CF_TEXT);
522     }
523     if (data instanceof char[])
524     {
525       return isBound ? new TDataType((char[])data, length) : new TDataType(((char[])data).length,TFormat.CF_TEXT);
526     }
527     if (data instanceof TTaggedStructure)
528     {
529       return isBound ? new TDataType((TTaggedStructure)data) : new TDataType(((TTaggedStructure)data).getSizeInBytes(),TFormat.CF_STRUCT);
530     }
531     if (data instanceof TTaggedStructure[])
532     {
533       return isBound ? new TDataType((TTaggedStructure[])data) : new TDataType(((TTaggedStructure[])data)[0].getSizeInBytes()*((TTaggedStructure[])data).length,TFormat.CF_STRUCT);
534     }
535     return null;
536   }
537   public String[] getDeviceContexts() 
538   {
539     return TQuery.getContexts();
540   }
541   public String[] getDeviceGroups(String deviceContext,String deviceGroup,String deviceName,String deviceProperty)
542   {
543     return TQuery.getDeviceServers(deviceContext);
544   }
545   public String[] getDeviceNames(String deviceContext,String deviceGroup,String deviceName,String deviceProperty)
546   {
547     return TQuery.getDeviceNames(deviceContext,deviceGroup,deviceProperty);
548   }
549   public String[] getDeviceProperties(String deviceContext,String deviceGroup,String deviceName,String deviceProperty)
550   {
551     return TQuery.getDeviceProperties(deviceContext,deviceGroup,deviceName);
552   }
553   public String getTargetInformation(String deviceContext, String deviceGroup, String deviceName, String deviceProperty)
554   {
555     return TQuery.getModuleAddressInfo(deviceGroup, deviceContext);
556   }
557 }