/* * Created on 7 ao�t 2004 $Id$ */ package org.exist.xmldb; import java.net.BindException; import java.util.Iterator; import junit.framework.TestCase; import junit.textui.TestRunner; import org.exist.StandaloneServer; import org.exist.storage.DBBroker; import org.mortbay.util.MultiException; import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xmldb.api.DatabaseManager; import org.xmldb.api.base.Collection; import org.xmldb.api.base.Database; import org.xmldb.api.base.XMLDBException; import org.xmldb.api.modules.XMLResource; /** A test case for accessing DOMS remotely * @author jmv * @author Pierrick Brihaye <pierrick.brihaye@free.fr> */ public class DOMTestJUnit extends TestCase { private static StandaloneServer server = null; private static String driver = "org.exist.xmldb.DatabaseImpl"; private static String baseURI = "xmldb:exist://localhost:8088/xmlrpc" + DBBroker.ROOT_COLLECTION; private static String name = "test.xml"; private Collection rootColl; private Database database; /** * @param name */ public DOMTestJUnit(String name) { super(name); } protected void setUp() { try { //Don't worry about closing the server : the shutdown hook will do the job initServer(); System.setProperty("exist.initdb", "true"); Class dbc = Class.forName(driver); database = (Database) dbc.newInstance(); DatabaseManager.registerDatabase(database); rootColl = DatabaseManager.getCollection(baseURI, "admin", ""); assertNotNull(rootColl); XMLResource r = (XMLResource)rootColl.createResource(name, XMLResource.RESOURCE_TYPE); r.setContent("<?xml-stylesheet type=\"text/xsl\" href=\"test.xsl\"?><!-- Root Comment --><properties><property key=\"type\">Table</property></properties>"); rootColl.storeResource(r); } catch(Exception e) { fail(e.getMessage()); } } private void initServer() { try { if (server == null) { server = new StandaloneServer(); if (!server.isStarted()) { try { System.out.println("Starting standalone server..."); String[] args = {}; server.run(args); while (!server.isStarted()) { Thread.sleep(1000); } } catch (MultiException e) { boolean rethrow = true; Iterator i = e.getExceptions().iterator(); while (i.hasNext()) { Exception e0 = (Exception)i.next(); if (e0 instanceof BindException) { System.out.println("A server is running already !"); rethrow = false; break; } } if (rethrow) throw e; } } } } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } /** test Update of an existing document through DOM */ public void testDOMUpdate() { try { XMLResource index = (XMLResource) rootColl.getResource(name); { System.out.println("Retrieving initial content:"); String content = (String) index.getContent(); System.out.println(content); } Document doc=null; Element root=null; NodeList nl=null; Node n = index.getContentAsDOM(); if (n instanceof Document) { doc=(Document)n; root=doc.getDocumentElement(); } else if (n instanceof Element) { doc = n.getOwnerDocument(); root=(Element)n; } else { fail("RemoteXMLResource unable to return a Document either an Element"); } System.out.println("Retrieving root comments and PIs"); nl = doc.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { System.out.println(" * "+nl.item(i).getNodeName()); } Element schemaNode = doc.createElement("schema"); schemaNode.setAttribute("targetNamespace", "targetNamespace"); schemaNode.setAttribute("resourceName", "filename"); root.appendChild(schemaNode); index.setContentAsDOM(doc); rootColl.storeResource(index); System.out.println("Retrieving modified content:"); index = (XMLResource) rootColl.getResource(name); String content = (String) index.getContent(); System.out.println(content); n = index.getContentAsDOM(); if (n instanceof Document) { doc=(Document)n; root=doc.getDocumentElement(); } else if (n instanceof Element) { doc = n.getOwnerDocument(); root=(Element)n; } nl = root.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { System.out.println(nl.item(i).getNodeName()); } } catch(Exception e) { fail(e.getMessage()); } } public static void main(String[] args) { TestRunner.run(DOMTestJUnit.class); //Explicit shutdown for the shutdown hook System.exit(0); } }