[Mulgara-svn] r406 - branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver

andrae at mulgara.org andrae at mulgara.org
Fri Sep 7 02:14:03 UTC 2007


Author: andrae
Date: 2007-09-06 21:14:03 -0500 (Thu, 06 Sep 2007)
New Revision: 406

Modified:
   branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java
   branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswerUnitTest.java
Log:
Cleaned up the last of the compile bugs.  Committed for testing.



Modified: branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java
===================================================================
--- branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java	2007-09-06 21:22:26 UTC (rev 405)
+++ branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java	2007-09-07 02:14:03 UTC (rev 406)
@@ -133,14 +133,14 @@
                       SystemResolver         systemResolver,
                       DatabaseMetadata       metadata) throws Exception
   {
-    // if modelTypeURI is null - consider external !?!?!?
     // Default to the system model type
     if (modelTypeURI == null) {
       modelTypeURI = metadata.getSystemModelTypeURI();
     }
 
-    long model;
     URI modelURI = operationContext.convertModelURLtoURI(modelURL);
+
+    long model;
     if (modelURI != null) {
       // internal, so use model-name.
       model = systemResolver.localize(new URIReferenceImpl(modelURI));
@@ -149,6 +149,10 @@
       model = systemResolver.localize(new URIReferenceImpl(modelURL));
     }
 
+    if (modelExists(model, systemResolver, metadata)) {
+      throw new QueryException(modelURL + " already exists");
+    }
+
     // Look up the resolver factory for the model type
     ResolverFactory resolverFactory =
       operationContext.findModelTypeResolverFactory(modelTypeURI);
@@ -161,41 +165,12 @@
     Resolver resolver = operationContext.obtainResolver(resolverFactory);
     assert resolver != null;
 
-    // Find the local node identifying the model
-    long model = systemResolver.localizePersistent(new URIReferenceImpl(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();
+    // For internal models ensure modelURI is persisted.
+    if (modelURI != null) {
+      model = systemResolver.localizePersistent(new URIReferenceImpl(modelURI));
+      assert model != NodePool.NONE;
     }
 
-
-    // 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
-
     // Make sure security adapters are satisfied
     for (Iterator i = operationContext.getSecurityAdapterList().iterator();
          i.hasNext();)
@@ -221,4 +196,21 @@
   {
     return true;
   }
+
+  private static boolean modelExists(long model, SystemResolver systemResolver,
+      DatabaseMetadata metadata) throws TuplesException, QueryException, ResolverException {
+    Resolution resolution = systemResolver.resolve(new ConstraintImpl(
+        new LocalNode(model),
+        new LocalNode(metadata.getRdfTypeNode()),
+        new Variable("x"),
+        new LocalNode(metadata.getSystemModelNode())));
+
+    try {
+      resolution.beforeFirst();
+
+      return resolution.next();
+    } finally {
+      resolution.close();
+    }
+  }
 }

Modified: branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswerUnitTest.java
===================================================================
--- branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswerUnitTest.java	2007-09-06 21:22:26 UTC (rev 405)
+++ branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswerUnitTest.java	2007-09-07 02:14:03 UTC (rev 406)
@@ -207,6 +207,6 @@
 
     public SystemResolver getSystemResolver() { return null; } // FIXME: Scaffolding for transactions.
 
-    public URI convertModelURLtoURI(URI modelURL) { }
+    public URI convertModelURLtoURI(URI modelURL) { return null; }
   }
 }




More information about the Mulgara-svn mailing list