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