BookKeeper.java

00001 
00005 package DisplayGUI;
00006 import Preferences.*;
00007 import javax.swing.JCheckBox;
00008 import Sct_CalibrationController.TestData;
00009 import is.*;
00010 import Sct.Serializable;
00011 import Sct.IS.*;
00012 import java.io.*;
00013 import java.util.*;
00014 
00015 public class BookKeeper implements displayParams, SCTInfo {
00016     private static BookKeeper instance = new BookKeeper();
00017     java.io.File topLevel;
00018 //    public JCheckBox bookkeepingEnabled = new JCheckBox("Enable Book-keeping");
00019     public javax.swing.JMenuItem bookkeepingEnabledItem, runPromptEnabledItem, testPromptEnabledItem;
00020     boolean bookkeepingEnabled = false,runPromptEnabled = false, testPromptEnabled=false;
00021     //public JCheckBox runPromptEnabled = new JCheckBox("Prompt for comments on new Run");
00022     //public JCheckBox testPromptEnabled = new JCheckBox("Prompt for comments on new Test");
00023     SortedMap testMap;
00024     BookKeeperPrompt prompt = null;
00025 
00026     PreferencesInterface prefs;
00027 
00028     private BookKeeper() {
00029  //       bookkeepingEnabled.setEnabled(true);
00030         Refresh();
00031         testMap = new TreeMap();
00032         }
00033 
00034     public static BookKeeper getInstance() {
00035         return instance;
00036     }
00037 
00038 
00039 
00040     public void Refresh() {
00041         prefs = PreferencesInterface.getInstance();
00042 
00043  //       bookkeepingEnabled.setSelected(prefs.getPreference(PreferencesInterface.BOOKKEEPING).equals("TRUE"));
00044       bookkeepingEnabledItem = new javax.swing.JMenuItem();
00045         bookkeepingEnabledItem.setFont(menuFont);
00046         runPromptEnabledItem = new javax.swing.JMenuItem();
00047         runPromptEnabledItem.setFont(menuFont);
00048         testPromptEnabledItem = new javax.swing.JMenuItem();
00049         testPromptEnabledItem.setFont(menuFont);
00050         bookkeepingEnabled = prefs.getPreference(PreferencesInterface.BOOKKEEPING).equals("TRUE");
00051         runPromptEnabled = prefs.getPreference(PreferencesInterface.RUN_PROMPT).equals("TRUE");
00052         testPromptEnabled = prefs.getPreference(PreferencesInterface.TEST_PROMPT).equals("TRUE");
00053         setMenuItems();
00054 
00055         bookkeepingEnabledItem.addActionListener(new java.awt.event.ActionListener() {
00056                  public void actionPerformed(java.awt.event.ActionEvent evt) {
00057                     bookkeepingEnabled = !bookkeepingEnabled;
00058                           setMenuItems();
00059                     PreferencesInterface.getInstance().setPreference(PreferencesInterface.BOOKKEEPING,bookkeepingEnabled ? "TRUE" : "FALSE");
00060                     runPromptEnabledItem.setEnabled(bookkeepingEnabled);
00061                     testPromptEnabledItem.setEnabled(bookkeepingEnabled);
00062                  }
00063              });
00064         runPromptEnabledItem.addActionListener(new java.awt.event.ActionListener() {
00065                  public void actionPerformed(java.awt.event.ActionEvent evt) {
00066                     runPromptEnabled = !runPromptEnabled;
00067                           setMenuItems();
00068                     PreferencesInterface.getInstance().setPreference(PreferencesInterface.RUN_PROMPT,runPromptEnabled ? "TRUE" : "FALSE");
00069                  }
00070              });
00071         testPromptEnabledItem.addActionListener(new java.awt.event.ActionListener() {
00072                  public void actionPerformed(java.awt.event.ActionEvent evt) {
00073                     testPromptEnabled = !testPromptEnabled;
00074                           setMenuItems();
00075                     PreferencesInterface.getInstance().setPreference(PreferencesInterface.TEST_PROMPT,testPromptEnabled ? "TRUE" : "FALSE");
00076                  }
00077              });
00078          }
00079 
00080      private void setMenuItems() {
00081       bookkeepingEnabledItem.setText(bookkeepingEnabled ? "Disable BookKeeping (currently enabled)" : "Enable Bookkeeping (currently disabled)");
00082         runPromptEnabledItem.setText(runPromptEnabled ? "Disable prompt at run start (currently enabled)" : "Enable prompt at run start (currently disabled)");
00083         testPromptEnabledItem.setText(testPromptEnabled ? "Disable prompt for new tests (currently enabled)" : "Enable prompt for new tests (currently disabled)");
00084         }
00085      public boolean directoriesOK() {
00086 
00087         if(prefs.getPreference(PreferencesInterface.WEB_LOOKUP_DIR).equals(PreferencesInterface.unDefinedString)) {
00088            System.err.println("SctGUI::BookKeeper - ERROR - Bookkeeping directory is not defined in your Preferences!");
00089            return false;
00090            }
00091         java.io.File dir = new java.io.File(prefs.getPreference(PreferencesInterface.WEB_LOOKUP_DIR));
00092         if(!dir.exists()) {
00093            System.err.println("SctGUI::BookKeeper - ERROR - The bookkeeping directory defined in your Preferences does not exist!");
00094            return false;
00095            }
00096         topLevel = new java.io.File(dir,"bookkeeping");
00097         if(!topLevel.exists()) {
00098            if(!topLevel.mkdir()) {
00099                 javax.swing.JOptionPane.showMessageDialog(null,"Failed to write to bookkeeping directory.\nAre you sure that you have write access?");
00100                 topLevel=null;
00101                 return false;
00102                 }
00103            }
00104          return true;
00105         }
00106 
00107 
00108 
00109     public void addTest(String objectName) {
00110 
00111         if(!bookkeepingEnabled) return;
00112 
00113         if(!directoriesOK()) return;
00114 
00115         boolean testPrompt=true;
00116 
00117          try {
00118            TestData testData = new TestData(); 
00119            GuiComponents.System.ISInterface.getInstance().getRepository().getValue(objectName, testData); 
00120            String runNo = Integer.toString(testData.runNumber);
00121 
00122            java.io.File runDir = new java.io.File(topLevel,"RUN"+guiUtilities.DaveUtils.padString(runNo,6,'0'));
00123            if(!runDir.exists()) {
00124               testMap = new TreeMap();
00125               if(!runDir.mkdir()) {
00126                 System.err.println("SctGUI::BookKeeper - ERROR - Failed to create run directory");
00127                 return;
00128                 }
00129               if(runPromptEnabled) {
00130                 testPrompt=false;
00131                 File runFile = new File(runDir,"comments.txt");               
00132                 if(prompt==null) prompt = new BookKeeperPrompt();
00133                 prompt.showPrompt(runFile,runNo,null,null);
00134                 }
00135               }
00136 // write test file
00137             Integer scanNo = new Integer(testData.startScanNumber);
00138             if(!testMap.containsKey(scanNo) && testPromptEnabled && testPrompt) {
00139                 File testFile = new File(runDir,"TEST"+guiUtilities.DaveUtils.padString(scanNo.toString(),6,'0')+".txt");
00140                 if(prompt==null) prompt = new BookKeeperPrompt();
00141                 prompt.showPrompt(testFile,runNo,scanNo.toString(),testData.testName);
00142                }
00143             testMap.put(scanNo,getTestString(testData));
00144             writeTestFile(runNo,Integer.toString(testData.startScanNumber));
00145 
00146           }catch(Exception e) {
00147               System.err.println("SctGUI::BookKeeper - Cant access "+objectName+" - "+e.toString());
00148               }
00149           }
00150 
00151     public void showCommentPrompt(int run, int scan, String testName) {
00152 
00153         if(!directoriesOK()) return;
00154 
00155         String runNo = Integer.toString(run);
00156         String scanNo = (testName!=null) ? Integer.toString(scan) : null;
00157 
00158         File runDir = new File(topLevel,"RUN"+guiUtilities.DaveUtils.padString(runNo,6,'0'));
00159         File cFile = (scanNo==null) ? new File(runDir,"comments.txt") : new File(runDir,"TEST"+guiUtilities.DaveUtils.padString(scanNo,6,'0')+".txt");
00160         if(prompt==null) prompt = new BookKeeperPrompt();
00161         prompt.showPrompt(cFile,runNo,scanNo,testName);
00162         }
00163 
00164     public String getTestString(TestData testData) {
00165         StringBuffer s = new StringBuffer();
00166         s.append("RUN="+Integer.toString(testData.runNumber));
00167         s.append(";NAME="+testData.testName);
00168         s.append(";START="+Integer.toString(testData.startScanNumber));
00169         s.append(";NSCANS="+Integer.toString(testData.nScans));
00170         s.append(";DATE="+guiUtilities.DaveUtils.getTodaysDate());
00171         s.append(";STIME="+testData.startTime);
00172         s.append(";ETIME="+testData.endTime);
00173         s.append(";STATUS="+Integer.toString(testData.status));
00174         s.append(";NMODULES="+Integer.toString(testData.modules.length));
00175         return s.toString();
00176         }
00177 
00178     public void writeTestFile(String runNo, String scanNo) {
00179        try {
00180         File runDir = new File(topLevel,"RUN"+guiUtilities.DaveUtils.padString(runNo,6,'0'));
00181         File testIndex = new File(runDir,"index.txt");
00182         BufferedWriter out = new BufferedWriter(new FileWriter(testIndex));
00183 
00184         for (Iterator i=testMap.entrySet().iterator(); i.hasNext(); ) {
00185             Map.Entry e = (Map.Entry) i.next();
00186             out.write((String)e.getValue());
00187             out.newLine();
00188             }
00189         out.close();
00190         }catch(Exception e) {
00191            System.err.println("SctGUI::BookKeeper - FAILed to update test file - "+e.toString());
00192            }
00193         }
00194 
00195         
00196 
00197 }
00198          

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