00001 package DisplayGUI;
00002
00003 import java.io.*;
00004 import java.util.*;
00005 import javax.swing.*;
00006 import javax.swing.text.*;
00007 import java.util.regex.*;
00008 import is.*;
00009 import Sct.Serializable;
00010 import Sct.IS.*;
00011 import GuiComponents.Console.ExternalProcess;
00012 import GuiComponents.Inspector.InspectorPanel;
00013 import Sct_CalibrationController.TestData;
00014 import GuiComponents.System.*;
00015 import SummaryReader.*;
00016
00017
00018
00019
00020
00021
00026 public class ISInterface implements TestDataInfo,InfoListener {
00027
00028 gui guiControl;
00029
00030 ISRequestBuffer isRequestBuffer;
00031 ISCounter isCounter;
00032
00033 Hashtable serverHash;
00034 String theObjectName;
00035
00036
00037 TestData testData;
00038 String serverName;
00039 int noScans;
00040
00041 int listFilterIndex;
00042
00043 String eventServerRegex;
00044 String fitServerRegex;
00045 String controlObjectRegex;
00046 String rControlObjectRegex;
00047 String dbControlObjectRegex;
00048 String testServerRegex;
00049 Pattern objectPattern, rObjectPattern;
00050 String resultObjectRegex;
00051 String ivscanRegex;
00052 String ivscanControlRegex;
00053
00054 String eventServer;
00055 String fitServer;
00056 String testServer;
00057 String controlServer;
00058 String SCTDBServer;
00059 String retrievedArchiveServer;
00060
00061 String testLocation;
00062
00063 int serverIndex=0;
00064
00065 boolean infoListenersAreActive=true;
00066
00067
00068
00069 java.util.Map moduleCount = new HashMap();
00070
00071 Pattern defectPattern = Pattern.compile("(\\d+)-(\\d+)\\s*:\\s*(\\w+)");
00072 guiUtilities.Cache cache=null;
00073 Map dcsMap = new HashMap();
00074
00075 java.text.DecimalFormat nf = new java.text.DecimalFormat("#.###");
00076
00077 Preferences.PreferencesInterface prefs;
00078
00079 public ISInterface(gui parent) {
00080 guiControl=parent;
00081
00082 prefs = Preferences.PreferencesInterface.getInstance();
00083
00084 isRequestBuffer = new ISRequestBuffer(guiControl);
00085
00086 is = GuiComponents.System.ISInterface.getInstance();
00087 isCounter = new ISCounter();
00088 serverHash = new Hashtable();
00089 noScans=0;
00090 listFilterIndex=-1;
00091
00092 eventServerRegex = ".*RawScanResult.*[0-9]+\\.[0-9]+(\\.[0-9]{14})?";
00093 fitServerRegex = ".*FitScanResult.*[0-9]+\\.[0-9]+(\\.[0-9]{14})?";
00094 testServerRegex = ".*Result.*[0-9]+\\.[0-9]+(\\.[0-9]{14})?";
00095 controlObjectRegex = "TestData\\.[0-9]+\\.[0-9]+";
00096 rControlObjectRegex = "TestData\\.[0-9]+\\.[0-9]+.*Test";
00097 dbControlObjectRegex = "ControlData.TestData\\.[0-9]+\\.[0-9]+";
00098 resultObjectRegex = ".*(Summary).*";
00099 ivscanRegex = ".*IVScanData.*";
00100 ivscanControlRegex = ".*ControlIVScanData.*";
00101
00102 objectPattern = Pattern.compile(".*TestData\\.[0-9]+\\.[0-9]+");
00103 rObjectPattern = Pattern.compile(".*\\.[0-9]+\\.[0-9]+.*Test");
00104
00105 eventServer = SctNames.getEventISServer();
00106 fitServer = SctNames.getFitISServer();
00107 testServer = SctNames.getTestISServer();
00108 controlServer = SctNames.getControlISServer();
00109 SCTDBServer = "SCTDBData";
00110 retrievedArchiveServer = "RetrievedData";
00111
00112 testLocation="Any";
00113
00114 if(cache==null) setCacheSize(200);
00115
00116
00117 }
00118 protected void subscribe() {
00119 subscribe(-1);
00120 }
00121
00122 public void setISCounter(String regex) {
00123 isCounter.refresh(regex);
00124 }
00125
00126 protected void subscribe(int testType) {
00127 listFilterIndex=testType;
00128 String[] objects;
00129 Vector ISTests = new Vector();
00130
00131 try {
00132
00133 switch(guiControl.displayStatus.getStatus()) {
00134 case DisplayStatus.SCTDB_RODDAQ_DATA:
00135 objects = is.getISObjects(SCTDBServer,dbControlObjectRegex);
00136 for(int i=0;i<objects.length;i++) ISTests.addElement(objects[i]);
00137 break;
00138 case DisplayStatus.IV_DATA:
00139 objects = is.getISObjects(retrievedArchiveServer,ivscanControlRegex);
00140 for(int i=0;i<objects.length;i++) ISTests.addElement(objects[i]);
00141 break;
00142 default:
00143 objects = is.getISObjects(retrievedArchiveServer,rControlObjectRegex);
00144 for(int i=0;i<objects.length;i++) ISTests.addElement(objects[i]);
00145 objects = is.getISObjects(controlServer,controlObjectRegex);
00146 for(int i=0;i<objects.length;i++) ISTests.addElement(objects[i]);
00147 }
00148
00149 if(guiControl.displayStatus.getStatus()!=DisplayStatus.IV_DATA) {
00150 for(int j=ISTests.size()-1;j>=0;j--) {
00151 String controlObject = (String)ISTests.elementAt(j);
00152 Matcher matcher = objectPattern.matcher(controlObject);
00153 Matcher matcher2 = rObjectPattern.matcher(controlObject);
00154 if(!matcher.matches() && !matcher2.matches()) {
00155 ISTests.removeElementAt(j);
00156 continue;
00157 }
00158 if(listFilterIndex==-1) continue;
00159 else {
00160 TestData testData = new TestData();
00161 is.getRepository().getValue(controlObject, testData);
00162 String thisTestName = (listFilterIndex==TEST_3PTGAIN) ? testNames[TEST_NPTGAIN] : testNames[listFilterIndex];
00163 if(testData.testName.indexOf(thisTestName)==-1) ISTests.removeElementAt(j);
00164 }
00165 }
00166 }
00167 guiControl.tablesDisplayPane.setTestTable(ISTests);
00168
00169 switch(guiControl.displayStatus.getStatus()) {
00170 case DisplayStatus.IS_MONITOR:
00171
00172
00173 if(!serverHash.containsKey(eventServer)) {
00174 is.subscribe(eventServer, eventServerRegex, true, this);
00175 serverHash.put(eventServer, eventServerRegex);
00176 }
00177 if(!serverHash.containsKey(fitServer)) {
00178 is.subscribe(fitServer, fitServerRegex, true, this);
00179 serverHash.put(fitServer, fitServerRegex);
00180 }
00181 if(!serverHash.containsKey(testServer)) {
00182 is.subscribe(testServer, testServerRegex, true, this);
00183 serverHash.put(testServer, testServerRegex);
00184 }
00185 if(!serverHash.containsKey(controlServer)) {
00186 is.subscribe(controlServer, controlObjectRegex, true, this);
00187 serverHash.put(controlServer, controlObjectRegex);
00188 }
00189 if(!serverHash.containsKey(retrievedArchiveServer)) {
00190 List subscriptions = new ArrayList();
00191 subscriptions.add(rControlObjectRegex);
00192 subscriptions.add(fitServerRegex);
00193 subscriptions.add(eventServerRegex);
00194 subscriptions.add(testServerRegex);
00195 for (ListIterator i = subscriptions.listIterator(); i.hasNext(); ) {
00196 is.subscribe(retrievedArchiveServer, (String)i.next(), true, this);
00197 }
00198 serverHash.put(retrievedArchiveServer, subscriptions);
00199 }
00200
00201 break;
00202
00203 case DisplayStatus.TEST_DATA:
00204 if(!serverHash.containsKey(testServer)) {
00205 is.subscribe(testServer, resultObjectRegex, true, this);
00206 serverHash.put(testServer, resultObjectRegex);
00207 }
00208 if(!serverHash.containsKey(controlServer)) {
00209 is.subscribe(controlServer, controlObjectRegex, true, this);
00210 serverHash.put(controlServer, controlObjectRegex);
00211 }
00212 if(!serverHash.containsKey(retrievedArchiveServer)) {
00213 List subscriptions = new ArrayList();
00214 subscriptions.add(resultObjectRegex);
00215 subscriptions.add(rControlObjectRegex);
00216 for (ListIterator i = subscriptions.listIterator(); i.hasNext(); ) {
00217 is.subscribe(retrievedArchiveServer, (String)i.next(), true, this);
00218 }
00219 serverHash.put(retrievedArchiveServer, subscriptions);
00220 }
00221
00222
00223
00224 break;
00225 case DisplayStatus.SCTDB_DATA:
00226 if(!serverHash.containsKey(controlServer)) {
00227 is.subscribe(controlServer, controlObjectRegex, true, this);
00228 serverHash.put(controlServer, controlObjectRegex);
00229 }
00230 if(!serverHash.containsKey(SCTDBServer)) {
00231 is.subscribe(SCTDBServer, ".*", true, this);
00232 serverHash.put(SCTDBServer, ".*");
00233 }
00234 break;
00235 case DisplayStatus.SCTDB_RODDAQ_DATA:
00236 if(!serverHash.containsKey(SCTDBServer)) {
00237 is.subscribe(SCTDBServer, ".*", true, this);
00238 serverHash.put(SCTDBServer, ".*");
00239 }
00240 break;
00241 case DisplayStatus.IV_DATA:
00242 if(!serverHash.containsKey(retrievedArchiveServer)) {
00243 List subscriptions = new ArrayList();
00244 subscriptions.add(ivscanRegex);
00245 is.subscribe(retrievedArchiveServer, ivscanRegex, true, this);
00246 serverHash.put(retrievedArchiveServer, subscriptions);
00247 }
00248 break;
00249 case DisplayStatus.DCS_DATA:
00250
00251 Preferences.PreferencesInterface prefs = Preferences.PreferencesInterface.getInstance();
00252 if(!serverHash.containsKey(prefs.getPreference(prefs.DCS_SERVER_NAME))) {
00253 is.subscribe(prefs.getPreference(prefs.DCS_SERVER_NAME),".*",true,this);
00254 serverHash.put(prefs.getPreference(prefs.DCS_SERVER_NAME),".*");
00255 }
00256 break;
00257 default:
00258 }
00259
00260
00261
00262 } catch (RuntimeException e) {
00263 System.err.println("SctGUI::ISInterface: Exception in IS subscription: " + e.toString());
00264 }
00265
00266
00267 }
00268
00269 protected void unsubscribe() {
00270 if(serverHash.containsKey(retrievedArchiveServer)) {
00271 List subscriptions = (List)serverHash.get(retrievedArchiveServer);
00272 for (ListIterator i = subscriptions.listIterator(); i.hasNext(); ) {
00273 is.unsubscribe(retrievedArchiveServer, (String)i.next());
00274
00275 }
00276 serverHash.remove(retrievedArchiveServer);
00277 }
00278
00279 for(Enumeration e = serverHash.keys(); e.hasMoreElements();) {
00280 String server = (String)e.nextElement();
00281 String pattern = (String)serverHash.get(server);
00282 is.unsubscribe(server, pattern);
00283
00284 }
00285 serverHash = new Hashtable();
00286 }
00287
00288 public javax.swing.tree.DefaultMutableTreeNode getISTree() {
00289
00290 String[] servers = is.getISServers();
00291
00292
00293
00294 javax.swing.tree.DefaultMutableTreeNode top = new javax.swing.tree.DefaultMutableTreeNode("IS Servers");
00295 javax.swing.tree.DefaultMutableTreeNode server;
00296 javax.swing.tree.DefaultMutableTreeNode object;
00297 for (int i=0; i<servers.length; i++) {
00298 server = new javax.swing.tree.DefaultMutableTreeNode(servers[i]);
00299 String[] objects = is.getISObjects(servers[i],".*");
00300 for (int j=0; j<objects.length; j++) {
00301 object = new javax.swing.tree.DefaultMutableTreeNode(objects[j]);
00302 server.add(object);
00303 }
00304 top.add(server);
00305 }
00306 return top;
00307
00308 }
00309
00313 abstract class StringRunnable implements Runnable {
00314 protected String name;
00315 StringRunnable(String name) {
00316 this.name = name;
00317 }
00318 }
00319
00320 public void infoCreated(InfoEvent e) {
00321 isCounter.addObject(e.getName());
00322 javax.swing.SwingUtilities.invokeLater(new StringRunnable(e.getName()) {
00323 public void run() {
00324 isRequestBuffer.queueObject(name,true);
00325 }
00326 });
00327 }
00328
00329
00330 public void infoDeleted(InfoEvent e) {
00331 javax.swing.SwingUtilities.invokeLater(new StringRunnable(e.getName()) {
00332 public void run() {
00333 if(!infoListenersAreActive) return;
00334 if(name.startsWith("ControlData")) guiControl.tablesDisplayPane.removeTest(name);
00335 guiControl.displayPane.setDisplayColors();
00336 guiControl.displayPane.refreshDisplay();
00337 }
00338 });
00339 }
00340
00341 public void infoUpdated(InfoEvent e) {
00342 javax.swing.SwingUtilities.invokeLater(new StringRunnable(e.getName()) {
00343 public void run() {
00344 isRequestBuffer.queueObject(name,false);
00345 }
00346 });
00347 }
00348
00349
00350 public void removeTests(Vector testObjectNames, int minRow, int maxRow) {
00351
00352
00353
00354
00355 infoListenersAreActive=false;
00356
00357 for(int i=maxRow;i>=minRow;i--) {
00358 String testObjectName = (String)testObjectNames.elementAt(i);
00359 TestData thisTestData = new TestData();
00360 is.getRepository().getValue(testObjectName, thisTestData);
00361
00362 int runNo = thisTestData.runNumber;
00363 int startScanNumber = thisTestData.startScanNumber;
00364
00365 StringBuffer regex = new StringBuffer(".*(");
00366 for(int k=thisTestData.startScanNumber;k<thisTestData.startScanNumber+thisTestData.nScans;k++) {
00367 if(k>thisTestData.startScanNumber) regex.append("|");
00368 regex.append("\\.");
00369 regex.append(Integer.toString(runNo));
00370 regex.append("\\.");
00371 regex.append(Integer.toString(k));
00372 regex.append("\\.");
00373 }
00374 regex.append(").*");
00375
00376 String[] deletionObjects;
00377
00378 if(!testObjectName.matches("RetrievedData.*")) {
00379 deletionObjects = is.getISObjects(SctNames.getEventISServer(),regex.toString());
00380 for(int j=0;j<deletionObjects.length;j++) System.out.println(is.remove(deletionObjects[j]));
00381 deletionObjects = is.getISObjects(SctNames.getFitISServer(),regex.toString());
00382 for(int j=0;j<deletionObjects.length;j++) System.out.println(is.remove(deletionObjects[j]));
00383 deletionObjects = is.getISObjects(SctNames.getTestISServer(),regex.toString());
00384 for(int j=0;j<deletionObjects.length;j++) System.out.println(is.remove(deletionObjects[j]));
00385 }
00386 else {
00387 deletionObjects = is.getISObjects("RetrievedData",regex.toString());
00388 for(int j=0;j<deletionObjects.length;j++) System.out.println(is.remove(deletionObjects[j]));
00389 }
00390
00391
00392
00393 System.out.println(is.remove(testObjectName));
00394 guiControl.tablesDisplayPane.removeTest(testObjectName);
00395 }
00396
00397 infoListenersAreActive=true;
00398
00399 }
00400
00401 public void removeObjects(Vector objectNames) {
00402 for(int i=0;i<objectNames.size();i++) System.out.println(is.remove((String)objectNames.elementAt(i)));
00403 }
00404
00405 public int getListFilterIndex() {
00406 return listFilterIndex;
00407 }
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418 private String getIsFilterHeader() {
00419 String isFilterHeader = "SctData::Result";
00420 int serverIndex = guiControl.selectorPane.getDisplayParameterIndex();
00421 switch(serverIndex) {
00422 case 0:
00423 isFilterHeader = "SctData::RawScanResult";
00424 break;
00425 case 1:
00426 isFilterHeader = "SctData::FitScanResult";
00427 break;
00428 case 2:
00429 default:
00430 TestSelection testSelection = guiControl.tablesDisplayPane.getTestSelection();
00431 if(testSelection!=null) {
00432 String testName;
00433 if((testName=testSelection.getTestName())!=null) isFilterHeader="SctData::"+testName+"Result";
00434 }
00435 break;
00436 }
00437 return isFilterHeader;
00438 }
00439 private String getIsFilterRunInfo() {
00440 String isFilterRunInfo="none";
00441 TestSelection testSelection = guiControl.tablesDisplayPane.getTestSelection();
00442 if(testSelection==null || testSelection.getTestData()==null) return isFilterRunInfo;
00443 StringBuffer regex = new StringBuffer("\\."+Integer.toString(testSelection.getRunNo())+"\\.(");
00444 int startScanNo = testSelection.getStartScanNumber();
00445 for(int k=startScanNo;k<startScanNo+testSelection.getNoScans();k++) {
00446 if(k>startScanNo) regex.append("|");
00447 regex.append(Integer.toString(k));
00448 regex.append("\\.");
00449 }
00450 regex.append(").*");
00451 return regex.toString();
00452 }
00453 private String getServerName() {
00454 int serverIndex = guiControl.selectorPane.getDisplayParameterIndex();
00455 String serverName=SctNames.getEventISServer();
00456 switch(serverIndex) {
00457 case 0:
00458 serverName=SctNames.getEventISServer();
00459 break;
00460 case 1:
00461 serverName=SctNames.getFitISServer();
00462 break;
00463 case 2:
00464 default:
00465 serverName=SctNames.getTestISServer();
00466 break;
00467 }
00468 return serverName;
00469 }
00470
00471
00472 public String[] getISObjects(String serialNo) {
00473 return is.getISObjects(getServerName(),getIsFilterHeader()+getIsFilterRunInfo()+serialNo);
00474 }
00475
00476 public Hashtable getModuleISCounts() {
00477 String serverName = getServerName();
00478 Pattern snPattern = Pattern.compile(serverName+"\\."+getIsFilterHeader()+getIsFilterRunInfo()+"(\\d{14}).*");
00479 Hashtable thisHash = new Hashtable();
00480 String[] objects = is.getISObjects(serverName,getIsFilterHeader()+getIsFilterRunInfo()+".*");
00481 for(int i=0;i<objects.length;i++) {
00482 Matcher matcher = snPattern.matcher(objects[i]);
00483 if(matcher.matches()) {
00484 String sn = objects[i].substring(matcher.start(2),matcher.end(2));
00485 if(thisHash.containsKey(sn)) {
00486 int count = ((Integer)thisHash.get(sn)).intValue();
00487 count++;
00488 thisHash.put(sn,new Integer(count));
00489 }
00490 else thisHash.put(sn,new Integer(1));
00491 }
00492 }
00493 return thisHash;
00494 }
00495
00496
00497
00498
00499
00500 public void launchExternalViewer(String name) {
00501 try {
00502 ExternalProcess p = new ExternalProcess("DataDisplayer " + name);
00503 } catch (Exception ioe) {
00504 System.out.println(ioe.getMessage());
00505 ioe.printStackTrace();
00506 }
00507
00508 }
00509
00510
00511 public void viewISData(String name) {
00512 try {
00513 Serializable ob = ObjectManagerIS.getInstance().readObject(name);
00514 InspectorPanel p = new InspectorPanel(name, ob);
00515
00516
00517
00518
00519
00520 JFrame frame2 = new JFrame("TreeTable");
00521 frame2.getContentPane().add(new JScrollPane(p.treeTable));
00522 frame2.pack();
00523 frame2.show();
00524
00525 } catch (java.io.IOException ioe) {
00526 System.err.println("Error reading object from IS: " + ioe + " " +ioe.getMessage() +"\n");
00527 }
00528 }
00529
00530 public void downloadTests(int index) {
00531 TestSelection testSelection = guiControl.tablesDisplayPane.getTestSelection();
00532 if(testSelection==null || testSelection.getTestIndex()==-1) {
00533 javax.swing.JOptionPane.showMessageDialog(null,"You must select a test in ordre to download sctdaq reference data.");
00534 return;
00535 }
00536 boolean refresh=false;
00537 if(index==-1) {
00538 index=testSelection.getTestIndex();
00539 refresh=true;
00540 }
00541 if(index==-1) return;
00542 if(!testIsSCTDAQ[index]) {
00543 javax.swing.JOptionPane.showMessageDialog(null,"The selected test is not SCTDAQ compatible, so reference data cannot be downloaded.");
00544 return;
00545 }
00546 SCTDBTestDownloader d = new SCTDBTestDownloader(new Vector(guiControl.config.getSortedVector(guiControl.displayPane.getSCTView())),index,testLocation,true,refresh);
00547 if(d.downloadsRequired() && d.isOkToStart()) d.start();
00548 }
00549 public void setLocation(String location) {
00550 testLocation=location;
00551 TestSelection testSelection = guiControl.tablesDisplayPane.getTestSelection();
00552 if(testSelection!=null) testSelection.setSCTDBLocation(testLocation);
00553 }
00554 public String getLocation() {
00555 return testLocation;
00556 }
00557
00558 public Double getSCTDBData(String resultObject, int testIndex) {
00559 if(testIndex==-1) return null;
00560 int parameterIndex = guiControl.selectorPane.getDisplayParameterIndex();
00561 int option = guiControl.selectorPane.getMouseClickIndex();
00562 if(parameterIndex<0) return null;
00563 SummaryReader.Test testResult = getSCTDBTest(resultObject);
00564 if(testResult==null) return null;
00565 Double theData=null;
00566 switch(parameterIndex) {
00567 case 0:
00568 theData = testResult.getTestInfo().getTestStatusData();
00569 break;
00570 case 1:
00571 theData = testResult.noDefects();
00572 break;
00573 case 2:
00574 SummaryReader.DCSInfo dcsInfo = testResult.getDCSInfo();
00575 if(dcsInfo!=null) theData = dcsInfo.get(option);
00576 break;
00577 default:
00578 theData = testResult.getLastDataBlock().get(option,parameterIndex-3);
00579 }
00580 return theData;
00581 }
00582
00583 public Test getSCTDBTest(String resultObject) {
00584
00585 SummaryReader.Test testObject;
00586
00587 testObject = (SummaryReader.Test)cache.get(resultObject);
00588 if(testObject!=null) return testObject;
00589
00590 try {
00591 if(!Sct.IS.SctNames.getISRepository().contains(resultObject)) return null;
00592 SCTDB_Data result = new SCTDB_Data();
00593 Sct.IS.SctNames.getISRepository().getValue(resultObject, result);
00594
00595 testObject = new Test();
00596
00597 int blockSize = result.data_m0.length;
00598 DataBlock dataBlock = new DataBlock("Chip Data",result.data_m0.length,result.testIndex);
00599 for(int i=0;i<blockSize;i++) {
00600 dataBlock.add(0,i,result.data_m0[i]);
00601 dataBlock.add(1,i,result.data_s1[i]);
00602 dataBlock.add(2,i,result.data_s2[i]);
00603 dataBlock.add(3,i,result.data_s3[i]);
00604 dataBlock.add(4,i,result.data_s4[i]);
00605 dataBlock.add(5,i,result.data_e5[i]);
00606 dataBlock.add(6,i,result.data_m8[i]);
00607 dataBlock.add(7,i,result.data_s9[i]);
00608 dataBlock.add(8,i,result.data_s10[i]);
00609 dataBlock.add(9,i,result.data_s11[i]);
00610 dataBlock.add(10,i,result.data_s12[i]);
00611 dataBlock.add(11,i,result.data_e13[i]);
00612 }
00613 testObject.add(dataBlock);
00614
00615 DCSInfo dcsInfo = new DCSInfo();
00616 for(int i=0;i<8;i++) if(result.dcsinfo[i]!=SCTDBTestDownloader.NODATA) dcsInfo.put(i,result.dcsinfo[i]);
00617 testObject.add(dcsInfo);
00618
00619 for(int i=0;i<result.noDefectChannels;i++) {
00620 String defectLine = result.defectList[i];
00621 Matcher matcher = defectPattern.matcher(defectLine);
00622 if(matcher.matches()) {
00623 DefectInfo defectInfo = new DefectInfo();
00624 defectInfo.setFirstChannel(defectLine.substring(matcher.start(1),matcher.end(1)));
00625 defectInfo.setLastChannel(defectLine.substring(matcher.start(2),matcher.end(2)));
00626 defectInfo.setName(defectLine.substring(matcher.start(3),matcher.end(3)));
00627 testObject.add(defectInfo);
00628 }
00629 else System.err.println("Unrecognised defect descriptor: "+defectLine);
00630 }
00631
00632 DAQInfo daqInfo = new DAQInfo();
00633 for(int i=0;i<5;i++) daqInfo.put(i,result.daqInfo[i]);
00634 testObject.add(daqInfo);
00635
00636 TestInfo testInfo = new TestInfo();
00637 testInfo.setStatus(new Double(result.status));
00638 testObject.add(testInfo);
00639 cache.put(resultObject,testObject);
00640 return testObject;
00641 }catch(Exception e){System.err.println("SctGUI: Failed to extract "+resultObject+" : "+e.toString());}
00642 return null;
00643 }
00644
00645 public Double getTestData(String resultObjectHeader, String serialNo,int testIndex, SummaryReader.DCSInfo dcsInfo) {
00646 if(testIndex==-1) return null;
00647 int parameterIndex = guiControl.selectorPane.getDisplayParameterIndex();
00648 int option = guiControl.selectorPane.getMouseClickIndex();
00649 if(parameterIndex<0) return null;
00650 SummaryReader.Test testResult = getTest(resultObjectHeader,serialNo,dcsInfo);
00651 if(testResult==null) return null;
00652 Double theData=null;
00653 switch(guiControl.displayStatus.getStatus()) {
00654 case DisplayStatus.IV_DATA:
00655 switch(parameterIndex) {
00656 case 0:
00657 theData = testResult.getTestInfo().getTestStatusData();
00658 break;
00659 case 1:
00660 theData = testResult.getIVData().getCurrent(option);
00661 break;
00662 case 2:
00663 dcsInfo = testResult.getDCSInfo();
00664 if(dcsInfo!=null) theData = dcsInfo.get(option);
00665 break;
00666 }
00667 break;
00668 default:
00669 switch(parameterIndex) {
00670 case 0:
00671 theData = testResult.getTestInfo().getTestStatusData();
00672 break;
00673 case 1:
00674 theData = testResult.noDefects();
00675 break;
00676 case 2:
00677 dcsInfo = testResult.getDCSInfo();
00678 if(dcsInfo!=null) theData = dcsInfo.get(option);
00679 break;
00680 default:
00681 theData = (testIndex==TEST_RXTHRESHOLD || testIndex==TEST_RXDELAY) ? testResult.getLinkInfo().get(option) : testResult.getLastDataBlock().get(option,parameterIndex-3);
00682 }
00683 }
00684 return theData;
00685 }
00686
00687 public SummaryReader.IVData getIVData(String resultObjectHeader,String serialNo) {
00688
00689 SummaryReader.Test testResult = getTest(resultObjectHeader,serialNo,null);
00690 if(testResult==null) return null;
00691 else return testResult.getIVData();
00692
00693 }
00694
00695
00696 public Test getTest(String resultObjectHeader, String serialNo,SummaryReader.DCSInfo dcsInfo) {
00697 String resultObject = resultObjectHeader+serialNo;
00698 SummaryReader.Test testObject = (SummaryReader.Test)cache.get(resultObject);
00699 if(testObject!=null) return testObject;
00700
00701
00702 try {
00703 if(!Sct.IS.SctNames.getISRepository().contains(resultObject)) return null;
00704 TestSummaryIS result = new TestSummaryIS();
00705 Sct.IS.SctNames.getISRepository().getValue(resultObject, result);
00706 SummaryReader.Reader reader = new SummaryReader.Reader(serialNo,result.dataString,dcsInfo);
00707 cache.put(resultObject,reader.getTest());
00708 return reader.getTest();
00709 }catch(Exception e){System.err.println("SctGUI: Failed to extract "+resultObject+" : "+e.toString());}
00710 return null;
00711 }
00712
00713
00714 public void fillDCSMap(String objectName) {
00715 ConfigurationInterface config = ConfigurationInterface.getInstance();
00716 if(!config.isDCSAvailable()) return;
00717 try {
00718 Map snMap = new HashMap();
00719 for(Enumeration e = config.getSerialNumberMap(guiControl.displayPane.getSCTView()).elements(); e.hasMoreElements();) {
00720 ModuleCell thisCell = (ModuleCell) e.nextElement();
00721 String sn = thisCell.getSerialNo();
00722 String dcsHeader = config.getSNInfo(sn,SNInfo.DCS_HEADER);
00723 if(dcsHeader==null) continue;
00724 SummaryReader.DCSInfo dcsInfo = new SummaryReader.DCSInfo();
00725 String server =prefs.getPreference(prefs.DCS_SERVER_NAME);
00726 for(int i=0;i<dcsParams.length;i++) {
00727 String ISObject = server+"."+dcsHeader+dcsParams[i] + ".Recv";
00728 if(!Sct.IS.SctNames.getISRepository().contains(ISObject)) continue;
00729 is.AnyInfo theValue = new is.AnyInfo();
00730 Sct.IS.SctNames.getISRepository().getValue(ISObject, theValue);
00731 double theData = ((Float)theValue.getAttribute(theValue.getAttributeCount()-1)).doubleValue();
00732 dcsInfo.put(i,Double.parseDouble(nf.format(theData)));
00733 }
00734 snMap.put(sn,dcsInfo);
00735 }
00736 dcsMap.put(objectName,snMap);
00737 }catch(Exception e){System.err.println("SctGUI: Failed to extract DCS data");}
00738
00739 }
00740 public Double getDCSData(String sn, int parameterIndex) {
00741 try {
00742 ConfigurationInterface config = ConfigurationInterface.getInstance();
00743 if(!config.isDCSAvailable()) return null;
00744 String dcsHeader = config.getSNInfo(sn,SNInfo.DCS_HEADER);
00745 if(dcsHeader==null) return null;
00746 String ISObject = prefs.getPreference(prefs.DCS_SERVER_NAME)+"."+dcsHeader+dcsParams[parameterIndex]+".Recv";
00747 if(!Sct.IS.SctNames.getISRepository().contains(ISObject)) return null;
00748 is.AnyInfo theValue = new is.AnyInfo();
00749 Sct.IS.SctNames.getISRepository().getValue(ISObject, theValue);
00750 double theData = ((Float)theValue.getAttribute(theValue.getAttributeCount()-1)).doubleValue();
00751 return Double.valueOf(nf.format(theData));
00752 }catch(Exception e){return null;}
00753 }
00754
00755
00756 public Map getDCSMap(String controlObjectName) {
00757 return (Map)dcsMap.get(controlObjectName);
00758 }
00759 public void setCacheSize(int size) {
00760 cache = new guiUtilities.Cache(size);
00761 }
00762
00763
00764
00765
00766 private GuiComponents.System.ISInterface is;
00767
00768
00769 }
00770