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
00019 public javax.swing.JMenuItem bookkeepingEnabledItem, runPromptEnabledItem, testPromptEnabledItem;
00020 boolean bookkeepingEnabled = false,runPromptEnabled = false, testPromptEnabled=false;
00021
00022
00023 SortedMap testMap;
00024 BookKeeperPrompt prompt = null;
00025
00026 PreferencesInterface prefs;
00027
00028 private BookKeeper() {
00029
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
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
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