This commit is contained in:
sjm222 2011-03-10 21:42:06 +00:00
parent 52e0296f77
commit 17af40277c

View file

@ -45,10 +45,13 @@ public class FileGraphSetup implements ServletContextListener {
return; return;
} }
boolean aboxChanged = false; // indicates whether any ABox filegraph model has changed
boolean tboxChanged = false; // indicates whether any TBox filegraph model has changed
try { try {
OntModelSelectorImpl baseOms = (OntModelSelectorImpl) sce.getServletContext().getAttribute("baseOntModelSelector"); OntModelSelectorImpl baseOms = (OntModelSelectorImpl) sce.getServletContext().getAttribute("baseOntModelSelector");
Store kbStore = (Store) sce.getServletContext().getAttribute("kbStore"); Store kbStore = (Store) sce.getServletContext().getAttribute("kbStore");
// ABox files // ABox files
Set<String> pathSet = sce.getServletContext().getResourcePaths(PATH_ROOT + ABOX); Set<String> pathSet = sce.getServletContext().getResourcePaths(PATH_ROOT + ABOX);
@ -56,7 +59,7 @@ public class FileGraphSetup implements ServletContextListener {
if (pathSet != null) { if (pathSet != null) {
OntModel aboxBaseModel = baseOms.getABoxModel(); OntModel aboxBaseModel = baseOms.getABoxModel();
readGraphs(sce, pathSet, kbStore, ABOX, aboxBaseModel); aboxChanged = readGraphs(sce, pathSet, kbStore, ABOX, aboxBaseModel);
} }
// TBox files // TBox files
@ -66,7 +69,7 @@ public class FileGraphSetup implements ServletContextListener {
if (pathSet != null) { if (pathSet != null) {
OntModel tboxBaseModel = baseOms.getTBoxModel(); OntModel tboxBaseModel = baseOms.getTBoxModel();
readGraphs(sce, pathSet, kbStore, TBOX, tboxBaseModel); tboxChanged = readGraphs(sce, pathSet, kbStore, TBOX, tboxBaseModel);
} }
} catch (ClassCastException cce) { } catch (ClassCastException cce) {
String errMsg = "Unable to cast servlet context attribute to the appropriate type " + cce.getLocalizedMessage(); String errMsg = "Unable to cast servlet context attribute to the appropriate type " + cce.getLocalizedMessage();
@ -77,6 +80,10 @@ public class FileGraphSetup implements ServletContextListener {
log.error(t); log.error(t);
t.printStackTrace(); t.printStackTrace();
} }
if (aboxChanged | tboxChanged) {
SimpleReasonerSetup.setRecomputeRequired(sce.getServletContext());
}
} }
/* /*
@ -88,10 +95,12 @@ public class FileGraphSetup implements ServletContextListener {
* Note: no connection needs to be maintained between the in-memory copy of the * Note: no connection needs to be maintained between the in-memory copy of the
* graph and the DB copy. * graph and the DB copy.
*/ */
public void readGraphs(ServletContextEvent sce, Set<String> pathSet, Store kbStore, String type, OntModel baseModel) { public boolean readGraphs(ServletContextEvent sce, Set<String> pathSet, Store kbStore, String type, OntModel baseModel) {
int count = 0; int count = 0;
boolean modelChanged = false;
// For each file graph in the target directory update or add that graph to // For each file graph in the target directory update or add that graph to
// the Jena SDB, and attach the graph as a submodel of the base model // the Jena SDB, and attach the graph as a submodel of the base model
for ( String p : pathSet ) { for ( String p : pathSet ) {
@ -116,7 +125,7 @@ public class FileGraphSetup implements ServletContextListener {
log.info("Attached file graph as " + type + " submodel " + p); log.info("Attached file graph as " + type + " submodel " + p);
} }
updateGraphInDB(kbStore, model, type, p); modelChanged = modelChanged | updateGraphInDB(kbStore, model, type, p);
} catch (Exception ioe) { } catch (Exception ioe) {
log.error("Unable to process file graph " + p, ioe); log.error("Unable to process file graph " + p, ioe);
@ -137,7 +146,7 @@ public class FileGraphSetup implements ServletContextListener {
System.out.println("Read " + count + " " + type + " file graph" + ((count == 1) ? "" : "s") + " from " + PATH_ROOT + type); System.out.println("Read " + count + " " + type + " file graph" + ((count == 1) ? "" : "s") + " from " + PATH_ROOT + type);
return; return modelChanged;
} }
/* /*
@ -150,19 +159,22 @@ public class FileGraphSetup implements ServletContextListener {
* Otherwise, if a graph with the given name is in the DB and is isomorphic with * Otherwise, if a graph with the given name is in the DB and is isomorphic with
* the graph that was read from the files system, then do nothing. * the graph that was read from the files system, then do nothing.
*/ */
public void updateGraphInDB(Store kbStore, Model fileModel, String type, String path) { public boolean updateGraphInDB(Store kbStore, Model fileModel, String type, String path) {
String graphURI = pathToURI(path,type); String graphURI = pathToURI(path,type);
Model dbModel = SDBFactory.connectNamedModel(kbStore, graphURI); Model dbModel = SDBFactory.connectNamedModel(kbStore, graphURI);
boolean modelChanged = false;
if (dbModel.isEmpty() ) { if (dbModel.isEmpty() ) {
dbModel.add(fileModel); dbModel.add(fileModel);
modelChanged = true;
} else if (!dbModel.isIsomorphicWith(fileModel)) { } else if (!dbModel.isIsomorphicWith(fileModel)) {
dbModel.removeAll(); dbModel.removeAll();
dbModel.add(fileModel); dbModel.add(fileModel);
modelChanged = true;
} }
return; return modelChanged;
} }
/* /*