[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