package org.mulgara.resolver;
// Java 2 standard packages
// Java 2 enterprise packages
// Third party packages
import org.apache.log4j.Logger;
// Local packages
import org.mulgara.query.rdf.URIReferenceImpl;
import org.mulgara.resolver.spi.DatabaseMetadata;
import org.mulgara.resolver.spi.SingletonStatements;
import org.mulgara.resolver.spi.SystemResolver;
class BootstrapOperation implements Operation
{
/** Logger */
private static final Logger logger =
Logger.getLogger(BootstrapOperation.class.getName());
/**
* The URI of the model to be created.
*/
private final DatabaseMetadataImpl databaseMetadata;
private long result;
BootstrapOperation(DatabaseMetadataImpl databaseMetadata) {
if (databaseMetadata == null) {
throw new IllegalArgumentException("BootstrapSystemModel - databaseMetadata null ");
}
this.databaseMetadata = databaseMetadata;
this.result = -1; // Return invalid node by default.
}
public void execute(OperationContext operationContext,
SystemResolver systemResolver,
DatabaseMetadata metadata) throws Exception {
if (logger.isDebugEnabled()) logger.debug("Creating bootstrap nodes");
// Find the local node identifying the model
long graph = systemResolver.localizePersistent(
new URIReferenceImpl(databaseMetadata.getSystemModelURI()));
long rdfType = systemResolver.localizePersistent(
new URIReferenceImpl(databaseMetadata.getRdfTypeURI()));
long graphType = systemResolver.localizePersistent(
new URIReferenceImpl(databaseMetadata.getSystemModelTypeURI()));
// set up the system resolver to understand the system graph
systemResolver.initializeSystemNodes(graph, rdfType, graphType);
if (logger.isDebugEnabled()) logger.debug("Creating bootstrap statements");
// Use the session to create the model
systemResolver.modifyModel(graph, new SingletonStatements(graph, rdfType, graphType), true);
databaseMetadata.initializeSystemNodes(graph, rdfType, graphType);
// set up the default graph
long defaultGraph = systemResolver.localizePersistent(
new URIReferenceImpl(databaseMetadata.getDefaultGraphURI()));
systemResolver.modifyModel(graph, new SingletonStatements(defaultGraph, rdfType, graphType), true);
long preSubject = systemResolver.localizePersistent(
new URIReferenceImpl(databaseMetadata.getPreallocationSubjectURI()));
long prePredicate = systemResolver.localizePersistent(
new URIReferenceImpl(databaseMetadata.getPreallocationPredicateURI()));
long preModel = systemResolver.localizePersistent(
new URIReferenceImpl(databaseMetadata.getPreallocationModelURI()));
// Every node cached by DatabaseMetadata must be preallocated
systemResolver.modifyModel(preModel,
new SingletonStatements(preSubject, prePredicate, graph),
true);
systemResolver.modifyModel(preModel,
new SingletonStatements(preSubject, prePredicate, rdfType),
true);
systemResolver.modifyModel(preModel,
new SingletonStatements(preSubject, prePredicate, graphType),
true);
systemResolver.modifyModel(preModel,
new SingletonStatements(preSubject, prePredicate, preSubject),
true);
systemResolver.modifyModel(preModel,
new SingletonStatements(preSubject, prePredicate, prePredicate),
true);
systemResolver.modifyModel(preModel,
new SingletonStatements(preSubject, prePredicate, preModel),
true);
databaseMetadata.initializePreallocationNodes(preSubject, prePredicate, preModel);
result = graph;
}
public boolean isWriteOperation()
{
return true;
}
public long getResult() {
return result;
}
}