00001 package GuiComponents.SctApi;
00002
00003 import javax.swing.*;
00004 import java.awt.*;
00005 import java.awt.event.*;
00006 import javax.swing.table.TableModel;
00007 import javax.swing.table.TableColumn;
00008 import javax.swing.table.JTableHeader;
00009
00010 import GuiComponents.System.SystemInterface;
00011
00012 public class ProbeView extends JPanel {
00013 Sct_SctApi.SctApiIPC api;
00014
00015
00016 int partition;
00017 int crate;
00018 int rod;
00019
00020 ResultsTableModel tableModel;
00021
00022 short [] results;
00023 short [][] scanResults;
00024
00025 public ProbeView(int p, int c, int r, Sct_SctApi.SctApiIPC a) {
00026 partition = p;
00027 crate = c;
00028 rod = r;
00029 api = a;
00030
00031 tableModel = new ProbeView.ResultsTableModel();
00032 results = api.probeHarness(partition, crate, rod, 0);
00033 scanResults = new short[0][0];
00034 initComponents();
00035 modifyComponents();
00036 }
00037
00038
00039 public ProbeView() {
00040 initComponents();
00041 results = api.probeHarness(0, 0, 0, 0);
00042 modifyComponents();
00043 }
00044
00045 public void modifyComponents() {
00046 updateResultsPanel();
00047
00048 int columnWidth = jTable1.getFontMetrics(jTable1.getFont()).stringWidth("mmmmmm");
00049
00050
00051 TableColumn column = jTable1.getColumnModel().getColumn(0);
00052 column.setPreferredWidth(columnWidth * 8);
00053 }
00054
00060 private void initComponents() {
00061 jPanel2 = new javax.swing.JPanel();
00062 jPanel5 = new javax.swing.JPanel();
00063 jLabel3 = new javax.swing.JLabel();
00064 jTextField2 = new javax.swing.JTextField();
00065 jLabel4 = new javax.swing.JLabel();
00066 jTextField3 = new javax.swing.JTextField();
00067 jLabel5 = new javax.swing.JLabel();
00068 jTextField4 = new javax.swing.JTextField();
00069 jLabel7 = new javax.swing.JLabel();
00070 harnessValue = new javax.swing.JTextField();
00071 jPanel6 = new javax.swing.JPanel();
00072 jButton1 = new javax.swing.JButton();
00073 checkCharsText = new javax.swing.JTextField();
00074 checkProbePerformed = new javax.swing.JButton();
00075 performHardReset = new javax.swing.JButton();
00076 jPanel1 = new javax.swing.JPanel();
00077 jButton4 = new javax.swing.JButton();
00078 jTabbedPane1 = new javax.swing.JTabbedPane();
00079 resultsPanel = new javax.swing.JPanel();
00080 jPanel3 = new javax.swing.JPanel();
00081 jPanel4 = new javax.swing.JPanel();
00082 jLabel1 = new javax.swing.JLabel();
00083 jComboBox1 = new javax.swing.JComboBox();
00084 jButton2 = new javax.swing.JButton();
00085 jScrollPane1 = new javax.swing.JScrollPane();
00086 jTable1 = new javax.swing.JTable();
00087 jPanel7 = new javax.swing.JPanel();
00088 jPanel8 = new javax.swing.JPanel();
00089 jLabel2 = new javax.swing.JLabel();
00090 jComboBox2 = new javax.swing.JComboBox();
00091 jLabel6 = new javax.swing.JLabel();
00092 jComboBox3 = new javax.swing.JComboBox();
00093 loopbackTestPerform = new javax.swing.JButton();
00094 jScrollPane2 = new javax.swing.JScrollPane();
00095 jTable2 = new javax.swing.JTable();
00096
00097 setLayout(new java.awt.BorderLayout());
00098
00099 jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.Y_AXIS));
00100
00101 jPanel5.setLayout(new javax.swing.BoxLayout(jPanel5, javax.swing.BoxLayout.X_AXIS));
00102
00103 jLabel3.setText("Partition");
00104 jPanel5.add(jLabel3);
00105
00106 jTextField2.setEditable(false);
00107 jTextField2.setText(new Integer(getPartition()).toString());
00108 jPanel5.add(jTextField2);
00109
00110 jLabel4.setText("Crate");
00111 jPanel5.add(jLabel4);
00112
00113 jTextField3.setEditable(false);
00114 jTextField3.setText(new Integer(getCrate()).toString());
00115 jPanel5.add(jTextField3);
00116
00117 jLabel5.setText("ROD");
00118 jPanel5.add(jLabel5);
00119
00120 jTextField4.setEditable(false);
00121 jTextField4.setText(new Integer(getRod()).toString());
00122 jPanel5.add(jTextField4);
00123
00124 jLabel7.setText("Harness");
00125 jPanel5.add(jLabel7);
00126
00127 harnessValue.setText("0");
00128 jPanel5.add(harnessValue);
00129
00130 jPanel2.add(jPanel5);
00131
00132 jPanel6.setLayout(new javax.swing.BoxLayout(jPanel6, javax.swing.BoxLayout.X_AXIS));
00133
00134 jButton1.setText("Probe");
00135 jButton1.addActionListener(new java.awt.event.ActionListener() {
00136 public void actionPerformed(java.awt.event.ActionEvent evt) {
00137 probeButtonPerformed(evt);
00138 }
00139 });
00140
00141 jPanel6.add(jButton1);
00142
00143 checkCharsText.setText("2E");
00144 jPanel6.add(checkCharsText);
00145
00146 checkProbePerformed.setText("Check Modules Probe");
00147 checkProbePerformed.addActionListener(new java.awt.event.ActionListener() {
00148 public void actionPerformed(java.awt.event.ActionEvent evt) {
00149 checkProbePerformedActionPerformed(evt);
00150 }
00151 });
00152
00153 jPanel6.add(checkProbePerformed);
00154
00155 performHardReset.setText("Perform Hard Reset");
00156 performHardReset.addActionListener(new java.awt.event.ActionListener() {
00157 public void actionPerformed(java.awt.event.ActionEvent evt) {
00158 performHardResetActionPerformed(evt);
00159 }
00160 });
00161
00162 jPanel6.add(performHardReset);
00163
00164 jPanel2.add(jPanel6);
00165
00166 add(jPanel2, java.awt.BorderLayout.NORTH);
00167
00168 jPanel1.setOpaque(false);
00169 jButton4.setText("Close");
00170 jButton4.addActionListener(new java.awt.event.ActionListener() {
00171 public void actionPerformed(java.awt.event.ActionEvent evt) {
00172 closeButtonPerformed(evt);
00173 }
00174 });
00175
00176 jPanel1.add(jButton4);
00177
00178 add(jPanel1, java.awt.BorderLayout.SOUTH);
00179
00180 resultsPanel.setLayout(new javax.swing.BoxLayout(resultsPanel, javax.swing.BoxLayout.Y_AXIS));
00181
00182 jTabbedPane1.addTab("Single Probe", resultsPanel);
00183
00184 jPanel3.setLayout(new java.awt.BorderLayout());
00185
00186 jPanel4.setLayout(new javax.swing.BoxLayout(jPanel4, javax.swing.BoxLayout.X_AXIS));
00187
00188 jLabel1.setText("Scan type");
00189 jPanel4.add(jLabel1);
00190
00191 jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "default", "Loopback Scan" }));
00192 jPanel4.add(jComboBox1);
00193
00194 jButton2.setText("Perform scan");
00195 jButton2.addActionListener(new java.awt.event.ActionListener() {
00196 public void actionPerformed(java.awt.event.ActionEvent evt) {
00197 performScanActionPerformed(evt);
00198 }
00199 });
00200
00201 jPanel4.add(jButton2);
00202
00203 jPanel3.add(jPanel4, java.awt.BorderLayout.NORTH);
00204
00205 jTable1.setFont(new java.awt.Font("Monospaced", 0, 12));
00206 jTable1.setModel(getScanResultsTableModel());
00207 jScrollPane1.setViewportView(jTable1);
00208
00209 jPanel3.add(jScrollPane1, java.awt.BorderLayout.CENTER);
00210
00211 jTabbedPane1.addTab("Probe Scan", jPanel3);
00212
00213 jPanel7.setLayout(new java.awt.BorderLayout());
00214
00215 jPanel8.setLayout(new javax.swing.BoxLayout(jPanel8, javax.swing.BoxLayout.X_AXIS));
00216
00217 jLabel2.setText("Scan type");
00218 jPanel8.add(jLabel2);
00219
00220 jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "default", "Loopback Scan" }));
00221 jPanel8.add(jComboBox2);
00222
00223 jLabel6.setText("Select Line");
00224 jPanel8.add(jLabel6);
00225
00226 jComboBox3.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Normal", "Redundant" }));
00227 jPanel8.add(jComboBox3);
00228
00229 loopbackTestPerform.setText("Perform scan");
00230 loopbackTestPerform.addActionListener(new java.awt.event.ActionListener() {
00231 public void actionPerformed(java.awt.event.ActionEvent evt) {
00232 loopbackTestPerformActionPerformed(evt);
00233 }
00234 });
00235
00236 jPanel8.add(loopbackTestPerform);
00237
00238 jPanel7.add(jPanel8, java.awt.BorderLayout.NORTH);
00239
00240 jTable2.setFont(new java.awt.Font("Monospaced", 0, 12));
00241 jTable2.setModel(getScanResultsTableModel());
00242 jScrollPane2.setViewportView(jTable2);
00243
00244 jPanel7.add(jScrollPane2, java.awt.BorderLayout.CENTER);
00245
00246 jTabbedPane1.addTab("Loopback test", jPanel7);
00247
00248 add(jTabbedPane1, java.awt.BorderLayout.CENTER);
00249
00250 }
00251
00252 private void performHardResetActionPerformed(java.awt.event.ActionEvent evt) {
00253
00254 SystemInterface sys = SystemInterface.getInstance();
00255 sctConf.Configuration conf = sys.getConfigurationService();
00256
00257 if(conf!=null){
00258
00259 int partition = getPartition();
00260 int crate = getCrate();
00261 int rod = getRod();
00262 int harness;
00263
00264 try {
00265 harness = Integer.parseInt(harnessValue.getText());
00266 } catch(NumberFormatException e) {
00267 harness = -1;
00268 }
00269
00270 org.omg.CORBA.IntHolder murID = new org.omg.CORBA.IntHolder();
00271 org.omg.CORBA.IntHolder ps_partition = new org.omg.CORBA.IntHolder();
00272 org.omg.CORBA.IntHolder ps_crate = new org.omg.CORBA.IntHolder();
00273 org.omg.CORBA.IntHolder ps_channel = new org.omg.CORBA.IntHolder();
00274
00275 try{
00276 conf.getMapRODMUR(partition, crate, rod, harness, murID);
00277 conf.translateToPowerSupply(murID.value, 1, ps_partition, ps_crate, ps_channel);
00278 } catch(sctConf.ConfigurationException e) {
00279 ps_crate.value = -1;
00280 JOptionPane.showMessageDialog(null, "ProbeView was unable to determine which power supply crate houses the power supply we would need to tamper with in order to ddcHardResetAll all modules in partition,crate,rod=("+Integer.toString(partition)+", "+Integer.toString(crate)+", "+Integer.toString(rod)+"),");
00281 }
00282
00283 if(ps_crate.value> -1) {
00284 Sct_SctApi.SctApiDDCServer apiDDC = SystemInterface.getInstance().getSctApiDDCServer();
00285 if (apiDDC!=null) {
00286 apiDDC.ddcHardResetAll(ps_crate.value);
00287 } else {
00288 JOptionPane.showMessageDialog(null, "ProbeView was unable to get hold of a valid SctApiDDCServer and as a result was unable to perform a ddcHardResetAll on ps.crate "+Integer.toString(ps_crate.value)+". Is the SctApiDDCServer running as required?");
00289 };
00290 }
00291 } else {
00292 JOptionPane.showMessageDialog(null, "ProbeView was unable to get hold of a valid SctApiDDCServer and as a result was unable to perform a ddcHardResetAll on ps.crate as the config server could not be contacted.");
00293 };
00294
00295 }
00296
00297 private void loopbackTestPerformActionPerformed(java.awt.event.ActionEvent evt) {
00298
00299 Sct_SctApi.Scan probeScan = api.createScan();
00300 probeScan.getTrigger1().doubleL1A((short)10);
00301 probeScan.configure((short)20, 0.0, 24.0, 1.0);
00302
00303 try {
00304 scanResults = api.probeScanHarnessWithTrigger(getPartition(), getCrate(), getRod(), probeScan,
00305 Integer.parseInt(harnessValue.getText()));
00306
00307 } catch(NumberFormatException e) {
00308 javax.swing.JOptionPane.showMessageDialog(null, "Failed to interpet harness value");
00309 }
00310 }
00311
00312 private void checkProbePerformedActionPerformed(java.awt.event.ActionEvent evt) {
00313 try {
00314 if(api.checkAllModulesProbe(checkCharsText.getText())) {
00315 JOptionPane.showMessageDialog(null, "Check modules succeeded");
00316 } else {
00317 JOptionPane.showMessageDialog(null, "Check modules failed, see MRS for details");
00318 }
00319 } catch(Sct_SctApi.SctApiException s) {
00320 JOptionPane.showMessageDialog(null, "Check modules aborted: " + s);
00321 }
00322 }
00323
00324 private void performScanActionPerformed(java.awt.event.ActionEvent evt) {
00325
00326 Sct_SctApi.Scan probeScan = api.createScan();
00327 probeScan.getTrigger1().doubleL1A((short)10);
00328 probeScan.configure((short)20, 0.0, 24.0, 1.0);
00329
00330 try {
00331 scanResults = api.probeScanHarnessWithTrigger(getPartition(), getCrate(), getRod(), probeScan,
00332 Integer.parseInt(harnessValue.getText()));
00333 updateScanResults();
00334 } catch(NumberFormatException e) {
00335 javax.swing.JOptionPane.showMessageDialog(null, "Failed to interpet harness value");
00336 }
00337 }
00338
00339 private void probeButtonPerformed(java.awt.event.ActionEvent evt) {
00340 int partition = getPartition();
00341 int crate = getCrate();
00342 int rod = getRod();
00343 int harness;
00344 try {
00345 harness = Integer.parseInt(harnessValue.getText());
00346 } catch(NumberFormatException e) {
00347 harness = -1;
00348 }
00349
00350 if(harness == -1) {
00351 results = api.probe(partition, crate, rod);
00352 } else {
00353 results = api.probeHarness(partition, crate, rod, harness);
00354 }
00355
00356 updateResultsPanel();
00357 }
00358
00359
00360 private void closeButtonPerformed(java.awt.event.ActionEvent evt) {
00361 ((Window)getTopLevelAncestor()).dispose();
00362 }
00363
00364 void updateResultsPanel() {
00365 resultsPanel.removeAll();
00366 for(int i=0; i<results.length; i++) {
00367 resultsPanel.add(new JLabel("" + (char)results[i] + " "));
00368 }
00369
00370 resultsPanel.invalidate();
00371 validate();
00372 }
00373
00374 TableModel getScanResultsTableModel() {
00375 return tableModel;
00376 }
00377
00378 void updateScanResults() {
00379 tableModel.newData();
00380 }
00381
00382 public int getPartition() {
00383 return partition;
00384 }
00385
00386 public int getCrate() {
00387 return crate;
00388 }
00389
00390 public int getRod() {
00391 return rod;
00392 }
00393
00394 class ResultsTableModel extends javax.swing.table.AbstractTableModel {
00395 public ResultsTableModel() {
00396 }
00397
00398 public void newData() {
00399 fireTableStructureChanged();
00400 }
00401
00402 public int getColumnCount() {
00403 return 1+scanResults.length;
00404 }
00405
00406 public int getRowCount() {
00407 if(scanResults.length > 0) {
00408 return scanResults[0].length;
00409 } else {
00410 return 0;
00411 }
00412 }
00413
00414 public Object getValueAt(int rowIndex, int columnIndex) {
00415 if(columnIndex == 0) {
00416 return "Link " + rowIndex;
00417 } else {
00418 return "" + (char)scanResults[columnIndex-1][rowIndex];
00419 }
00420 }
00421
00422 public String getColumnName(int columnIndex) {
00423 String retValue;
00424
00425 if(columnIndex == 0) {
00426 retValue = "";
00427 } else {
00428 columnIndex--;
00429 retValue = "" + columnIndex;
00430 }
00431
00432 return retValue;
00433 }
00434 }
00435
00436 class LoopbackResultsTableModel extends ResultsTableModel {
00437 public String getColumnName(int columnIndex) {
00438 if(columnIndex == 25) {
00439 return "Pass/Fail";
00440 } else {
00441 return ((ResultsTableModel)this).getColumnName(columnIndex);
00442 }
00443 }
00444
00445 public Object getValueAt(int rowIndex, int columnIndex) {
00446 if(columnIndex == 25) {
00447 for(int clk=0; clk<24; clk++) {
00448 int i = (char)scanResults[clk][rowIndex];
00449 }
00450
00451 return "Unimplemented";
00452 } else {
00453 return ((ResultsTableModel)this).getValueAt(rowIndex, columnIndex);
00454 }
00455 }
00456
00457 }
00458
00459
00460 private javax.swing.JTextField checkCharsText;
00461 private javax.swing.JButton checkProbePerformed;
00462 private javax.swing.JTextField harnessValue;
00463 private javax.swing.JButton jButton1;
00464 private javax.swing.JButton jButton2;
00465 private javax.swing.JButton jButton4;
00466 private javax.swing.JComboBox jComboBox1;
00467 private javax.swing.JComboBox jComboBox2;
00468 private javax.swing.JComboBox jComboBox3;
00469 private javax.swing.JLabel jLabel1;
00470 private javax.swing.JLabel jLabel2;
00471 private javax.swing.JLabel jLabel3;
00472 private javax.swing.JLabel jLabel4;
00473 private javax.swing.JLabel jLabel5;
00474 private javax.swing.JLabel jLabel6;
00475 private javax.swing.JLabel jLabel7;
00476 private javax.swing.JPanel jPanel1;
00477 private javax.swing.JPanel jPanel2;
00478 private javax.swing.JPanel jPanel3;
00479 private javax.swing.JPanel jPanel4;
00480 private javax.swing.JPanel jPanel5;
00481 private javax.swing.JPanel jPanel6;
00482 private javax.swing.JPanel jPanel7;
00483 private javax.swing.JPanel jPanel8;
00484 private javax.swing.JScrollPane jScrollPane1;
00485 private javax.swing.JScrollPane jScrollPane2;
00486 private javax.swing.JTabbedPane jTabbedPane1;
00487 private javax.swing.JTable jTable1;
00488 private javax.swing.JTable jTable2;
00489 private javax.swing.JTextField jTextField2;
00490 private javax.swing.JTextField jTextField3;
00491 private javax.swing.JTextField jTextField4;
00492 private javax.swing.JButton loopbackTestPerform;
00493 private javax.swing.JButton performHardReset;
00494 private javax.swing.JPanel resultsPanel;
00495
00496 }