[Mulgara-svn] r257 - in branches/mgr-33/src/jar/resolver: . java/org/mulgara/resolver
andrae at mulgara.org
andrae at mulgara.org
Thu Apr 26 09:44:51 UTC 2007
Author: andrae
Date: 2007-04-26 04:44:50 -0500 (Thu, 26 Apr 2007)
New Revision: 257
Modified:
branches/mgr-33/src/jar/resolver/build.xml
branches/mgr-33/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java
branches/mgr-33/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java
Log:
Fixes MGR-33, http://mulgara.org/jira/browse/MGR-33.
Adds a simple test to CreateModelOperation to check if the model is being
created a second time with a different model-type. It is worth noting that we
do not insist that create-model be called only once for a given URI, only that
the model-type be consistent.
Modified: branches/mgr-33/src/jar/resolver/build.xml
===================================================================
--- branches/mgr-33/src/jar/resolver/build.xml 2007-04-26 06:20:00 UTC (rev 256)
+++ branches/mgr-33/src/jar/resolver/build.xml 2007-04-26 09:44:50 UTC (rev 257)
@@ -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: branches/mgr-33/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java
===================================================================
--- branches/mgr-33/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java 2007-04-26 06:20:00 UTC (rev 256)
+++ branches/mgr-33/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java 2007-04-26 09:44:50 UTC (rev 257)
@@ -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: branches/mgr-33/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java
===================================================================
--- branches/mgr-33/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java 2007-04-26 06:20:00 UTC (rev 256)
+++ branches/mgr-33/src/jar/resolver/java/org/mulgara/resolver/CreateModelOperation.java 2007-04-26 09:44:50 UTC (rev 257)
@@ -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