From: Christian G. [M. Mitch] <mas...@us...> - 2002-01-21 22:38:12
|
Update of /cvsroot/jprojecttimer/jprojecttimer/de/cgarbs/apps/jprojecttimer In directory usw-pr-cvs1:/tmp/cvs-serv30336 Modified Files: MainWindow.java Project.java TaskList.java Log Message: Included XML file handling (code from Boris) Index: MainWindow.java =================================================================== RCS file: /cvsroot/jprojecttimer/jprojecttimer/de/cgarbs/apps/jprojecttimer/MainWindow.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** MainWindow.java 2002/01/20 13:09:34 1.4 --- MainWindow.java 2002/01/21 22:25:45 1.5 *************** *** 2,6 **** * $Id$ * ! * 2001 (C) by Christian Garbs <mi...@un...> * * Licensed under GNU GPL (see COPYING for details) --- 2,6 ---- * $Id$ * ! * 2001,2002 (C) by Christian Garbs <mi...@cg...> * * Licensed under GNU GPL (see COPYING for details) *************** *** 20,23 **** --- 20,24 ---- import java.awt.print.PrinterJob; import java.io.FileOutputStream; + import java.io.IOException; import java.io.PrintStream; import javax.swing.JFileChooser; *************** *** 178,182 **** int returnVal = chooser.showOpenDialog(this); if(returnVal == JFileChooser.APPROVE_OPTION) { ! project.readFromStream(chooser.getSelectedFile()); setTitle(Resource.get("JProjectTimer") + " - " + project.getFile().getName()); // Refresh all Panes --- 179,184 ---- int returnVal = chooser.showOpenDialog(this); if(returnVal == JFileChooser.APPROVE_OPTION) { ! //project.readFromStream(chooser.getSelectedFile()); ! project.readFromXML(chooser.getSelectedFile()); setTitle(Resource.get("JProjectTimer") + " - " + project.getFile().getName()); // Refresh all Panes *************** *** 198,202 **** } else { try { ! project.writeToStream(new PrintStream(new FileOutputStream(project.getFile()))); project.hasBeenSaved(); } catch (Exception e) {} --- 200,205 ---- } else { try { ! //project.writeToStream(new PrintStream(new FileOutputStream(project.getFile()))); ! project.writeToXML(new PrintStream(new FileOutputStream(project.getFile()))); project.hasBeenSaved(); } catch (Exception e) {} Index: Project.java =================================================================== RCS file: /cvsroot/jprojecttimer/jprojecttimer/de/cgarbs/apps/jprojecttimer/Project.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Project.java 2002/01/11 20:31:16 1.2 --- Project.java 2002/01/21 22:25:46 1.3 *************** *** 2,6 **** * $Id$ * ! * 2001 (C) by Christian Garbs <mi...@un...> * * Licensed under GNU GPL (see COPYING for details) --- 2,7 ---- * $Id$ * ! * 2001,2002 (C) by Christian Garbs <mi...@cg...> ! * Boris Unckel <b.u...@gm...> * * Licensed under GNU GPL (see COPYING for details) *************** *** 13,18 **** --- 14,23 ---- import java.io.File; import java.io.FileReader; + import java.io.IOException; import java.io.PrintStream; import java.util.Date; + import org.jdom.*; + import org.jdom.input.*; + import org.jdom.output.*; public class Project *************** *** 43,46 **** --- 48,55 ---- } + /** + * @param file input file to read from + * @deprecated XML is preferred format: use readFromXML instead. + */ public void readFromStream(File file) { *************** *** 101,104 **** --- 110,117 ---- } + /** + * @param out Stream where data is written + * @deprecated XML is preferred format: use writeToXML instead + */ public void writeToStream(PrintStream out) { *************** *** 112,114 **** --- 125,196 ---- out.println("</project>"); } + + /** + * Read data from XML-input file. Does not check for valid format + * @param file Input File to read from. + */ + + public void readFromXML(File file) + { + this.file = file; + + /** + * If the input file is readable the current tasklist is deleted + */ + + if (file.canRead()) + { + tasks.removeAllElements(); + try { + SAXBuilder aSAXBuilder = new SAXBuilder(); + Document aDocument = aSAXBuilder.build(file); + Element root = aDocument.getRootElement(); + + if (root.getName().equalsIgnoreCase("project")) + { + name = root.getChild("name").getText(); + timeScale = + Integer.parseInt(root.getChild("timeScale") + .getText()); + anchored = + Boolean.valueOf(root.getChild("anchored").getText()) + .booleanValue(); + start.setTime(Long + .parseLong(root.getChild("startTime").getText())); + Element dependencies = root.getChild("tasklist"); + + if (dependencies != null) tasks.readFromXml(dependencies); + } + else + throw new Exception( + "Input XML false. Needs to be project format"); + } catch (Exception e) { + System.err.println(e); + } + } + else + System.err.println( + "File not readable. Check input format for XML and prject type"); + } + + /** @param out Stream where XML is written to + * @throws IOException if a problem with the stream occurs */ + + public void writeToXML(PrintStream out) throws IOException + { + XMLOutputter aXMLOutputter = new XMLOutputter(" ", true); + Element root = new Element("project"); + + root.addAttribute("version", "1.0"); + Document aDocument = new Document(root); + + root.addContent(new Element("name").addContent(name)); + root.addContent(new Element("timeScale").addContent(timeScale + "")); + root.addContent(new Element("anchored").addContent(anchored + "")); + root.addContent(new Element("startTime").addContent(start.getTime() + + "")); + tasks.addToXmlElement(root); + aXMLOutputter.output(aDocument, out); + } + } Index: TaskList.java =================================================================== RCS file: /cvsroot/jprojecttimer/jprojecttimer/de/cgarbs/apps/jprojecttimer/TaskList.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** TaskList.java 2002/01/12 14:18:45 1.2 --- TaskList.java 2002/01/21 22:25:46 1.3 *************** *** 2,6 **** * $Id$ * ! * 2001 (C) by Christian Garbs <mi...@un...> * * Licensed under GNU GPL (see COPYING for details) --- 2,7 ---- * $Id$ * ! * 2001,2002 (C) by Christian Garbs <mi...@cg...> ! * Boris Unckel <b.u...@gm...> * * Licensed under GNU GPL (see COPYING for details) *************** *** 16,21 **** --- 17,24 ---- import java.util.Collection; import java.util.Iterator; + import java.util.List; import java.util.StringTokenizer; import java.util.Vector; + import org.jdom.*; /** A task list stores all tasks that are part of a project. *************** *** 217,219 **** --- 220,338 ---- } + /** + * + * @param tasklist XML Tasklist Element + */ + + public void readFromXml(Element tasklist) + { + try { + List aList = tasklist.getChildren("task"); + int first = size(); + Vector tmp = new Vector(); + + for (Iterator i = aList.iterator(); i.hasNext(); ) + { + Element taskElement = ( Element ) i.next(); + int id = + Integer.parseInt(taskElement.getChildText("id")); + String name = taskElement.getChildText("name"); + int length = + Integer.parseInt(taskElement.getChildText("length")); + int completion = + Integer.parseInt(taskElement.getChildText("completion")); + + addElement(new Task(name, length, completion, + new TaskList())); + + Vector aVector = new Vector(); + + // read and store dependencies + + Element dependencies = taskElement.getChild("dependencies"); + List ids = dependencies.getChildren("id"); + + for (Iterator i2 = ids.iterator(); i2.hasNext(); ) + { + Element idElement = ( Element ) i2.next(); + + aVector.addElement(new Integer(Integer + .parseInt(idElement.getText()))); + } + tmp.addElement(aVector); + } + + // actually set dependencies + + int i = 0; + + for (Iterator i1 = tmp.iterator(); i1.hasNext(); i++) + { + Vector v = ( Vector ) i1.next(); + TaskList t = new TaskList(); + + for (Iterator i2 = v.iterator(); i2.hasNext(); ) + { + t.addElement(elementAt(first + + (( Integer ) i2.next()) + .intValue())); + } + (( Task ) elementAt(first + i)).setDependencies(t); + + // It's just loaded, but setDependencies sets needsToBeSavedTo true. + + (( Task ) elementAt(first + i)).hasBeenSaved(); + } + + } catch (Exception e) { + System.err.println("TaskList: readFromXML"); + System.err.println(e); + } + + } + + /** @param aElement Element where the Data of the tasklist are added */ + + public void addToXmlElement(Element aElement) + { + Element tasklist = new Element("tasklist"); + + aElement.addContent(tasklist); + int id = 0; + + for (Iterator i1 = iterator(); i1.hasNext(); id++) + { + Task aTask = ( Task ) i1.next(); + Element taskElement = new Element("task"); + + tasklist.addContent(taskElement); + taskElement.addContent(new Element("id").addContent(id + "")); + taskElement + .addContent(new Element("length") + .addContent(aTask.getLength() + "")); + taskElement + .addContent(new Element("name") + .addContent(aTask.getName() + "")); + taskElement + .addContent(new Element("completion") + .addContent(aTask.getCompletion() + "")); + + /** + * @todo Hier fehlen die Dependencies + * Ursprünglich wohl über die Position geregelt + */ + + Element dependencies = new Element("dependencies"); + + taskElement.addContent(dependencies); + for (Iterator i2 = aTask.getDependencies().iterator(); + i2.hasNext(); ) + { + Element depend = new Element("id"); + + depend.addContent(indexOf(i2.next()) + ""); + dependencies.addContent(depend); + } + } + } } |