ModuleConfigurations.java

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

Generated on Mon Feb 6 14:12:14 2006 for SCT DAQ/DCS Software - Java by  doxygen 1.4.6