00001
00002
00003
00004
00005
00006
00007 package DisplayGUI;
00008 import javax.swing.JTable;
00009 import javax.swing.event.*;
00010 import javax.swing.ListSelectionModel;
00011 import javax.swing.table.TableModel;
00012 import java.awt.event.KeyListener;
00013 import java.awt.event.KeyEvent;
00014 import javax.swing.event.ListSelectionListener;
00015 import javax.swing.event.ListSelectionEvent;
00016 import javax.swing.JOptionPane;
00017 import java.util.Vector;
00018 import java.util.Hashtable;
00019 import java.util.Collections;
00020 import Sct_CalibrationController.TestData;
00021 import GuiComponents.System.*;
00026 public class TablesDisplayPane extends javax.swing.JPanel implements TestDataInfo,TableModelListener,ListSelectionListener,displayParams {
00027 gui guiControl;
00028 public javax.swing.JScrollPane jScrollPane1;
00029 private javax.swing.JScrollPane jScrollPane2;
00030 public javax.swing.JLabel table1Title;
00031 public javax.swing.JLabel table2Title;
00032 guiTableAdapter[] resultTable = new guiTableAdapter[2];
00033 JTable[] table = new JTable[2];
00034 Vector[] objectNames = new Vector[2];
00035 ListSelectionModel[] rowSM = new ListSelectionModel[2];
00036 String table1,table2;
00037 boolean selectionListenerIsActive=true;
00038 private GuiComponents.System.ISInterface is;
00039
00040 private TestSelection testSelection;
00041 private IVTestSelection ivTestSelection;
00042
00043 public TablesDisplayPane(gui parent) {
00044 guiControl=parent;
00045 testSelection=null;
00046 ivTestSelection=null;
00047 is = GuiComponents.System.ISInterface.getInstance();
00048 for(int i=0;i<2;i++) {
00049 resultTable[i] = new guiTableAdapter();
00050 resultTable[i].addTableModelListener(this);
00051 table[i] = new JTable(resultTable[i]) {
00052 public String getToolTipText(java.awt.event.MouseEvent e) {
00053 TableModel model = getModel();
00054 int rowSelect = this.rowAtPoint(new java.awt.Point(e.getX(),e.getY()));
00055 if(rowSelect<0) return null;
00056 String sn = (String)model.getValueAt(rowSelect,0);
00057 if(sn.matches("\\d{14}")) {
00058 ModuleCell thisCell = guiControl.config.getModuleCell(guiControl.displayPane.getSCTView(),sn);
00059 StringBuffer infoString = new StringBuffer(sn+" - ");
00060 infoString.append("MUR "+thisCell.getMUR()+", Row "+thisCell.getRow()+", Position "+thisCell.getPosition());
00061 infoString.append(", ROD Crate "+guiControl.config.getSNInfo(sn,SNInfo.ROD_CRATE)+", ROD Slot "+guiControl.config.getSNInfo(sn,SNInfo.ROD_NUMBER)+", ROD Channel "+guiControl.config.getSNInfo(sn,SNInfo.ROD_CHANNEL));
00062 infoString.append(", PS Crate "+guiControl.config.getSNInfo(sn,SNInfo.DCS_CRATE)+", PS Channel "+guiControl.config.getSNInfo(sn,SNInfo.DCS_CHANNEL));
00063 return infoString.toString();
00064 }
00065 else return null;
00066 }
00067 };
00068 table[i].setFont(tableFont);
00069 rowSM[i] = table[i].getSelectionModel();
00070 rowSM[i].addListSelectionListener(this);
00071 }
00072
00073 table[0].setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
00074 table[1].setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
00075
00076 table1 = null;
00077 table2 = null;
00078
00079 initComponents();
00080
00081 table[0].addMouseListener(new tables0MouseAdapter());
00082 table[1].addMouseListener(new tables1MouseAdapter());
00083 setBorder(new javax.swing.border.TitledBorder(null, "Data", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 0, 11), new java.awt.Color(0, 0, 153)));
00084
00085 }
00086
00087 private void initComponents() {
00088 java.awt.GridBagConstraints gridBagConstraints;
00089
00090 jScrollPane1 = new javax.swing.JScrollPane(table[0]);
00091 table1Title = new javax.swing.JLabel();
00092 jScrollPane2 = new javax.swing.JScrollPane(table[1]);
00093 table2Title = new javax.swing.JLabel();
00094
00095 setLayout(new java.awt.GridBagLayout());
00096
00097 setBackground(new java.awt.Color(255, 255, 255));
00098 jScrollPane1.setBackground(new java.awt.Color(255, 255, 255));
00099 jScrollPane1.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.LOWERED));
00100 jScrollPane1.setMinimumSize(new java.awt.Dimension(300, 150));
00101 jScrollPane1.setPreferredSize(new java.awt.Dimension(300, 200));
00102 gridBagConstraints = new java.awt.GridBagConstraints();
00103 gridBagConstraints.gridx = 0;
00104 gridBagConstraints.gridy = 1;
00105 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00106 gridBagConstraints.ipadx = 2;
00107 gridBagConstraints.ipady = 4;
00108 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
00109 gridBagConstraints.weighty = 0.4;
00110 add(jScrollPane1, gridBagConstraints);
00111
00112 table1Title.setFont(new java.awt.Font("Arial", 0, 12));
00113 table1Title.setForeground(new java.awt.Color(51, 0, 153));
00114 table1Title.setText("Table 1");
00115 gridBagConstraints = new java.awt.GridBagConstraints();
00116 gridBagConstraints.gridx = 0;
00117 gridBagConstraints.gridy = 0;
00118 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
00119 gridBagConstraints.weighty = 0.05;
00120 add(table1Title, gridBagConstraints);
00121
00122 jScrollPane2.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.LOWERED));
00123 jScrollPane2.setMinimumSize(new java.awt.Dimension(300, 150));
00124 jScrollPane2.setPreferredSize(new java.awt.Dimension(300, 200));
00125 gridBagConstraints = new java.awt.GridBagConstraints();
00126 gridBagConstraints.gridx = 0;
00127 gridBagConstraints.gridy = 3;
00128 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00129 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
00130 gridBagConstraints.weighty = 0.4;
00131 add(jScrollPane2, gridBagConstraints);
00132
00133 table2Title.setFont(new java.awt.Font("Arial", 0, 12));
00134 table2Title.setForeground(new java.awt.Color(51, 0, 153));
00135 table2Title.setText("Table 2");
00136 gridBagConstraints = new java.awt.GridBagConstraints();
00137 gridBagConstraints.gridx = 0;
00138 gridBagConstraints.gridy = 2;
00139 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
00140 gridBagConstraints.weighty = 0.05;
00141 add(table2Title, gridBagConstraints);
00142
00143 jScrollPane1.addMouseListener(new tables0MouseAdapter());
00144 jScrollPane2.addMouseListener(new tables1MouseAdapter());
00145
00146 }
00147
00148 public java.awt.Insets getInsets() {
00149 return new java.awt.Insets(10,10,10, 10);
00150 }
00151
00152 public void tableChanged(javax.swing.event.TableModelEvent e) {
00153 table1Title.setText((table1==null) ? "" : table1+" : "+Integer.toString(resultTable[0].getRowCount()));
00154 table2Title.setText((table2==null) ? "" : table2+" : "+Integer.toString(resultTable[1].getRowCount()));
00155 }
00156 public void setTableTitles(String title1, String title2) {
00157 table1=title1;
00158 table2=title2;
00159 table1Title.setText((title1==null) ? "" : table1+" : "+Integer.toString(resultTable[0].getRowCount()));
00160 table2Title.setText((title2==null) ? "" : table2+" : "+Integer.toString(resultTable[1].getRowCount()));
00161 }
00162 public int getRowCount(int table) {
00163 if(resultTable[table]==null) return 0;
00164 return resultTable[table].getRowCount();
00165 }
00166 public void setTable1Title(String title) {
00167 table2 = new String(title);
00168 table2Title.setText(table2+" : "+Integer.toString(resultTable[1].getRowCount()));
00169 }
00170 public void refresh(int thisModuleGroup, java.util.Vector tableContents) {
00171 selectionListenerIsActive=false;
00172 resultTable[thisModuleGroup].reTable(tableContents);
00173 selectionListenerIsActive=true;
00174 javax.swing.table.TableColumn column = table[thisModuleGroup].getColumnModel().getColumn(0);
00175 column.setPreferredWidth(100);
00176 }
00177 public void refresh(Vector[] tableContents, int table0RowSelect, int table1RowSelect) {
00178 selectionListenerIsActive=false;
00179
00180 for(int i=0;i<2;i++) {
00181 resultTable[i].reTable(tableContents[i]);
00182 javax.swing.table.TableColumn column = table[i].getColumnModel().getColumn(0);
00183 column.setPreferredWidth(110);
00184 }
00185 selectionListenerIsActive=true;
00186 if(table0RowSelect!=-1) rowSM[0].setSelectionInterval(table0RowSelect,table0RowSelect);
00187 if(table1RowSelect!=-1) rowSM[1].setSelectionInterval(table1RowSelect,table1RowSelect);
00188 }
00189 public void refresh1(Vector newObjectNames, Vector tableContents, String title) {
00190 int oldSelect = rowSM[1].getMinSelectionIndex();
00191 objectNames[1] = new Vector(newObjectNames);
00192 selectionListenerIsActive=false;
00193 resultTable[1].reTable(tableContents);
00194 if(oldSelect>=0 && oldSelect<=tableContents.size()-1) rowSM[1].setSelectionInterval(oldSelect,oldSelect);
00195 selectionListenerIsActive=true;
00196 javax.swing.table.TableColumn column = table[1].getColumnModel().getColumn(0);
00197 column.setPreferredWidth(110);
00198 setTable1Title(title);
00199 }
00200 public void refresh1(Vector tableContents, String title) {
00201 selectionListenerIsActive=false;
00202 int oldSelect = rowSM[1].getMinSelectionIndex();
00203 resultTable[1].reTable(tableContents);
00204 if(oldSelect>=0 && oldSelect<=tableContents.size()-1) rowSM[1].setSelectionInterval(oldSelect,oldSelect);
00205 selectionListenerIsActive=true;
00206 javax.swing.table.TableColumn column = table[1].getColumnModel().getColumn(0);
00207 column.setPreferredWidth(110);
00208 setTable1Title(title);
00209 }
00210
00211
00212 public String getSelectedObject() {
00213 return getSelectedObject(1);
00214 }
00215
00216 public String getSelectedObject(int tableIndex) {
00217 int selectedRow = rowSM[tableIndex].getMinSelectionIndex();
00218 if(objectNames[tableIndex]==null) return null;
00219 int arraySize = objectNames[tableIndex].size();
00220 if(selectedRow==-1 || arraySize==0 || selectedRow>arraySize-1) return null;
00221 return (String)objectNames[tableIndex].elementAt(selectedRow);
00222 }
00223 public String getSelectedSerialNo() {
00224 int selectedRow = rowSM[1].getMinSelectionIndex();
00225 if(selectedRow==-1) return null;
00226 return (String)resultTable[1].getValueAt(selectedRow,0);
00227 }
00228 public void setSelectedSerialNo(String sn, boolean changeSelection) {
00229 int is = rowSM[1].getMinSelectionIndex();
00230 if(is!=-1 && !changeSelection) return;
00231 for(int i=0;i<resultTable[1].getRowCount();i++) {
00232 if(sn.equals((String)resultTable[1].getValueAt(i,0))) {
00233 rowSM[1].setSelectionInterval(i,i);
00234 break;
00235 }
00236 }
00237
00238 }
00239
00240
00241 public int getSelectedTest() {
00242 return rowSM[0].getMinSelectionIndex();
00243 }
00244 public Vector getTestControlObjectNames() {
00245 return objectNames[0];
00246 }
00247 public String getTestControlObjectName() {
00248 int selectedRow = rowSM[0].getMinSelectionIndex();
00249 if(selectedRow==-1) return null;
00250 if(objectNames[0]==null) return null;
00251 if(selectedRow>=objectNames[0].size()) return null;
00252 return (String)objectNames[0].elementAt(selectedRow);
00253 }
00254
00255
00257 public void valueChanged(ListSelectionEvent e) {
00258 if(!selectionListenerIsActive) {
00259
00260 return;
00261 }
00262
00263 if (e.getValueIsAdjusting()) return;
00264
00265 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
00266 int thisTable = (lsm==rowSM[0]) ? 0 : 1;
00267
00268 if (lsm.isSelectionEmpty()) {
00269
00270 if(thisTable==0) {
00271 testSelection=null;
00272 ivTestSelection=null;
00273 guiControl.displayPane.setDisplayColors();
00274 guiControl.displayPane.refreshDisplay();
00275 guiControl.selectorPane.initParamList();
00276 }
00277 return;
00278 }
00279
00280 int minRow=lsm.getMinSelectionIndex();
00281 int maxRow=lsm.getMaxSelectionIndex();
00282 int nselected = maxRow-minRow+1;
00283
00284 int displayStatus=guiControl.displayStatus.getStatus();
00285 switch(displayStatus) {
00286 case DisplayStatus.MODULE_GROUP_SELECTION:
00287 if(nselected>0) lsm.setSelectionInterval(minRow,minRow);
00288 if(thisTable==0) guiControl.selectorPane.setMouseClickIndex(minRow);
00289 guiControl.displayPane.setDisplayColors();
00290 guiControl.displayPane.refreshDisplay();
00291 break;
00292 case DisplayStatus.IS_MONITOR:
00293
00294 if(nselected>1) {
00295 int response = JOptionPane.showConfirmDialog(null,"Are you sure you want to delete these "+nselected+" objects from IS?","Confirm Deletion Request",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
00296 if(response==JOptionPane.NO_OPTION) {
00297 lsm.setSelectionInterval(minRow,minRow);
00298 return;
00299 }
00300
00301 if(thisTable==0) guiControl.isInterface.removeTests(objectNames[0],minRow,maxRow);
00302
00303 updateTables();
00304 return;
00305 }
00306 if(thisTable!=0) return;
00307 if(objectNames[0]!=null && objectNames[0].size()>0) testSelection = new TestSelection((String)objectNames[0].elementAt(minRow),guiControl.isInterface.getLocation());
00308
00309 String runScanRegex = testSelection.getRunScanRegex();
00310 if(runScanRegex!=null) guiControl.isInterface.setISCounter(runScanRegex);
00311
00312 guiControl.selectorPane.initParamList();
00313
00314 if(testSelection.isRetrievedData()) checkForRetrievedObjects();
00315
00316 guiControl.colorScalePane.setColorScale();
00317 guiControl.displayPane.setDisplayColors();
00318 ModuleCell lastClickedCell;
00319 if((lastClickedCell=guiControl.displayPane.getLastClickedCell())!=null) listISObjects(lastClickedCell);
00320 guiControl.displayPane.refreshDisplay();
00321 break;
00322 case DisplayStatus.TEST_DATA:
00323 if(thisTable!=0) return;
00324 if(objectNames[0]!=null && objectNames[0].size()>0) testSelection = new TestSelection((String)objectNames[0].elementAt(minRow),guiControl.isInterface.getLocation());
00325
00326 guiControl.selectorPane.initParamList();
00327
00328 if(testSelection.isRetrievedData()) checkForRetrievedObjects(2);
00329
00330 guiControl.colorScalePane.setColorScale();
00331 guiControl.displayPane.setDisplayColors();
00332 guiControl.displayPane.refreshDisplay();
00333 listTestResults();
00334 break;
00335 case DisplayStatus.SCTDB_DATA:
00336 if(thisTable!=0) return;
00337 if(objectNames[0]!=null && objectNames[0].size()>0) testSelection = new TestSelection((String)objectNames[0].elementAt(minRow),guiControl.isInterface.getLocation());
00338
00339 guiControl.selectorPane.initParamList();
00340 guiControl.colorScalePane.setColorScale();
00341 guiControl.displayPane.setDisplayColors();
00342 guiControl.displayPane.refreshDisplay();
00343 listTestResults();
00344 break;
00345 case DisplayStatus.SCTDB_RODDAQ_DATA:
00346
00347 if(nselected>1) {
00348 int response = JOptionPane.showConfirmDialog(null,"Are you sure you want to delete these "+nselected+" objects from IS?","Confirm Deletion Request",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
00349 if(response==JOptionPane.NO_OPTION) {
00350 lsm.setSelectionInterval(minRow,minRow);
00351 return;
00352 }
00353
00354 if(thisTable==0) guiControl.isInterface.removeTests(objectNames[0],minRow,maxRow);
00355
00356 updateTables();
00357 return;
00358 }
00359 if(thisTable!=0) return;
00360 if(objectNames[0]!=null && objectNames[0].size()>0) {
00361 String objectName = (String)objectNames[0].elementAt(minRow);
00362 java.util.regex.Matcher matcher = ISInterface.SctRodDaqRefPattern.matcher(objectName);
00363 String locn = matcher.matches() ? objectName.substring(matcher.start(ISInterface.LOCATION),matcher.end(ISInterface.LOCATION)) : "Unknown";
00364 testSelection = new TestSelection(objectName,locn);
00365 }
00366
00367 guiControl.selectorPane.initParamList();
00368 guiControl.colorScalePane.setColorScale();
00369 guiControl.displayPane.setDisplayColors();
00370 guiControl.displayPane.refreshDisplay();
00371 listTestResults();
00372 break;
00373 case DisplayStatus.IV_DATA:
00374 if(thisTable!=0) return;
00375 if(objectNames[0]!=null && objectNames[0].size()>0) ivTestSelection = new IVTestSelection((String)objectNames[0].elementAt(minRow));
00376 guiControl.selectorPane.initParamList();
00377 guiControl.colorScalePane.setColorScale();
00378 guiControl.displayPane.setDisplayColors();
00379 guiControl.displayPane.refreshDisplay();
00380 listTestResults();
00381 break;
00382 default:
00383 }
00384 }
00385
00386 public TestSelection getTestSelection() {
00387 return testSelection;
00388 }
00389 public IVTestSelection getIVTestSelection() {
00390 return ivTestSelection;
00391 }
00392
00393 public void listISObjects(ModuleCell thisCell) {
00394 String title = "No module selected";
00395
00396 if(thisCell!=null) {
00397 title =guiControl.selectorPane.getDisplayParameter()+" for "+thisCell.getSerialNo();
00398 refresh1(getISTableList(thisCell),title);
00399 }
00400 }
00401
00402 public Vector getISTableList(ModuleCell thisCell) {
00403
00404 Vector theLine;
00405 java.util.SortedMap m = new java.util.TreeMap();
00406
00407 if(thisCell!=null && testSelection!=null && testSelection.getRunScanRegex()!=null) {
00408 String thisSN = thisCell.getSerialNo();
00409 java.util.List isList = (java.util.List)guiControl.isInterface.isCounter.getModuleList(guiControl.selectorPane.getDisplayParameterIndex(),testSelection.getRunScanRegex(),thisSN,testSelection.isRetrievedData());
00410 if(isList==null) objectNames[1] = new Vector();
00411 else {
00412 objectNames[1] = new Vector(isList);
00413 for(int i=0;i<objectNames[1].size();i++) {
00414 String[] objectParts = ((String)objectNames[1].elementAt(i)).split("\\.");
00415 theLine = new Vector();
00416 String sn = objectParts[4];
00417 Integer runNo = Integer.valueOf(objectParts[2]);
00418 Integer scanNo = Integer.valueOf(objectParts[3]);
00419 String fname = objectParts[1];
00420 theLine.add(sn);
00421 theLine.add(runNo);
00422 theLine.add(scanNo);
00423 theLine.add(fname);
00424 m.put(new Integer(runNo.intValue()*10000 + scanNo.intValue()),theLine);
00425 }
00426 }
00427 }
00428 Vector tableContents = new Vector(m.values());
00429 theLine=new Vector();
00430 theLine.addElement("Serial No");
00431 theLine.addElement("Run No");
00432 theLine.addElement("Scan No");
00433 theLine.addElement("Data");
00434 tableContents.insertElementAt(theLine,0);
00435 return tableContents;
00436 }
00437
00438
00439 public void listTestResults() {
00440
00441 int status = guiControl.displayStatus.getStatus();
00442 int displayParameter = guiControl.selectorPane.getDisplayParameterIndex();
00443 String testParameter = (displayParameter==2 && status!=DisplayStatus.DCS_DATA) ? guiControl.selectorPane.getOption() : guiControl.selectorPane.getDisplayParameter();
00444 if(status==DisplayStatus.IV_DATA) {
00445 if(ivTestSelection==null) return;
00446 switch(displayParameter) {
00447 case 1:
00448 testParameter = guiControl.selectorPane.getIVParameter();
00449 break;
00450 case 2:
00451 testParameter = guiControl.selectorPane.getOption();
00452 break;
00453 default:
00454 testParameter = guiControl.selectorPane.getDisplayParameter();
00455 }
00456 }
00457 else if((status!=DisplayStatus.DCS_DATA && status!=DisplayStatus.PROBE_DATA) && testSelection==null) return;
00458
00459 java.util.Set moduleList = guiControl.config.getSortedVector(guiControl.displayPane.getSCTView());
00460 int index = guiControl.selectorPane.getMouseClickIndex();
00461 Vector theLine = new Vector();
00462 Vector table = new Vector();
00463 Vector objectsVector = new Vector();
00464 theLine.addElement("Serial No");
00465 switch(status) {
00466 case DisplayStatus.SCTDB_DATA:
00467 theLine.addElement("Location");
00468 theLine.addElement("Date");
00469 break;
00470 case DisplayStatus.SCTDB_RODDAQ_DATA:
00471 theLine.addElement("Date");
00472 break;
00473 default:
00474 }
00475 theLine.addElement(testParameter);
00476 table.addElement(theLine);
00477
00478 SummaryReader.Test testResult;
00479
00480 for (java.util.Iterator i = moduleList.iterator(); i.hasNext(); ) {
00481 String thisSN=(String)i.next();
00482
00483 ModuleCell thisCell = (ModuleCell)guiControl.config.getModuleCell(guiControl.displayPane.getSCTView(),thisSN);
00484 theLine=new Vector();
00485 theLine.addElement(thisSN);
00486
00487 switch(status) {
00488 case DisplayStatus.SCTDB_DATA:
00489 if(testSelection.getSCTDBObjectHeader()==null) continue;
00490 testResult = guiControl.isInterface.getSCTDBTest(testSelection.getSCTDBObjectHeader()+thisSN);
00491 if(testResult==null) {
00492 theLine.addElement(" - ");
00493 theLine.addElement(" - ");
00494 }
00495 else {
00496 theLine.addElement(testResult.getDAQInfo().get(SummaryReader.DAQInfo.LOCATION));
00497 theLine.addElement(testResult.getDAQInfo().get(SummaryReader.DAQInfo.DATE));
00498 }
00499 break;
00500 case DisplayStatus.SCTDB_RODDAQ_DATA:
00501 testResult = guiControl.isInterface.getSCTDBTest(testSelection.getSCTDBRodDaqObjectHeader()+thisSN);
00502 if(testResult==null) theLine.addElement(" - ");
00503 else theLine.addElement(testResult.getDAQInfo().get(SummaryReader.DAQInfo.DATE));
00504 break;
00505 default:
00506 }
00507
00508 ColorScale thisColorScale;
00509 if((thisColorScale = guiControl.colorScalePane.getColorScale())!=null) theLine.addElement(thisColorScale.getLabel(thisCell.getData()));
00510 else theLine.addElement("No Data");
00511 table.addElement(theLine);
00512 }
00513 String title = (status==DisplayStatus.TEST_DATA && guiControl.displayPane.getDisplayOption()==2) ? testParameter+" Comparisons" : testParameter+" Results ";
00514 refresh1(objectsVector,table,title);
00515 }
00516
00517 public void updateTables(boolean keepSelections) {
00518 changeTables(keepSelections);
00519 }
00520 public void updateTables() {
00521 changeTables(!guiControl.menuBar.autoSelectMode.isSelected());
00522 }
00523
00524 private void changeTables(boolean keepSelections) {
00525
00526 testSelection=null;
00527 ivTestSelection=null;
00528
00529 Vector theLine = new Vector();
00530 int table0Select=-1;
00531 int table1Select=-1;
00532 String selectedObject0 = getSelectedObject(0);
00533 String selectedObject1 = getSelectedObject(1);
00534 if(keepSelections) {
00535 table0Select = (selectedObject0!=null) ? objectNames[0].indexOf(selectedObject0) : -1;
00536 }
00537 table1Select = (selectedObject1!=null) ? objectNames[1].indexOf(selectedObject1) : -1;
00538
00539 String title0=null;
00540 String title1=null;
00541 Vector[] tableContents = new Vector[2];
00542 tableContents[0] = new Vector();
00543 tableContents[1] = new Vector();
00544
00545 int previousSelection = keepSelections ? getSelectedTest() : -1;
00546
00547 int view = guiControl.displayPane.getSCTView();
00548 int displayStatus = guiControl.displayStatus.getStatus();
00549
00550 switch(displayStatus) {
00551 case DisplayStatus.MODULE_GROUP_SELECTION :
00552 title0 = "ModuleGroups";
00553 String option = guiControl.selectorPane.getOption();
00554 title1 = (option!=null) ? option+" modules" : null;
00555 theLine.addElement("Serial No");
00556 String title = (view<4) ? "Row" : "Quadrant";
00557 theLine.addElement(title);
00558 theLine.addElement("Posn");
00559 theLine.addElement("MUR");
00560 tableContents[1].addElement(theLine);
00561 theLine = new Vector();
00562 theLine.addElement("Group");
00563 theLine.addElement("# Modules");
00564 tableContents[0].addElement(theLine);
00565
00566 java.util.Set moduleList = guiControl.config.getSortedVector(view);
00567 java.util.Map groupCounts = new java.util.HashMap();
00568
00569 int selectedGroup = guiControl.selectorPane.getMouseClickIndex();
00570 table0Select = selectedGroup;
00571 for (java.util.Iterator i = moduleList.iterator(); i.hasNext(); ) {
00572 String thisSN=(String)i.next();
00573 ModuleCell thisCell = (ModuleCell)guiControl.config.getModuleCell(view,thisSN);
00574 int thisGroup = thisCell.getModuleGroup();
00575 if(thisGroup<0) continue;
00576
00577 Integer iThisGroup = new Integer(thisGroup);
00578 Integer c;
00579 if((c = (Integer)groupCounts.get(iThisGroup))==null) groupCounts.put(iThisGroup,new Integer(1));
00580 else groupCounts.put(iThisGroup,new Integer(c.intValue()+1));
00581
00582 if(thisGroup!=selectedGroup) continue;
00583 theLine = new Vector();
00584 theLine.addElement(thisSN);
00585 if(view<4) {
00586 theLine.addElement(Integer.toString(thisCell.getRow()));
00587 theLine.addElement(Integer.toString(thisCell.getPosition()));
00588 }
00589 else {
00590 theLine.addElement(thisCell.getQuadrant());
00591 theLine.addElement(thisCell.getEndCapPosition());
00592 }
00593
00594 theLine.addElement(Integer.toString(thisCell.getMUR()));
00595 tableContents[1].addElement(theLine);
00596 }
00597 for(int i=0;i<8;i++) {
00598 theLine = new Vector();
00599 theLine.addElement("ModuleGroup "+i);
00600 Integer c;
00601 if((c=(Integer)groupCounts.get(new Integer(i)))==null) theLine.addElement(new Integer(0));
00602 else theLine.addElement(c);
00603 tableContents[0].addElement(theLine);
00604 }
00605 break;
00606 case DisplayStatus.IS_MONITOR:
00607 title0 = "Tests";
00608 title1 = guiControl.selectorPane.getDisplayParameter();
00609 tableContents[1] = getISTableList(guiControl.displayPane.getLastClickedCell());
00610 tableContents[0] = getTestTableList();
00611 break;
00612 case DisplayStatus.IV_DATA:
00613 title0 = "IV scans";
00614 title1 = "IV Data";
00615 tableContents[0] = getIVScanList();
00616 theLine = new Vector();
00617 theLine.addElement("Serial No");
00618 theLine.addElement(guiControl.selectorPane.getIVParameter());
00619 tableContents[1].addElement(theLine);
00620 break;
00621 case DisplayStatus.TEST_DATA:
00622 case DisplayStatus.SCTDB_DATA:
00623 case DisplayStatus.SCTDB_RODDAQ_DATA:
00624 int testType = guiControl.isInterface.getListFilterIndex();
00625 title0 = (testType==-1) ? "Number of Tests " : "Number of "+testMenuNames[testType]+" Tests ";
00626 String testParameter = guiControl.selectorPane.getDisplayParameter();
00627 title1 = testParameter+ " Results";
00628 theLine = new Vector();
00629 theLine.addElement("Serial No");
00630 theLine.addElement(testParameter);
00631 tableContents[1].addElement(theLine);
00632 tableContents[0]=getTestTableList();
00633 if(tableContents[0].size()>1) {
00634 if(previousSelection<=tableContents[0].size()-2 && previousSelection>=0) table0Select=previousSelection;
00635 else table0Select=tableContents[0].size()-2;
00636 }
00637
00638 break;
00639 case DisplayStatus.DCS_DATA:
00640 table0Select=-1;
00641 table1Select=-1;
00642 title0 = "Server Info";
00643 title1 = guiControl.selectorPane.getDisplayParameter()+ " Data";
00644 theLine = new Vector();
00645 theLine.addElement("Serial No");
00646 theLine.addElement(guiControl.selectorPane.getDisplayParameter());
00647 tableContents[1].addElement(theLine);
00648 theLine = new Vector();
00649 theLine.addElement("Server");
00650 theLine.addElement("Last Update");
00651 tableContents[0].addElement(theLine);
00652 theLine = new Vector();
00653 theLine.addElement(Preferences.PreferencesInterface.getInstance().getPreference(Preferences.PreferencesInterface.DCS_SERVER_NAME));
00654 theLine.addElement(guiControl.isInterface.isRequestBuffer.getLastUpdateTime());
00655 tableContents[0].addElement(theLine);
00656 break;
00657 case DisplayStatus.PROBE_DATA:
00658 table0Select=-1;
00659 table1Select=-1;
00660 title0 = "Module Probe Counts";
00661 title1 = "Module Probe Data";
00662 theLine = new Vector();
00663 theLine.addElement("Serial No");
00664 theLine.addElement(guiControl.selectorPane.getOption());
00665 tableContents[1].addElement(theLine);
00666 tableContents[0] = SctApiInfo.getInstance().getCountVector();
00667 break;
00668 default:
00669 guiControl.displayPane.refreshDisplay();
00670 return;
00671 }
00672 boolean dontSelect = (displayStatus==DisplayStatus.DCS_DATA || displayStatus==DisplayStatus.PROBE_DATA);
00673 if(table0Select==-1 && tableContents[0].size()>1 && !dontSelect) table0Select=tableContents[0].size()-2;
00674 if(table1Select==-1 && tableContents[1].size()>1 && !dontSelect) table1Select=tableContents[1].size()-2;
00675 refresh(tableContents,table0Select,table1Select);
00676 setTableTitles(title0,title1);
00677
00678 if(getSelectedTest()==-1) {
00679
00680 testSelection=null;
00681 ivTestSelection=null;
00682 guiControl.displayPane.setDisplayColors();
00683 guiControl.displayPane.refreshDisplay();
00684 guiControl.selectorPane.initParamList();
00685 }
00686
00687 if(displayStatus==DisplayStatus.DCS_DATA || displayStatus==DisplayStatus.PROBE_DATA) {
00688 testSelection=null;
00689 ivTestSelection=null;
00690 guiControl.displayPane.setDisplayColors();
00691 guiControl.displayPane.refreshDisplay();
00692 listTestResults();
00693 }
00694 }
00695
00696 public void setTestTable(Vector ISTests) {
00697 objectNames[0] = ISTests;
00698 updateTables(true);
00699 }
00700 public void addNewTest(String theObjectName) {
00701 if(objectNames[0]==null) return;
00702 if(!objectNames[0].contains(theObjectName)) objectNames[0].addElement(theObjectName);
00703 }
00704 public void removeTest(String theObjectName) {
00705 if(objectNames[0].contains(theObjectName)) {
00706 objectNames[0].removeElement(theObjectName);
00707 updateTables(true);
00708 }
00709 }
00710
00711 public Vector getTestTableList() {
00712
00713 Vector theLine = new Vector();
00714 Vector tableContent = new Vector();
00715 Vector orderVector = new Vector();
00716 Hashtable orderHash = new Hashtable();
00717 Hashtable objectOrderHash = new Hashtable();
00718
00719 boolean isSCTDBSctRodDaqData = (guiControl.displayStatus.getStatus()==DisplayStatus.SCTDB_RODDAQ_DATA);
00720
00721 theLine.addElement("Test");
00722 theLine.addElement(isSCTDBSctRodDaqData ? "Locn" : "Status");
00723 theLine.addElement("Run");
00724 theLine.addElement("Scan");
00725 theLine.addElement("#Scans");
00726 theLine.addElement("Source");
00727 tableContent.addElement(theLine);
00728 int exceptionCount=0;
00729 for(int i=0;i<objectNames[0].size();i++) {
00730 String thisObject = (String)objectNames[0].elementAt(i);
00731 TestData testData = new TestData();
00732 try {
00733 is.getRepository().getValue(thisObject, testData);
00734 theLine=new Vector();
00735 if(testData.testName.equals("NPtGainTest") && testData.nScans==3) testData.testName = "3PtGainTest";
00736 theLine.addElement(testData.testName);
00737 if(!isSCTDBSctRodDaqData) {
00738 switch(testData.status) {
00739 case 0:
00740 theLine.addElement("Executing");
00741 break;
00742 case 1:
00743 theLine.addElement("Completed");
00744 break;
00745 case 2:
00746 theLine.addElement("Aborted");
00747 break;
00748 default:
00749 theLine.addElement("Unknown");
00750 }
00751 }
00752 else {
00753 java.util.regex.Matcher matcher = ISInterface.SctRodDaqRefPattern.matcher(thisObject);
00754 theLine.addElement(matcher.matches() ? thisObject.substring(matcher.start(ISInterface.LOCATION),matcher.end(ISInterface.LOCATION)) : "Unknown");
00755 }
00756
00757 theLine.addElement(new Integer(testData.runNumber));
00758 theLine.addElement(new Integer(testData.startScanNumber));
00759 theLine.addElement(new Integer(testData.nScans));
00760
00761 int offsetCount = (thisObject.matches("RetrievedData.*")) ? 0 : 100000000;
00762 Integer runScanNumber = new Integer(testData.runNumber*10000 + testData.startScanNumber +offsetCount);
00763
00764 if(thisObject.matches("RetrievedData.*")) theLine.addElement("Archive");
00765 else if(thisObject.matches("SCTDBData.*")) theLine.addElement("SCTDB");
00766 else theLine.addElement("New");
00767
00768 orderVector.addElement(runScanNumber);
00769 orderHash.put(runScanNumber,theLine);
00770 objectOrderHash.put(runScanNumber,thisObject);
00771 }catch(Exception e){exceptionCount++;}
00772
00773 }
00774
00775 Collections.sort(orderVector);
00776 objectNames[0]=new Vector();
00777 for(int i=0;i<orderVector.size();i++) {
00778 Integer runscan= (Integer)orderVector.elementAt(i);
00779 objectNames[0].addElement((String)objectOrderHash.get(orderVector.elementAt(i)));
00780 tableContent.addElement((Vector)orderHash.get(orderVector.elementAt(i)));
00781 }
00782 if(exceptionCount>0) System.err.println("SctGUI::TablesDisplayPane - exception reading retrieving IS data.");
00783 return tableContent;
00784 }
00785
00786 public Vector getIVScanList() {
00787
00788 Vector theLine = new Vector();
00789 Vector tableContent = new Vector();
00790 Vector orderVector = new Vector();
00791 Hashtable orderHash = new Hashtable();
00792 Hashtable objectOrderHash = new Hashtable();
00793
00794 theLine.addElement("Run");
00795 theLine.addElement("Scan");
00796 theLine.addElement("Date");
00797 theLine.addElement("Time");
00798 theLine.addElement("#Modules");
00799 theLine.addElement("Source");
00800 tableContent.addElement(theLine);
00801 for(int i=0;i<objectNames[0].size();i++) {
00802 String thisObject = (String)objectNames[0].elementAt(i);
00803 IVScanControl iv = new IVScanControl();
00804 is.getRepository().getValue(thisObject, iv);
00805 theLine=new Vector();
00806 theLine.addElement(new Integer(iv.runNo));
00807 theLine.addElement(new Integer(iv.scanNo));
00808 theLine.addElement(iv.scanDate);
00809 theLine.addElement(iv.scanTime);
00810 theLine.addElement(new Integer(iv.modules.length));
00811
00812 int offsetCount = (thisObject.matches("RetrievedData.*")) ? 0 : 100000000;
00813 Integer runScanNumber = new Integer(iv.runNo*10000 + iv.scanNo +offsetCount);
00814
00815 if(thisObject.matches("SCTDBData.*")) theLine.addElement("SCTDB");
00816 else theLine.addElement("DCS");
00817
00818 orderVector.addElement(runScanNumber);
00819 orderHash.put(runScanNumber,theLine);
00820 objectOrderHash.put(runScanNumber,thisObject);
00821
00822 }
00823
00824 Collections.sort(orderVector);
00825 objectNames[0]=new Vector();
00826 for(int i=0;i<orderVector.size();i++) {
00827 Integer runscan= (Integer)orderVector.elementAt(i);
00828 objectNames[0].addElement((String)objectOrderHash.get(orderVector.elementAt(i)));
00829 tableContent.addElement((Vector)orderHash.get(orderVector.elementAt(i)));
00830 }
00831 return tableContent;
00832 }
00833
00834 public void updateTest(String testObjectName) {
00835 if(objectNames[0]==null) return;
00836 if(!objectNames[0].contains(testObjectName)) return;
00837 int rowNumber=objectNames[0].indexOf(testObjectName);
00838 try {
00839 TestData testData = new TestData();
00840 Sct.IS.SctNames.getISRepository().getValue(testObjectName, testData);
00841 switch(testData.status) {
00842 case 0:
00843 resultTable[0].setValueAt("Executing",rowNumber,1);
00844 break;
00845 case 1:
00846 resultTable[0].setValueAt("Completed",rowNumber,1);
00847 break;
00848 case 2:
00849 resultTable[0].setValueAt("Aborted",rowNumber,1);
00850 break;
00851 default:
00852 resultTable[0].setValueAt("Unknown",rowNumber,1);
00853 }
00854 resultTable[0].fireTableCellUpdated(rowNumber,1);
00855 if(testData.status==1 && guiControl.menuBar.autoUploadIsEnabled() && !testData.testName.equals("NMaskTest")) {
00856 UploadManager upload = new UploadManager(guiControl);
00857 }
00858 }catch(Exception updateE){System.err.println("***ERROR updating test status in table list : "+updateE.toString());}
00859
00860 }
00861
00862 public void updateTestTable(String testObjectName, int rowNumber) {
00863 if(rowNumber==-1) return;
00864 try {
00865 TestData testData = new TestData();
00866 Sct.IS.SctNames.getISRepository().getValue(testObjectName, testData);
00867 switch(testData.status) {
00868 case 0:
00869 resultTable[0].setValueAt("Executing",rowNumber,1);
00870 break;
00871 case 1:
00872 resultTable[0].setValueAt("Completed",rowNumber,1);
00873 break;
00874 case 2:
00875 resultTable[0].setValueAt("Aborted",rowNumber,1);
00876 break;
00877 default:
00878 resultTable[0].setValueAt("Unknown",rowNumber,1);
00879 }
00880 resultTable[0].fireTableCellUpdated(rowNumber,1);
00881 }catch(Exception updateE){System.err.println("***ERROR updating test status in table list : "+updateE.toString());}
00882 }
00883
00884
00885 class tables1MouseAdapter extends java.awt.event.MouseAdapter {
00886 public void mouseClicked(java.awt.event.MouseEvent e) {
00887 switch(e.getModifiers()) {
00888 case java.awt.event.InputEvent.BUTTON2_MASK:
00889 case java.awt.event.InputEvent.BUTTON3_MASK:
00890 int rowSelect = table[1].rowAtPoint(new java.awt.Point(e.getX(),e.getY()));
00891 rowSM[1].setSelectionInterval(rowSelect,rowSelect);
00892 if(rowSelect<0) return;
00893 guiControl.menuBar.setSelectedSerialNo((String)resultTable[1].getValueAt(rowSelect,0));
00894 guiControl.menuBar.showTablesPopupMenu(1,e);
00895 break;
00896 default:
00897 }
00898 }
00899 }
00900 class tables0MouseAdapter extends java.awt.event.MouseAdapter {
00901 public void mouseClicked(java.awt.event.MouseEvent e) {
00902 switch(e.getModifiers()) {
00903 case java.awt.event.InputEvent.BUTTON2_MASK:
00904 case java.awt.event.InputEvent.BUTTON3_MASK:
00905 int rowSelect = table[0].rowAtPoint(new java.awt.Point(e.getX(),e.getY()));
00906 rowSM[0].setSelectionInterval(rowSelect,rowSelect);
00907 guiControl.menuBar.showTablesPopupMenu(0,e);
00908 break;
00909 default:
00910 }
00911 }
00912 }
00913 public void checkForRetrievedObjects() {
00914 checkForRetrievedObjects(-1);
00915 }
00916
00917 public void checkForRetrievedObjects(int serverIndex) {
00918 if(testSelection==null || !testSelection.isRetrievedData()) return;
00919 if(serverIndex==-1) serverIndex = guiControl.selectorPane.getDisplayParameterIndex();
00920 if(guiControl.isInterface.isCounter.archivedObjectsRetrievedOk(serverIndex,testSelection.getRunScanRegex())) return;
00921 System.out.println("SctGUI - Retrieving archived data files...");
00922 String oName;
00923 switch(serverIndex) {
00924 case 1:
00925 oName = "SctData::FitScanResult";
00926 break;
00927 case 2:
00928 oName = "SctData::*TestResult";
00929 break;
00930 default:
00931 oName = "SctData::RawScanResult";
00932 }
00933
00934 try {
00935
00936 ArchivingServiceI.ArchivingServiceInterface a = SystemInterface.getInstance().getArchivingService();
00937 int scan=testSelection.getScanNo();
00938 if(serverIndex==2) a.retrieve(Integer.toString(testSelection.getRunNo()),Integer.toString(scan),oName,"*");
00939 else {
00940 for(int i = 0;i<testSelection.getNoScans();i++) a.retrieve(Integer.toString(testSelection.getRunNo()),Integer.toString(scan+i),oName,"*");
00941 }
00942 }catch(Exception e2) {System.err.println("SctGUI::TablesDisplayPane - Exception from retrieving from ArchiveService: "+e2.toString());}
00943
00944 }
00945
00946
00947
00948
00949 }
00950