Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

ISInterface.java

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  * ISInterface.java
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;  // hash to keep track of which servers we are subscribed to...
00034     String theObjectName;
00035 //    String isFilterHeader;
00036 //    String isFilterRunInfo;
00037     TestData testData;       // the currently selected test
00038     String serverName;       // the currently selected server name
00039     int noScans;             // the number of scans in the currently selected test
00040 
00041     int listFilterIndex;
00042 
00043     String eventServerRegex;      // regex for event server objects
00044     String fitServerRegex;        //regex for fit server objects
00045     String controlObjectRegex;          //regex for control data
00046     String rControlObjectRegex;
00047     String dbControlObjectRegex;   // regex for database control data
00048     String testServerRegex;          //regex for test server objects
00049     Pattern objectPattern, rObjectPattern;
00050     String resultObjectRegex;     // regex for test Summary objects
00051     String ivscanRegex;  // regex for ivscan objects
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;     // the test location for SCTDB downloads
00062 
00063     int serverIndex=0;        // the currently selected server
00064 
00065     boolean infoListenersAreActive=true;
00066 
00067 //    Vector infoListenerQueue = new Vector();
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 //        guiControl.displayPane.setDisplayColors();
00266 //        guiControl.displayPane.refreshDisplay();   
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 //                 System.out.println(is.unsubscribe(retrievedArchiveServer, (String)i.next()));
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 //               System.out.println(is.unsubscribe(server, pattern));
00284                }
00285             serverHash = new Hashtable();
00286     }
00287 
00288     public javax.swing.tree.DefaultMutableTreeNode getISTree() {
00289 
00290         String[] servers = is.getISServers();        
00291         
00292         //Setup tree
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 //        trISServers.setModel(new DefaultTreeModel(top));
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();  // just refresh the display
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 // remove tests from IS
00352 // firstRowNo is the first row number in the test JTable
00353 // lastTestNo is the last
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 // first extract the run number, and scan numbers
00362          int runNo = thisTestData.runNumber;
00363          int startScanNumber = thisTestData.startScanNumber;
00364 // form a regular espression
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 // check if all data objects are in RetrievedData server or not...
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 // finally, the control object itself
00392 // the object names in the control server do not have a final '.' after the first scan no 
00393          System.out.println(is.remove(testObjectName)); 
00394          guiControl.tablesDisplayPane.removeTest(testObjectName);
00395         }
00396 
00397        infoListenersAreActive=true;
00398         
00399      }
00400 //***************************************************8
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 //***************************************************8
00405      public int getListFilterIndex() {
00406            return listFilterIndex;
00407            }
00408         
00409 //****************************************************************************
00410 //     public void setTestFilter(String testObjectName) {
00411 //          if(testObjectName==null) testSelection=null;
00412 //          else testSelection = new TestSelection(testObjectName,testLocation);
00413 //          setIsFilterHeader();
00414 //          setIsFilterRunInfo();
00415 //          if(guiControl.displayStatus.getStatus()==DisplayStatus.IS_MONITOR) resetModuleCount();
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             //JFrame frame = new JFrame("InspectorPanel");
00516             //frame.getContentPane().add(p, java.awt.BorderLayout.CENTER);
00517             //frame.pack();
00518             //frame.show();
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: // test status
00568                       theData = testResult.getTestInfo().getTestStatusData();
00569                       break;
00570                     case 1: // defect count
00571                       theData = testResult.noDefects();  
00572                       break;
00573                     case 2: // DCS conditions
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          // DCS
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          // Defects
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          // DAQ info
00632          DAQInfo daqInfo = new DAQInfo();
00633          for(int i=0;i<5;i++) daqInfo.put(i,result.daqInfo[i]);
00634          testObject.add(daqInfo);
00635          // Test Status
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: // test status
00657                               theData = testResult.getTestInfo().getTestStatusData();
00658                               break;
00659                              case 1: // Current
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: // test status
00671                              theData = testResult.getTestInfo().getTestStatusData();
00672                              break;
00673                            case 1: // defect count
00674                              theData = testResult.noDefects();  
00675                              break;
00676                            case 2: // DCS conditions
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 

Generated on Thu Jul 15 09:55:44 2004 for SCT DAQ/DCS Software - Java by doxygen 1.3.5