00001
00002
00003
00004
00005
00006
00007 package GuiComponents.SctApi;
00008
00009 import java.awt.Window;
00010
00011 import javax.swing.DefaultComboBoxModel;
00012 import javax.swing.JFrame;
00013 import javax.swing.JOptionPane;
00014 import javax.swing.JPanel;
00015 import javax.swing.table.TableModel;
00016 import javax.swing.table.TableColumn;
00017 import javax.swing.table.TableColumn;
00018 import javax.swing.table.JTableHeader;
00019
00020 import Sct_SctApi.SctApiIPC;
00021
00022 import Sct.SerializableWrapper;
00023 import SctData.ModuleConfiguration;
00024
00030 public class ModuleConfigurations extends JPanel implements java.io.Serializable {
00031 BlockTableModel bTableModel;
00032
00033 int partition;
00034 int crate;
00035 int rod;
00036 Sct_SctApi.SctApiIPC api;
00037
00039 public ModuleConfigurations() {
00040 initComponents();
00041 modifyComponents();
00042 }
00043
00045 public ModuleConfigurations(int p, int c, int r, Sct_SctApi.SctApiIPC a) {
00046 partition = p;
00047 crate = c;
00048 rod = r;
00049 api = a;
00050
00051 initComponents();
00052 modifyComponents();
00053 }
00054
00055 public static void main(String [] args) {
00056 javax.swing.JFrame f = new javax.swing.JFrame("ROD Diag test");
00057
00058 ModuleConfigurations conf = new ModuleConfigurations();
00059
00060 f.getContentPane().add(conf);
00061 f.pack();
00062 f.setVisible(true);
00063
00064 sctConf.ABCDConfig bConfig = new sctConf.ABCDConfig((short)0);
00065
00066 short sz = (short)0;
00067 byte bz = (byte)0;
00068
00069 int mask[] = {0, 0xffff, 0xffffffff, 3};
00070 sctConf.ABCDBasic basic = new sctConf.ABCDBasic(bConfig, sz, bz, bz, bz, bz, bz, mask);
00071
00072 float rc[] = {0.0f, 0.0f, 0.0f};
00073 int dummy[] = {0, 0};
00074 sctConf.ABCDCaldata data = new sctConf.ABCDCaldata(bz, rc, 1.0f, dummy);
00075
00076 byte trims[] = {0};
00077 sctConf.ABCDChip chip = new sctConf.ABCDChip(bz, bz, bz, bz, basic, data, trims);
00078 byte rxs[] = {2, 3};
00079 byte bdummy[] = {0, 0};
00080 sctConf.ABCDModule newConfig = new sctConf.ABCDModule(null, bz, bz, bz, bz, 0, bz, bz, rxs, bdummy, dummy);
00081 newConfig.chip = new sctConf.ABCDChip[12];
00082 for(int i=0; i<12; i++) {
00083 newConfig.chip[i] = chip;
00084 }
00085
00086 if(newConfig != null) {
00087 conf.inspectorPanel1.setData(new SerializableWrapper(new ModuleConfiguration(newConfig), "no serial number", "ModuleConfiguration"));
00088 }
00089 }
00090
00091
00092 void modifyComponents() {
00093 }
00094
00100 private void initComponents() {
00101 java.awt.GridBagConstraints gridBagConstraints;
00102
00103 jPanel2 = new javax.swing.JPanel();
00104 jLabel3 = new javax.swing.JLabel();
00105 jTextField2 = new javax.swing.JTextField();
00106 jLabel4 = new javax.swing.JLabel();
00107 jTextField3 = new javax.swing.JTextField();
00108 jLabel5 = new javax.swing.JLabel();
00109 jTextField4 = new javax.swing.JTextField();
00110 jLabel7 = new javax.swing.JLabel();
00111 jTextField6 = new javax.swing.JTextField();
00112 jPanel3 = new javax.swing.JPanel();
00113 jPanel4 = new javax.swing.JPanel();
00114 jLabel2 = new javax.swing.JLabel();
00115 slotText = new javax.swing.JTextField();
00116 jLabel8 = new javax.swing.JLabel();
00117 bankCombo = new javax.swing.JComboBox();
00118 jButton5 = new javax.swing.JButton();
00119 jPanel5 = new javax.swing.JPanel();
00120 jLabel11 = new javax.swing.JLabel();
00121 currBankLabel = new javax.swing.JLabel();
00122 jLabel12 = new javax.swing.JLabel();
00123 currSlotLabel = new javax.swing.JLabel();
00124 inspectorPanel1 = new GuiComponents.Inspector.InspectorPanel();
00125 jPanel1 = new javax.swing.JPanel();
00126 jLabel1 = new javax.swing.JLabel();
00127 varTypeCombo = new javax.swing.JComboBox();
00128 varValueText = new javax.swing.JTextField();
00129 changeButton = new javax.swing.JButton();
00130
00131 setLayout(new java.awt.BorderLayout());
00132
00133 jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.X_AXIS));
00134
00135 jLabel3.setText("Partition");
00136 jPanel2.add(jLabel3);
00137
00138 jTextField2.setEditable(false);
00139 jTextField2.setText(new Integer(getPartition()).toString());
00140 jPanel2.add(jTextField2);
00141
00142 jLabel4.setText("Crate");
00143 jPanel2.add(jLabel4);
00144
00145 jTextField3.setEditable(false);
00146 jTextField3.setText(new Integer(getCrate()).toString());
00147 jPanel2.add(jTextField3);
00148
00149 jLabel5.setText("ROD");
00150 jPanel2.add(jLabel5);
00151
00152 jTextField4.setEditable(false);
00153 jTextField4.setText(new Integer(getROD()).toString());
00154 jPanel2.add(jTextField4);
00155
00156 jLabel7.setText("Slot");
00157 jPanel2.add(jLabel7);
00158
00159 jTextField6.setEditable(false);
00160 jTextField6.setText(getRODSlot());
00161 jPanel2.add(jTextField6);
00162
00163 add(jPanel2, java.awt.BorderLayout.NORTH);
00164
00165 jPanel3.setLayout(new java.awt.GridBagLayout());
00166
00167 jPanel4.setLayout(new java.awt.GridBagLayout());
00168
00169 jLabel2.setText("Module Slot");
00170 gridBagConstraints = new java.awt.GridBagConstraints();
00171 gridBagConstraints.gridy = 0;
00172 jPanel4.add(jLabel2, gridBagConstraints);
00173
00174 slotText.setText("0");
00175 gridBagConstraints = new java.awt.GridBagConstraints();
00176 gridBagConstraints.gridy = 0;
00177 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00178 gridBagConstraints.weightx = 0.1;
00179 jPanel4.add(slotText, gridBagConstraints);
00180
00181 jLabel8.setText("Module bank");
00182 gridBagConstraints = new java.awt.GridBagConstraints();
00183 gridBagConstraints.gridy = 1;
00184 jPanel4.add(jLabel8, gridBagConstraints);
00185
00186 bankCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Physics", "Calibration", "Scan", "SctApi", "Configuration" }));
00187 gridBagConstraints = new java.awt.GridBagConstraints();
00188 gridBagConstraints.gridy = 1;
00189 gridBagConstraints.weightx = 0.1;
00190 jPanel4.add(bankCombo, gridBagConstraints);
00191
00192 jButton5.setText("Get Module Configuration");
00193 jButton5.setEnabled(isRODValid());
00194 jButton5.addActionListener(new java.awt.event.ActionListener() {
00195 public void actionPerformed(java.awt.event.ActionEvent evt) {
00196 getModuleConfigurationActionPerformed(evt);
00197 }
00198 });
00199
00200 gridBagConstraints = new java.awt.GridBagConstraints();
00201 gridBagConstraints.gridy = 1;
00202 gridBagConstraints.gridwidth = 2;
00203 jPanel4.add(jButton5, gridBagConstraints);
00204
00205 gridBagConstraints = new java.awt.GridBagConstraints();
00206 gridBagConstraints.gridy = 0;
00207 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00208 gridBagConstraints.weightx = 1.0;
00209 jPanel3.add(jPanel4, gridBagConstraints);
00210
00211 jLabel11.setText("Bank");
00212 jPanel5.add(jLabel11);
00213
00214 currBankLabel.setText("-");
00215 jPanel5.add(currBankLabel);
00216
00217 jLabel12.setText("Slot");
00218 jPanel5.add(jLabel12);
00219
00220 currSlotLabel.setText("0");
00221 jPanel5.add(currSlotLabel);
00222
00223 gridBagConstraints = new java.awt.GridBagConstraints();
00224 gridBagConstraints.gridy = 1;
00225 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00226 gridBagConstraints.weightx = 1.0;
00227 jPanel3.add(jPanel5, gridBagConstraints);
00228
00229 inspectorPanel1.setMinimumSize(new java.awt.Dimension(50, 40));
00230 gridBagConstraints = new java.awt.GridBagConstraints();
00231 gridBagConstraints.gridy = 2;
00232 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00233 gridBagConstraints.weightx = 1.0;
00234 gridBagConstraints.weighty = 0.1;
00235 jPanel3.add(inspectorPanel1, gridBagConstraints);
00236
00237 add(jPanel3, java.awt.BorderLayout.CENTER);
00238
00239 jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS));
00240
00241 jPanel1.setOpaque(false);
00242 jLabel1.setText("Modify variable");
00243 jPanel1.add(jLabel1);
00244
00245 varTypeCombo.setModel(new DefaultComboBoxModel(getScanDescriptorsList()));
00246 jPanel1.add(varTypeCombo);
00247
00248 varValueText.setText("0");
00249 jPanel1.add(varValueText);
00250
00251 changeButton.setText("Change");
00252 changeButton.addActionListener(new java.awt.event.ActionListener() {
00253 public void actionPerformed(java.awt.event.ActionEvent evt) {
00254 changeModuleConfigurationPerformed(evt);
00255 }
00256 });
00257
00258 jPanel1.add(changeButton);
00259
00260 add(jPanel1, java.awt.BorderLayout.SOUTH);
00261
00262 }
00263
00264 private void getModuleConfigurationActionPerformed(java.awt.event.ActionEvent evt) {
00265 getModuleConfiguration();
00266 }
00267
00268 private void getModuleConfiguration() {
00269 int slot = Long.decode(slotText.getText()).intValue();
00270 String bank = (String)bankCombo.getSelectedItem();
00271 sctConf.ABCDModule newConfig = null;
00272 if(bank.equals("SctApi")) {
00273 newConfig = api.retrieveModule(api.findModuleRod(getPartition(), getCrate(), getROD(), slot));
00274 } else if(bank.equals("Configuration")) {
00275 JOptionPane.showMessageDialog(null, "Unimplemented bank type");
00276 return;
00277 } else {
00278 Sct_SctApi.BankType realBank;
00279 if(bank.equals("Physics")) {
00280 realBank = Sct_SctApi.BankType.PHYSICS_CONFIG;
00281 } else if(bank.equals("Calibration")) {
00282 realBank = Sct_SctApi.BankType.CALIBRATION_CONFIG;
00283 } else if(bank.equals("Scan")) {
00284 realBank = Sct_SctApi.BankType.SCAN_CONFIG;
00285 } else {
00286 JOptionPane.showMessageDialog(null, "Unknown bank type");
00287 return;
00288 }
00289
00290 try {
00291 newConfig = api.getCrateLegacy(getPartition(), getCrate()).getABCDModuleRaw(getROD(), slot, realBank);
00292 } catch(Sct_SctApi.SctApiException e) {
00293 JOptionPane.showMessageDialog(null, "Exception thrown by API: " + e.detail);
00294 }
00295 }
00296
00297 if(newConfig != null) {
00298
00299 inspectorPanel1.setData(new SerializableWrapper(new ModuleConfiguration(newConfig), "no serial number", "ModuleConfiguration"));
00300
00301
00302 currBankLabel.setText(bank);
00303 currSlotLabel.setText("" + slot);
00304 }
00305 }
00306
00307 private void changeModuleConfigurationPerformed(java.awt.event.ActionEvent evt) {
00308 int slot = Long.decode(slotText.getText()).intValue();
00309 String bank = (String)bankCombo.getSelectedItem();
00310 short type = (short)Sct.ScanDescriptors.getInstance().valueFor((String)varTypeCombo.getSelectedItem());
00311 float value = Float.parseFloat(varValueText.getText());
00312
00313 if(bank.equals("SctApi")) {
00314 api.modifyABCDModuleVar(api.findModuleRod(getPartition(), getCrate(), getROD(), slot),
00315 type, value);
00316 getModuleConfiguration();
00317 } else if(bank.equals("Configuration")) {
00318 JOptionPane.showMessageDialog(null, "Unimplemented bank type");
00319 return;
00320 } else {
00321 Sct_SctApi.BankType realBank;
00322 if(bank.equals("Physics")) {
00323 realBank = Sct_SctApi.BankType.PHYSICS_CONFIG;
00324 } else if(bank.equals("Calibration")) {
00325 realBank = Sct_SctApi.BankType.CALIBRATION_CONFIG;
00326 } else if(bank.equals("Scan")) {
00327 realBank = Sct_SctApi.BankType.SCAN_CONFIG;
00328 } else {
00329 JOptionPane.showMessageDialog(null, "Unknown bank type");
00330 return;
00331 }
00332 Sct_SctApi.BankType[] banks=new Sct_SctApi.BankType[1];
00333 banks[0]=realBank;
00334 api.modifyABCDModuleVarROD(api.findModuleRod(getPartition(), getCrate(), getROD(), slot),
00335 type, value, banks);
00336 getModuleConfiguration();
00337 }
00338 }
00339
00340 public String[] getScanDescriptorsList() {
00341 return Sct.ScanDescriptors.getInstance().listDescriptors();
00342 }
00343
00344 public TableModel getBlockTableModel() {
00345 if(bTableModel == null) {
00346 int [] nullBlock = {};
00347
00348 bTableModel = new ModuleConfigurations.BlockTableModel(nullBlock);
00349 }
00350
00351 return bTableModel;
00352 }
00353
00354 public int getPartition() {
00355 return partition;
00356 }
00357
00358 public int getCrate() {
00359 return crate;
00360 }
00361
00362 public int getROD() {
00363 return rod;
00364 }
00365
00366 public String getRODSlot() {
00367 try {
00368 long rodSlot = api.getRodSlot(partition, crate, rod);
00369 return "" + rodSlot;
00370 } catch(NullPointerException n) {
00371 return "No API";
00372 }
00373 }
00374
00375 public boolean isRODValid() {
00376 if(api == null) {
00377 if(getTopLevelAncestor() == null) {
00378
00379 return false;
00380 } else {
00381 ((Window)getTopLevelAncestor()).dispose();
00382 return false;
00383 }
00384 } else {
00385 return api.isRODPresent(partition, crate, rod);
00386 }
00387 }
00388
00393 public void setPartition(int partition) { this.partition = partition; }
00394
00395 public class BlockTableModel extends javax.swing.table.AbstractTableModel {
00396 int [] blockArray;
00397
00398 public BlockTableModel(int [] block) {
00399 blockArray = block;
00400 }
00401
00402 public void newData(int [] block) {
00403 blockArray = block;
00404 fireTableDataChanged();
00405 }
00406
00407 public int getColumnCount() {
00408
00409 return 16+2;
00410 }
00411
00412 public int getRowCount() {
00413 return (blockArray.length+7) / 8;
00414 }
00415
00416 public Object getValueAt(int rowIndex, int columnIndex) {
00417
00418
00419
00420 if(columnIndex == 0) {
00421 return Integer.toHexString(rowIndex*32);
00422 } else if(columnIndex == 17) {
00423 StringBuffer buff = new StringBuffer();
00424
00425 int offset = rowIndex*8;
00426
00427 for(int i=0; i<8; i++) {
00428 if(offset + i >= blockArray.length) {
00429 break;
00430 }
00431
00432 for(int j=0; j<4; j++) {
00433 int ascii = (blockArray[offset + i] >> (8*j)) & 0xff;
00434 if(ascii >= 32 && ascii < 128) {
00435 buff.append((char)ascii);
00436 } else {
00437 buff.append(".");
00438 }
00439 }
00440
00441 buff.append(" ");
00442 }
00443 return buff.toString();
00444 } else {
00445 columnIndex --;
00446 if((columnIndex/2) + rowIndex*8 >= blockArray.length) {
00447 return null;
00448 } else {
00449 int value = blockArray[(columnIndex/2) + rowIndex*8];
00450 String hexString = Integer.toHexString(value);
00451 if(columnIndex % 2 == 0) {
00452 if(hexString.length() > 4) {
00453 hexString = hexString.substring(0, hexString.length()-4);
00454 } else {
00455 hexString = "0000";
00456 }
00457 } else {
00458 if(hexString.length() > 4) {
00459 hexString = hexString.substring(hexString.length()-4);
00460 } else {
00461
00462 }
00463 }
00464 return "0000".substring(0, 4-hexString.length()) + hexString;
00465 }
00466 }
00467 }
00468
00469 public String getColumnName(int columnIndex) {
00470 String retValue;
00471
00472 if(columnIndex == 0) {
00473 retValue = "";
00474 } else if(columnIndex == 17) {
00475 retValue = "ASCII";
00476 } else {
00477 columnIndex--;
00478 retValue = Integer.toHexString((columnIndex * 2));
00479 }
00480
00481 return retValue;
00482 }
00483 }
00484
00485
00486 private javax.swing.JComboBox bankCombo;
00487 private javax.swing.JButton changeButton;
00488 private javax.swing.JLabel currBankLabel;
00489 private javax.swing.JLabel currSlotLabel;
00490 private GuiComponents.Inspector.InspectorPanel inspectorPanel1;
00491 private javax.swing.JButton jButton5;
00492 private javax.swing.JLabel jLabel1;
00493 private javax.swing.JLabel jLabel11;
00494 private javax.swing.JLabel jLabel12;
00495 private javax.swing.JLabel jLabel2;
00496 private javax.swing.JLabel jLabel3;
00497 private javax.swing.JLabel jLabel4;
00498 private javax.swing.JLabel jLabel5;
00499 private javax.swing.JLabel jLabel7;
00500 private javax.swing.JLabel jLabel8;
00501 private javax.swing.JPanel jPanel1;
00502 private javax.swing.JPanel jPanel2;
00503 private javax.swing.JPanel jPanel3;
00504 private javax.swing.JPanel jPanel4;
00505 private javax.swing.JPanel jPanel5;
00506 private javax.swing.JTextField jTextField2;
00507 private javax.swing.JTextField jTextField3;
00508 private javax.swing.JTextField jTextField4;
00509 private javax.swing.JTextField jTextField6;
00510 private javax.swing.JTextField slotText;
00511 private javax.swing.JComboBox varTypeCombo;
00512 private javax.swing.JTextField varValueText;
00513
00514
00515 }