[Mulgara-svn] r258 - in trunk/src/jar/resolver: . java/org/mulgara/resolver

andrae at mulgara.org andrae at mulgara.org
Thu Apr 26 11:49:02 UTC 2007


Author: andrae
Date: 2007-04-26 06:49:02 -0500 (Thu, 26 Apr 2007)
New Revision: 258

Modified:
   trunk/src/jar/resolver/build.xml
   trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java
Log:
Fixes MGR-33, http://mulgara.org/jira/browse/MGR-33.

Merged from branches/mgr-33 with:

svn merge -r 255:257 https://mulgara.org/svn/mulgara/branches/mgr-33



Modified: trunk/src/jar/resolver/build.xml
===================================================================
--- trunk/src/jar/resolver/build.xml	2007-04-26 09:44:50 UTC (rev 257)
+++ trunk/src/jar/resolver/build.xml	2007-04-26 11:49:02 UTC (rev 258)
@@ -39,6 +39,7 @@
     <path refid="resolver-classpath"/>
 
     <fileset file="${resolver-url.dist.dir}/${resolver-url.jar}"/>
+    <fileset file="${resolver-xsd.dist.dir}/${resolver-xsd.jar}"/>
     <fileset file="${resolver-store.dist.dir}/${resolver-store.jar}"/>
     <fileset file="${resolver-memory.dist.dir}/${resolver-memory.jar}"/>
     <fileset file="${store-nodepool-memory.dist.dir}/${store-nodepool-memory.jar}"/>
@@ -80,7 +81,7 @@
           depends="-resolver-prepare, resolver-spi-jar, rules-jar,
                    resolver-http-jar, resolver-file-jar, resolver-url-jar,
                    resolver-jar-jar, content-rdfxml-jar, content-rdfxml-jar,
-                   client-jrdf-jar, jrdf-jar"
+                   client-jrdf-jar, jrdf-jar, resolver-xsd-jar"
           description="Compiles all resolver related files included generated
                        source code">
 
@@ -124,7 +125,7 @@
 
   <target name="resolver-test"
           depends="jrdf-jar, store-nodepool-memory-jar, 
-                   resolver-jar, resolver-memory-jar,
+                   resolver-jar, resolver-memory-jar, resolver-xsd-jar,
                    store-nodepool-xa-jar, store-stringpool-xa-jar, resolver-store-jar,
                    resolver-url-jar, store-stringpool-memory-jar, tuples-hybrid-jar,
                    util-jar, util-xa-jar">

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java	2007-04-26 09:44:50 UTC (rev 257)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java	2007-04-26 11:49:02 UTC (rev 258)
@@ -81,6 +81,8 @@
   private static final URI model4URI;
   private static final URI model5URI;
 
+  private static final URI xsdModelTypeURI;
+
   static {
     try {
       databaseURI    = new URI("local:database");
@@ -90,6 +92,8 @@
       model3URI      = new URI("local:database#model3");
       model4URI      = new URI("local:database#model4");
       model5URI      = new URI("local:database#model5");
+
+      xsdModelTypeURI = new URI(Mulgara.NAMESPACE + "XMLSchemaModel");
     } catch (URISyntaxException e) {
       throw new Error("Bad hardcoded URI", e);
     }
@@ -118,6 +122,7 @@
     suite.addTest(new AdvDatabaseSessionUnitTest("testImplicitCommitQuery"));
     suite.addTest(new AdvDatabaseSessionUnitTest("testPrefixingWithUnbound"));
     suite.addTest(new AdvDatabaseSessionUnitTest("testDatabaseDelete"));
+    suite.addTest(new AdvDatabaseSessionUnitTest("testCreateModel"));
 
     return suite;
   }
@@ -190,6 +195,7 @@
                    "org.mulgara.content.rdfxml.RDFXMLContentHandler");
 
       database.addResolverFactory("org.mulgara.resolver.url.URLResolverFactory", null);
+      database.addResolverFactory("org.mulgara.resolver.xsd.XSDResolverFactory", null);
     }
   }
 
@@ -1242,6 +1248,31 @@
     assertFalse(answer2.next());
   }
 
+  public void testCreateModel() throws URISyntaxException
+  {
+    logger.info("testCreateModel");
+
+    try {
+      // Load some test data
+      Session session = database.newSession();
+      try {
+        session.createModel(modelURI, null);
+        try {
+          session.createModel(modelURI, xsdModelTypeURI);
+          assertFalse("createModel should have thrown QueryException", true);
+        } catch (QueryException eq) {
+          // We expect this to be thrown.
+        }
+        session.createModel(modelURI, null);
+      } finally {
+        session.close();
+      }
+    } catch (Exception e) {
+      fail(e);
+    }
+  }
+
+
   /**
    * Fail with an unexpected exception
    */

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java	2007-04-26 09:44:50 UTC (rev 257)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java	2007-04-26 11:49:02 UTC (rev 258)
@@ -151,10 +151,8 @@
     URI databaseURI = metadata.getURI();
     String scheme = modelURI.getScheme();
     String fragment = modelURI.getFragment();
-    if (
-        scheme != null && scheme.equals(databaseURI.getScheme()) &&
-        fragment != null
-    ) {
+    if (scheme != null && scheme.equals(databaseURI.getScheme()) &&
+        fragment != null) {
       if (databaseURI.isOpaque()) {
         // databaseURI is opaque.
         if (modelURI.isOpaque()) {
@@ -220,6 +218,33 @@
         modelURI));
     assert model != NodePool.NONE;
 
+    // Check model does not already exist with a different model type.
+    // TODO: there's a node leak here, if the model has already been created.
+    Resolution resolution = systemResolver.resolve(new ConstraintImpl(
+        new LocalNode(model),
+        new LocalNode(metadata.getRdfTypeNode()),
+        new Variable("x"),
+        new LocalNode(metadata.getSystemModelNode())));
+
+    try {
+      resolution.beforeFirst();
+      if (resolution.next()) {
+        Node eNode = systemResolver.globalize(resolution.getColumnValue(0));
+        try {
+          URIReferenceImpl existing = (URIReferenceImpl)eNode;
+          if (!new URIReferenceImpl(modelTypeURI).equals(existing)) {
+            throw new QueryException(modelURI + " already exists with model type " + existing +
+                " in attempt to create it with type " + modelTypeURI);
+          }
+        } catch (ClassCastException ec) {
+          throw new QueryException("Invalid model type entry in system model: " + modelURI + " <rdf:type> " + eNode);
+        }
+      }
+    } finally {
+      resolution.close();
+    }
+
+
     // TODO: there's a node leak here, because the model node was created
     //       persistently, but may never end up linked into the graph if the
     //       following security check doesn't succeed




More information about the Mulgara-svn mailing list