[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