1 21 22 package org.armedbear.j.jdb; 23 24 import java.io.BufferedWriter ; 25 import java.io.EOFException ; 26 import java.io.IOException ; 27 import java.io.OutputStream ; 28 import java.io.OutputStreamWriter ; 29 import java.util.ArrayList ; 30 import java.util.Enumeration ; 31 import java.util.Iterator ; 32 import java.util.List ; 33 import java.util.Properties ; 34 import org.armedbear.j.Directories; 35 import org.armedbear.j.Editor; 36 import org.armedbear.j.File; 37 import org.armedbear.j.Log; 38 import org.armedbear.j.Utilities; 39 import org.xml.sax.Attributes ; 40 import org.xml.sax.ContentHandler ; 41 import org.xml.sax.InputSource ; 42 import org.xml.sax.SAXException ; 43 import org.xml.sax.XMLReader ; 44 import org.xml.sax.helpers.DefaultHandler ; 45 46 public final class JdbSession extends Properties 47 { 48 private List breakpointSpecifications; 49 private List breakpoints; 50 51 public JdbSession() 52 { 53 } 54 55 public String getName() 56 { 57 return getProperty("name", ""); 58 } 59 60 private static File jdbDir; 61 62 private static File getSettingsDirectory() 63 { 64 if (jdbDir == null) { 65 jdbDir = File.getInstance(Directories.getEditorDirectory(), "jdb"); 66 if (!jdbDir.isDirectory()) 67 jdbDir.mkdirs(); 68 } 69 return jdbDir; 70 } 71 72 private static File sessionDir; 73 74 private File getDefaultSessionFile() 75 { 76 return File.getInstance(getSettingsDirectory(), "defaults.xml"); 77 } 78 79 public static String [] getSessionNames() 80 { 81 return sessionDir.list(); 82 } 83 84 public static void deleteSession(String name) 85 { 86 File file = File.getInstance(sessionDir, name); 87 if (file.isFile()) 88 file.delete(); 89 } 90 91 public String getMainClass() 92 { 93 return getProperty("mainClass", ""); 94 } 95 96 public void setMainClass(String s) 97 { 98 put("mainClass", s); 99 } 100 101 public String getMainClassArgs() 102 { 103 return getProperty("mainClassArgs", ""); 104 } 105 106 public void setMainClassArgs(String s) 107 { 108 put("mainClassArgs", s); 109 } 110 111 public String getClassPath() 112 { 113 return getProperty("classPath", ""); 114 } 115 116 public void setClassPath(String s) 117 { 118 put("classPath", s); 119 } 120 121 public String getJavaHome() 122 { 123 return getProperty("javaHome", ""); 124 } 125 126 public void setJavaHome(String s) 127 { 128 put("javaHome", s); 129 } 130 131 public String getJavaExecutable() 132 { 133 return getProperty("javaExecutable", ""); 134 } 135 136 public void setJavaExecutable(String s) 137 { 138 put("javaExecutable", s); 139 } 140 141 public String getVMArgs() 142 { 143 return getProperty("vmArgs", ""); 144 } 145 146 public void setVMArgs(String s) 147 { 148 put("vmArgs", s); 149 } 150 151 public boolean getStartSuspended() 152 { 153 String s = getProperty("startSuspended"); 154 return s != null && s.equals("true"); 155 } 156 157 public void setStartSuspended(boolean b) 158 { 159 put("startSuspended", b ? "true" : "false"); 160 } 161 162 public String getSourcePath() 163 { 164 return getProperty("sourcePath", ""); 165 } 166 167 public void setSourcePath(String s) 168 { 169 put("sourcePath", s); 170 } 171 172 public void saveDefaults() 173 { 174 save(getDefaultSessionFile()); 175 } 176 177 public void loadDefaults() 178 { 179 clear(); 180 File file = getDefaultSessionFile(); 181 if (file != null && file.isFile()) 182 load(file); 183 } 184 185 private void save(File file) 186 { 187 try { 188 OutputStream out = file.getOutputStream(); 189 BufferedWriter writer = 190 new BufferedWriter (new OutputStreamWriter (out)); 191 writer.write("<?xml version=\"1.0\"?>"); 192 writer.newLine(); 193 writer.write("<session version=\"" + getVersion() + "\">"); 194 writer.newLine(); 195 Enumeration propertyNames = propertyNames(); 196 while (propertyNames.hasMoreElements()) { 197 String name = (String ) propertyNames.nextElement(); 198 String value = getProperty(name); 199 writer.write(" "); 200 writer.write(Utilities.propertyToXml(name, value)); 201 writer.newLine(); 202 } 203 saveBreakpoints(writer); 204 writer.write("</session>"); 205 writer.flush(); 206 writer.close(); 207 } 208 catch (IOException e) { 209 Log.error(e); 210 } 211 } 212 213 private void saveBreakpoints(BufferedWriter writer) 214 { 215 if (breakpoints != null && breakpoints.size() > 0) { 216 try { 217 writer.write(" <breakpoints>"); 218 writer.newLine(); 219 Iterator iter = breakpoints.iterator(); 220 while (iter.hasNext()) { 221 Object obj = iter.next(); 222 if (obj instanceof MethodBreakpoint) { 223 MethodBreakpoint bp = (MethodBreakpoint) obj; 224 if (!bp.isTemporary()) 225 writer.write(bp.toXml()); 226 } else if (obj instanceof LineNumberBreakpoint) { 227 LineNumberBreakpoint bp = (LineNumberBreakpoint) obj; 228 if (!bp.isTemporary()) 229 writer.write(bp.toXml()); 230 } 231 } 232 writer.write(" </breakpoints>"); 233 writer.newLine(); 234 } 235 catch (IOException e) { 236 Log.error(e); 237 } 238 } 239 } 240 241 private void load(File file) 242 { 243 XMLReader xmlReader = Utilities.getDefaultXMLReader(); 244 if (xmlReader != null) { 245 xmlReader.setContentHandler(new Handler ()); 246 try { 247 InputSource inputSource = new InputSource (file.getInputStream()); 248 xmlReader.parse(inputSource); 249 } 250 catch (EOFException ignored) {} 251 catch (Exception e) { 252 Log.error(e); 253 } 254 } 255 } 256 257 public List getBreakpointSpecifications() 258 { 259 return breakpointSpecifications; 260 } 261 262 public void setBreakpoints(List breakpoints) 263 { 264 this.breakpoints = breakpoints; 265 } 266 267 private static final String getVersion() 268 { 269 return "1"; 270 } 271 272 private class Handler extends DefaultHandler implements ContentHandler 273 { 274 public void startElement(String uri, String localName, String qName, 275 Attributes attributes) throws SAXException 276 { 277 if (localName.equals("session") || qName.equals("session")) { 278 String version = attributes.getValue("version"); 279 if (!version.equals(getVersion())) 280 throw new SAXException ("Unknown session format"); 281 } else if (localName.equals("property") || qName.equals("property")) { 282 String propertyName = attributes.getValue("name"); 284 String value = attributes.getValue("value"); 285 setProperty(propertyName, value); 286 } else if (localName.equals("breakpoints") || qName.equals("breakpoints")) { 287 breakpointSpecifications = new ArrayList (); 288 } else if (localName.equals("breakpoint") || qName.equals("breakpoint")) { 289 BreakpointSpecification spec = 290 new BreakpointSpecification(attributes); 291 breakpointSpecifications.add(spec); 292 } 293 } 294 } 295 } 296 | Popular Tags |