+ private boolean saveConf(String filename) throws IOException, DatabaseException {\r
+ File file = new File(filename);\r
+ if (file.exists()) {\r
+ if(!MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Saving compare configuration", "Do you want to overwrite file'" + filename + "'?"))\r
+ return false; \r
+ } else {\r
+ if(!file.createNewFile())\r
+ return false;\r
+ }\r
+ final PrintStream ps = new PrintStream(file);\r
+ ps.println("<?xml version=\"1.0\"?>");\r
+ ps.println("<compare>");\r
+ session.syncRequest(new ReadRequest() {\r
+ \r
+ @Override\r
+ public void run(ReadGraph graph) throws DatabaseException {\r
+ for (Resource r : traversed) {\r
+ ps.println("<traversed uri=\"" + graph.getURI(r) + "\"/>");\r
+ }\r
+ for (Resource r : tested) {\r
+ ps.println("<tested uri=\"" + graph.getURI(r) + "\"/>");\r
+ }\r
+ for (Resource r : strong) {\r
+ ps.println("<strong uri=\"" + graph.getURI(r) + "\"/>");\r
+ }\r
+ for (Resource r : nonTraversed) {\r
+ ps.println("<nontraversed uri=\"" + graph.getURI(r) + "\"/>");\r
+ }\r
+ for (Resource r : nonTested) {\r
+ ps.println("<nontested uri=\"" + graph.getURI(r) + "\"/>");\r
+ }\r
+ }\r
+ });\r
+ \r
+ ps.println("</compare>");\r
+ ps.flush();\r
+ ps.close();\r
+ return true;\r
+ }\r
+ \r
+ private void load(String filename) throws Exception {\r
+ final ImportListener listener = new ImportListener();\r
+ XMLParser parser = new XMLParser(listener);\r
+ parser.parse(filename);\r
+ \r
+ if (listener.getNonTested().size() +\r
+ listener.getNonTraversed().size() +\r
+ listener.getStrong().size() +\r
+ listener.getTested().size() +\r
+ listener.getTraversed().size() == 0)\r
+ return;\r
+ session.syncRequest(new ReadRequest() {\r
+ \r
+ @Override\r
+ public void run(ReadGraph graph) throws DatabaseException {\r
+ tested.clear();\r
+ traversed.clear();\r
+ strong.clear();\r
+ nonTested.clear();\r
+ nonTraversed.clear();\r
+ for (String uri : listener.getTested()) {\r
+ tested.add(graph.getResource(uri));\r
+ }\r
+ for (String uri : listener.getTraversed()) {\r
+ traversed.add(graph.getResource(uri));\r
+ }\r
+ for (String uri : listener.getStrong()) {\r
+ strong.add(graph.getResource(uri));\r
+ }\r
+ \r
+ for (String uri : listener.getNonTested()) {\r
+ nonTested.add(graph.getResource(uri));\r
+ }\r
+ for (String uri : listener.getNonTraversed()) {\r
+ nonTraversed.add(graph.getResource(uri));\r
+ }\r
+ \r
+ }\r
+ });\r
+ \r
+ \r
+ \r
+ }\r
+ \r
+ public static class ImportListener {\r
+ \r
+ \r
+ private Collection<String> traversed = new ArrayList<String>();\r
+ private Collection<String> tested = new ArrayList<String>();\r
+ private Collection<String> strong = new ArrayList<String>();\r
+ private Collection<String> nonTraversed = new ArrayList<String>();\r
+ private Collection<String> nonTested = new ArrayList<String>();\r
+ \r
+\r
+ public void done() {\r
+\r
+ }\r
+ \r
+ \r
+ public void addTraversed(String uri) {\r
+ traversed.add(uri);\r
+ }\r
+ \r
+ public void addTested(String uri) {\r
+ tested.add(uri);\r
+ }\r
+ \r
+ public void addStrong(String uri) {\r
+ strong.add(uri);\r
+ }\r
+ \r
+ public void addNonTraversed(String uri) {\r
+ nonTraversed.add(uri);\r
+ }\r
+ \r
+ public void addNonTested(String uri) {\r
+ nonTested.add(uri);\r
+ }\r
+ \r
+ public Collection<String> getTraversed() {\r
+ return traversed;\r
+ }\r
+ \r
+ public Collection<String> getNonTested() {\r
+ return nonTested;\r
+ }\r
+ \r
+ public Collection<String> getNonTraversed() {\r
+ return nonTraversed;\r
+ }\r
+ \r
+ public Collection<String> getStrong() {\r
+ return strong;\r
+ }\r
+ \r
+ public Collection<String> getTested() {\r
+ return tested;\r
+ }\r
+ \r
+ }\r
+ \r
+ \r
+\r
+ public static class XMLParser {\r
+ \r
+ private ImportListener listener;\r
+ \r
+ public XMLParser(ImportListener listener) {\r
+ this.listener = listener;\r
+ }\r
+ \r
+ public void parse(String filename) throws Exception{\r
+ ParserBean p = new ParserBean();\r
+ p.parse(filename);\r
+ }\r
+ \r
+ private void handleElement(Stack<Element> parents, Element element) throws SAXException{\r
+ String name = element.qName;\r
+ if(name.equals("traversed")) {\r
+ for (Attribute a : element.attributes) {\r
+ String propertyName = a.localName;\r
+ String value = a.value;\r
+ if (propertyName.equals("uri")) {\r
+ listener.addTraversed(value);\r
+ \r
+ } \r
+ }\r
+ } else if(name.equals("tested")) {\r
+ for (Attribute a : element.attributes) {\r
+ String propertyName = a.localName;\r
+ String value = a.value;\r
+ if (propertyName.equals("uri")) {\r
+ listener.addTested(value);\r
+ \r
+ } \r
+ }\r
+ } else if(name.equals("strong")) {\r
+ for (Attribute a : element.attributes) {\r
+ String propertyName = a.localName;\r
+ String value = a.value;\r
+ if (propertyName.equals("uri")) {\r
+ listener.addStrong(value);\r
+ \r
+ } \r
+ }\r
+ } else if(name.equals("nontraversed")) {\r
+ for (Attribute a : element.attributes) {\r
+ String propertyName = a.localName;\r
+ String value = a.value;\r
+ if (propertyName.equals("uri")) {\r
+ listener.addNonTraversed(value);\r
+ \r
+ } \r
+ }\r
+ } else if(name.equals("nontested")) {\r
+ for (Attribute a : element.attributes) {\r
+ String propertyName = a.localName;\r
+ String value = a.value;\r
+ if (propertyName.equals("uri")) {\r
+ listener.addNonTested(value);\r
+ \r
+ } \r
+ }\r
+ } else if (name.equals("compare")) {\r
+ \r
+ } else {\r
+ throw new SAXException("Unknown element '" + name + "'. The file does not contain ExtIO configuration.");\r
+ \r
+ }\r
+ }\r
+\r
+ \r
+ public class ParserBean extends DefaultHandler implements Serializable {\r
+\r
+ private static final long serialVersionUID = -4995836637014958966L;\r
+ \r
+ private Stack<Element> current = new Stack<Element>();\r
+ private Stack<String> texts = new Stack<String>();\r
+ \r
+ public ParserBean() {\r
+ super();\r
+ }\r
+ \r
+ public void parse(String filename) throws Exception {\r
+ SAXParserFactory spf = SAXParserFactory.newInstance();\r
+ SAXParser saxParser = spf.newSAXParser();\r
+ \r
+ XMLReader reader = saxParser.getXMLReader();\r
+ FileReader file = new FileReader(filename);\r
+ reader.setContentHandler(this);\r
+ reader.parse(new InputSource(file));\r
+ listener.done();\r
+ }\r
+ \r
+ @Override\r
+ public void startElement(String uri, String localName, String name,\r
+ Attributes attributes) throws SAXException {\r
+ current.push(new Element(uri,localName,name,attributes));\r
+ texts.push(new String());\r
+ }\r
+ \r
+ @Override\r
+ public void endElement(String uri, String localName, String name)\r
+ throws SAXException {\r
+ Element e = null;\r
+ String text = null;\r
+ if (!current.empty()) {\r
+ e = current.pop();\r
+ text = texts.pop();\r
+ }\r
+ if (e != null) {\r
+ e.setValue(text.trim());\r
+ }\r
+ if (e != null) {\r
+ handleElement(current,e);\r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public void characters(char[] ch, int start, int length)\r
+ throws SAXException {\r
+ if (!current.empty()) {\r
+ \r
+ String text = texts.pop();\r
+ \r
+ String value = new String(\r
+ ch, start, length);\r
+ text += value;\r
+ texts.push(text);\r
+ }\r
+ }\r
+ }\r
+ \r
+ public class Attribute {\r
+ public String localName;\r
+ public String qName;\r
+ public String uri;\r
+ public String value;\r
+ \r
+ public Attribute(String localName, String qName, String uri, String value) {\r
+ this.localName = localName;\r
+ this.qName = qName;\r
+ this.uri = uri;\r
+ this.value = value;\r
+ }\r
+ }\r
+ \r
+ public class Element implements Serializable {\r
+ private static final long serialVersionUID = -5207502156942818875L;\r
+ String uri;\r
+ String localName;\r
+ String qName;\r
+ String value = null;\r
+ List<Attribute> attributes = new ArrayList<Attribute>();\r
+ \r
+ public Element(String uri, String localName, String qName, Attributes attributes) {\r
+ this.uri = uri;\r
+ this.localName = localName;\r
+ this.qName = qName;\r
+ for (int i = 0; i < attributes.getLength(); i++) {\r
+ this.attributes.add(new Attribute(attributes.getLocalName(i),attributes.getQName(i),attributes.getURI(i),attributes.getValue(i)));\r
+ }\r
+ }\r
+\r
+ public String getUri() {\r
+ return uri;\r
+ }\r
+\r
+ public String getLocalName() {\r
+ return localName;\r
+ }\r
+\r
+ public String getQName() {\r
+ return qName;\r
+ }\r
+\r
+ public String getValue() {\r
+ return value;\r
+ }\r
+\r
+ public List<Attribute> getAttributes() {\r
+ return attributes;\r
+ }\r
+ \r
+ public void setValue(String value) {\r
+ this.value = value;\r
+ }\r
+\r
+ }\r
+\r
+ }\r
+ \r