diff options
author | sminto | 2005-08-05 21:19:26 +0000 |
---|---|---|
committer | sminto | 2005-08-05 21:19:26 +0000 |
commit | 3e4c04ea3935447ff69c529e291e158c63dd30d2 (patch) | |
tree | 9fa53a27c99440acc01627c8f484f3f7d9d3dd93 /org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn | |
parent | 7261fecaf79178b6e7741bbaa40e0a9660fea51b (diff) | |
download | org.eclipse.mylyn.tasks-3e4c04ea3935447ff69c529e291e158c63dd30d2.tar.gz org.eclipse.mylyn.tasks-3e4c04ea3935447ff69c529e291e158c63dd30d2.tar.xz org.eclipse.mylyn.tasks-3e4c04ea3935447ff69c529e291e158c63dd30d2.zip |
added support for externalizing to a string
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn')
-rw-r--r-- | org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/TaskListExternalizer.java | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/TaskListExternalizer.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/TaskListExternalizer.java index 0d3606aa1..589bffa9e 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/TaskListExternalizer.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/TaskListExternalizer.java @@ -16,6 +16,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.StringReader; +import java.io.StringWriter; import java.util.ArrayList; import java.util.List; @@ -42,6 +44,7 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** @@ -352,6 +355,190 @@ public class TaskListExternalizer { } } + + + + + + + + + + + + + + + + private Document openAsDOM(String input) throws IOException { + + // A factory API that enables applications to obtain a parser + // that produces DOM object trees from XML documents + // + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + + // Using DocumentBuilder, obtain a Document from XML file. + // + DocumentBuilder builder = null; + Document document = null; + try { + // create new instance of DocumentBuilder + // + builder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException pce) { + MylarPlugin.log(pce, "Failed to load XML file"); + } + try { + // Parse the content of the given file as an XML document + // and return a new DOM Document object. Also throws IOException + StringReader s = new StringReader(input); + InputSource in = new InputSource(s); + document = builder.parse(in); + } catch (SAXException se) { + MylarPlugin.log(se, "Failed to parse XML file"); + } + return document; + } + + public void readTaskList(TaskList tlist, String input) { + initExtensions(); + try { + + Document doc = openAsDOM(input); + if (doc == null) { + return; + } + // read root node to get version number + // + Element root = doc.getDocumentElement(); + readVersion = root.getAttribute("Version"); + + if (readVersion.equals("1.0.0")) { + MylarPlugin.log("version: " + readVersion + " not supported", this); +// NodeList list = root.getChildNodes(); +// for (int i = 0; i < list.getLength(); i++) { +// Node child = list.item(i); +// readTasksToNewFormat(child, tlist); +// //tlist.addRootTask(readTaskAndSubTasks(child, null, tlist)); +// } + } else { + NodeList list = root.getChildNodes(); + for (int i = 0; i < list.getLength(); i++) { + Node child = list.item(i); + boolean wasRead = false; + try { + if (child.getNodeName().endsWith(DefaultTaskListExternalizer.TAG_CATEGORY)) { + for (ITaskListExternalizer externalizer : externalizers) { + if (externalizer.canReadCategory(child)) { + externalizer.readCategory(child, tlist); + wasRead = true; + break; + } + } + if (!wasRead && defaultExternalizer.canReadCategory(child)) { + defaultExternalizer.readCategory(child, tlist); + } else { + // MylarPlugin.log("Did not read: " + + // child.getNodeName(), this); + } + } else { + for (ITaskListExternalizer externalizer : externalizers) { + if (externalizer.canReadTask(child)) { + // TODO add the tasks properly + ITask newTask = externalizer.readTask(child, tlist, null, null); + ITaskHandler taskHandler = MylarTasklistPlugin.getDefault().getTaskHandlerForElement(newTask); + if(taskHandler != null){ + newTask = taskHandler.taskAdded(newTask); + } + tlist.addRootTask(newTask); + + wasRead = true; + break; + } + } + if (!wasRead && defaultExternalizer.canReadTask(child)) { + tlist.addRootTask(defaultExternalizer.readTask(child, tlist, null, null)); + } else { + // MylarPlugin.log("Did not read: " + child.getNodeName(), this); + } + } + } catch (Exception e) { + MylarPlugin.log(e, "can't read xml string"); + } + } + } + } catch (Exception e) { + MylarPlugin.log(e, "can't read xml string"); + } + } + + public String getTaskListXml(TaskList tlist) { + // TODO make this and writeTaskList use the same base code + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db; + Document doc = null; + + try { + db = dbf.newDocumentBuilder(); + doc = db.newDocument(); + } catch (ParserConfigurationException e) { + MylarPlugin.log(e, "could not create document"); + e.printStackTrace(); + } + + Element root = doc.createElement("TaskList"); + root.setAttribute("Version", "1.0.1"); + + for (ITaskListExternalizer externalizer : externalizers) { + externalizer.createRegistry(doc, root); + } + + for (AbstractCategory category : tlist.getCategories()) { + Element element = null; + for (ITaskListExternalizer externalizer : externalizers) { + if (externalizer.canCreateElementFor(category)) element = externalizer.createCategoryElement(category, doc, root); + } + if (element == null && defaultExternalizer.canCreateElementFor(category)) { + defaultExternalizer.createCategoryElement(category, doc, root); + } else if(element == null){ + MylarPlugin.log("Did not externalize: " + category, this); + } + } + for (ITask task : tlist.getRootTasks()) { + try { + Element element = null; + for (ITaskListExternalizer externalizer : externalizers) { + if (externalizer.canCreateElementFor(task)) element = externalizer.createTaskElement(task, doc, root); + } + if (element == null && defaultExternalizer.canCreateElementFor(task)) { + defaultExternalizer.createTaskElement(task, doc, root); + } else if(element == null){ + MylarPlugin.log("Did not externalize: " + task, this); + } + }catch (Exception e) { + MylarPlugin.log(e, e.getMessage()); + } + } + doc.appendChild(root); + StringWriter sw = new StringWriter(); + + Source source = new DOMSource(doc); + + Result result = new StreamResult(sw); + + Transformer xformer = null; + try { + xformer = TransformerFactory.newInstance().newTransformer(); + //Transform the XML Source to a Result + // + xformer.transform(source, result); + } catch (Exception e) { + e.printStackTrace(); + } + return sw.toString(); + } + + // private static ITask readTaskAndSubTasks(Node node, ITask root, TaskList // tlist) { // //extract node and create new sub task |