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