[Mulgara-svn] r929 - trunk/src/jar/resolver/java/org/mulgara/resolver
pag at mulgara.org
pag at mulgara.org
Wed May 14 03:58:48 UTC 2008
Author: pag
Date: 2008-05-13 20:58:47 -0700 (Tue, 13 May 2008)
New Revision: 929
Modified:
trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java
trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseResolverFactoryInitializer.java
trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java
Log:
Added support for creating default graphs when needed, and re-creating the graphs when necessary after a database has been restored
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java 2008-05-14 03:53:00 UTC (rev 928)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java 2008-05-14 03:58:47 UTC (rev 929)
@@ -771,9 +771,9 @@
contentHandlers,
systemResolverFactory);
- resolverFactoryList.add(
- ResolverFactoryFactory.newResolverFactory(className, initializer)
- );
+ ResolverFactory factory = ResolverFactoryFactory.newResolverFactory(className, initializer);
+ resolverFactoryList.add(factory);
+ initializer.addDefaultGraph(factory);
initializer.close(); // ensure that no further initialization is provided
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseResolverFactoryInitializer.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseResolverFactoryInitializer.java 2008-05-14 03:53:00 UTC (rev 928)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseResolverFactoryInitializer.java 2008-05-14 03:58:47 UTC (rev 929)
@@ -105,9 +105,27 @@
database.addModelType(modelType, resolverFactory);
}
- public boolean addDefaultGraph(URI graphType, URI graph, ResolverFactory resolverFactory) throws InitializerException {
- database.addModelType(graphType, resolverFactory);
- return false;
+ public boolean addDefaultGraph(ResolverFactory resolverFactory) throws InitializerException {
+ ResolverFactory.Graph[] defaultGraphs = resolverFactory.getDefaultGraphs();
+ if (defaultGraphs == null) return false;
+
+ // initialize the types to be handled by the resolver
+ for (ResolverFactory.Graph graph: defaultGraphs) {
+ database.addModelType(graph.getType(), resolverFactory);
+ }
+ boolean result = false;
+ DatabaseSession session = null;
+ try {
+ session = (DatabaseSession)database.newSession();
+ result = session.createDefaultGraphs(defaultGraphs);
+ session.close();
+ } catch (QueryException e) {
+ try {
+ if (session != null) session.close();
+ } catch (QueryException e2) { /* report first exception */ }
+ throw new InitializerException("Failed to create a resolver default graph", e);
+ }
+ return result;
}
public void addProtocol(String protocol, ResolverFactory resolverFactory) throws InitializerException {
@@ -152,7 +170,9 @@
try {
//!!FIXME: Can't add preallocate to Session until we switch over.
DatabaseSession session = (DatabaseSession)database.newSession();
- return session.preallocate(node);
+ long result = session.preallocate(node);
+ session.close();
+ return result;
} catch (QueryException eq) {
throw new InitializerException("Failed to preallocate node", eq);
}
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java 2008-05-14 03:53:00 UTC (rev 928)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java 2008-05-14 03:58:47 UTC (rev 929)
@@ -368,6 +368,9 @@
*/
public void restore(InputStream inputStream, URI serverURI, URI sourceURI) throws QueryException {
execute(new RestoreOperation(inputStream, serverURI, sourceURI), "Unable to restore from " + sourceURI);
+ for (ResolverFactory resFactory: resolverFactoryList) {
+ createDefaultGraphs(resFactory.getDefaultGraphs());
+ }
}
@@ -402,6 +405,15 @@
}
+ public boolean createDefaultGraph(URI modelURI, URI modelTypeURI) throws QueryException {
+ if (logger.isDebugEnabled()) logger.debug("Creating Graph " + modelURI + " with type " + modelTypeURI + " in the system graph");
+
+ CreateDefaultGraphOperation op = new CreateDefaultGraphOperation(modelURI, modelTypeURI);
+ execute(op, "Could not commit creation of model " + modelURI + " of type " + modelTypeURI);
+ return op.getResult();
+ }
+
+
public void removeModel(URI modelURI) throws QueryException {
if (logger.isDebugEnabled()) logger.debug("REMOVE MODEL: " + modelURI);
if (modelURI == null) throw new IllegalArgumentException("Null 'modelURI' parameter");
@@ -624,7 +636,23 @@
writing);
}
+ /**
+ * Creates a series of default graphs for a resolver.
+ * @param graphs An array of the graph names and types to create. May be null.
+ * @return <code>true</code> if any graphs were created, <code>false</code> otherwise.
+ * @throws QueryException If it was not possible to detect if the graph already existed.
+ */
+ boolean createDefaultGraphs(ResolverFactory.Graph[] graphs) throws QueryException {
+ boolean result = false;
+ if (graphs != null) {
+ for (ResolverFactory.Graph graph: graphs) {
+ result = result || createDefaultGraph(graph.getGraph(), graph.getType());
+ }
+ }
+ return result;
+ }
+
private void ensureTransactionFactorySelected() throws QueryException {
if (transactionFactory == null) assertInternallyManagedXA();
}
More information about the Mulgara-svn
mailing list