diff --git a/webapp/config/web.xml b/webapp/config/web.xml
index 271dd8b68..7e2863c67 100644
--- a/webapp/config/web.xml
+++ b/webapp/config/web.xml
@@ -78,6 +78,12 @@
edu.cornell.mannlib.vitro.webapp.servlet.setup.AttachSubmodels
+
+
+
+ edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateKnowledgeBase
+
+
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdateSettings.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdateSettings.java
new file mode 100644
index 000000000..3521d84c9
--- /dev/null
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdateSettings.java
@@ -0,0 +1,72 @@
+package edu.cornell.mannlib.vitro.webapp.ontology.update;
+
+import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
+
+public class OntologyUpdateSettings {
+
+ private String dataDir;
+ private String askQueryFile;
+ private String successAssertionsFile;
+ private String successRDFFormat = "N3";
+ private String diffFile;
+ private String logFile;
+ private String errorLogFile;
+ private String removedDataFile;
+ private OntModelSelector ontModelSelector;
+
+ public String getDataDir() {
+ return dataDir;
+ }
+ public void setDataDir(String dataDir) {
+ this.dataDir = dataDir;
+ }
+ public String getAskQueryFile() {
+ return askQueryFile;
+ }
+ public void setAskQueryFile(String askQueryFile) {
+ this.askQueryFile = askQueryFile;
+ }
+ public String getSuccessAssertionsFile() {
+ return successAssertionsFile;
+ }
+ public void setSuccessAssertionsFile(String successAssertionsFile) {
+ this.successAssertionsFile = successAssertionsFile;
+ }
+ public String getSuccessRDFFormat() {
+ return successRDFFormat;
+ }
+ public void setSuccessRDFFormat(String successRDFFormat) {
+ this.successRDFFormat = successRDFFormat;
+ }
+ public String getDiffFile() {
+ return diffFile;
+ }
+ public void setDiffFile(String diffFile) {
+ this.diffFile = diffFile;
+ }
+ public OntModelSelector getOntModelSelector() {
+ return ontModelSelector;
+ }
+ public String getLogFile() {
+ return logFile;
+ }
+ public void setLogFile(String logFile) {
+ this.logFile = logFile;
+ }
+ public String getErrorLogFile() {
+ return errorLogFile;
+ }
+ public void setErrorLogFile(String errorLogFile) {
+ this.errorLogFile = errorLogFile;
+ }
+ public String getRemovedDataFile() {
+ return removedDataFile;
+ }
+ public void setRemovedDataFile(String removedDataFile) {
+ this.removedDataFile = removedDataFile;
+ }
+ public void setOntModelSelector(OntModelSelector ontModelSelector) {
+ this.ontModelSelector = ontModelSelector;
+ }
+
+}
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdater.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdater.java
index 736c3ddf9..f057f99e6 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdater.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdater.java
@@ -4,14 +4,13 @@ package edu.cornell.mannlib.vitro.webapp.ontology.update;
import java.io.BufferedReader;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
-import javax.servlet.ServletContext;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -19,12 +18,9 @@ import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
-import com.hp.hpl.jena.query.Syntax;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.shared.Lock;
-import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
-
/**
* Performs knowledge base updates if necessary to align with a
* new ontology version.
@@ -37,21 +33,14 @@ import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
*/
public class OntologyUpdater {
- private final String DATA_DIR = "/WEB-INF/ontologies/update/";
- private final String ASK_QUERY_FILE = DATA_DIR + "ask.sparql";
- private final String SUCCESS_ASSERTIONS_FILE = DATA_DIR + "success.n3";
- private final String SUCCESS_RDF_FORMAT = "N3";
- private final String DIFF_FILE = DATA_DIR + "diff.tab.txt";
+
private final Log log = LogFactory.getLog(OntologyUpdater.class);
- private ServletContext context;
- private OntModelSelector ontModelSelector;
+ private OntologyUpdateSettings settings;
- public OntologyUpdater(ServletContext context,
- OntModelSelector ontModelSelector) {
- this.context = context;
- this.ontModelSelector = ontModelSelector;
+ public OntologyUpdater(OntologyUpdateSettings settings) {
+ this.settings = settings;
}
public void update() throws IOException {
@@ -67,12 +56,12 @@ public class OntologyUpdater {
private void performUpdate() {
List changes = getAtomicOntologyChanges();
- //preprocessChanges(changes);
//updateTBox(changes);
+ //preprocessChanges(changes);
updateABox(changes);
- updateAnnotations();
+ updateTBoxAnnotations();
// perform additional additions and retractions
}
@@ -84,10 +73,9 @@ public class OntologyUpdater {
private void updateABox(List changes) {
// perform operations based on change objects
// run additional SPARQL CONSTRUCTS
-
}
- private void updateAnnotations() {
+ private void updateTBoxAnnotations() {
// Stella's code is called here
}
@@ -96,11 +84,11 @@ public class OntologyUpdater {
* needs to be updated to conform to a new ontology version
*/
private boolean updateRequired() throws IOException {
- String sparqlQueryStr = loadSparqlQuery(ASK_QUERY_FILE);
+ String sparqlQueryStr = loadSparqlQuery(settings.getAskQueryFile());
if (sparqlQueryStr == null) {
return false;
}
- Model m = ontModelSelector.getApplicationMetadataModel();
+ Model m = settings.getOntModelSelector().getApplicationMetadataModel();
Query query = QueryFactory.create(sparqlQueryStr);
QueryExecution qexec = QueryExecutionFactory.create(query, m);
@@ -117,7 +105,7 @@ public class OntologyUpdater {
* @return the query string or null if file not found
*/
private String loadSparqlQuery(String filePath) throws IOException {
- File file = new File(context.getRealPath(filePath));
+ File file = new File(settings.getAskQueryFile());
if (!file.exists()) {
return null;
}
@@ -130,15 +118,21 @@ public class OntologyUpdater {
return fileContents.toString();
}
- private void assertSuccess() {
- Model m = ontModelSelector.getApplicationMetadataModel();
- InputStream inStream = context.getResourceAsStream(SUCCESS_ASSERTIONS_FILE);
- m.enterCriticalSection(Lock.WRITE);
- try {
- m.read(inStream, SUCCESS_RDF_FORMAT);
- } finally {
- m.leaveCriticalSection();
- }
+ private void assertSuccess() throws FileNotFoundException {
+ try {
+ Model m = settings.getOntModelSelector().getApplicationMetadataModel();
+ File successAssertionsFile =
+ new File(settings.getSuccessAssertionsFile());
+ InputStream inStream = new FileInputStream(successAssertionsFile);
+ m.enterCriticalSection(Lock.WRITE);
+ try {
+ m.read(inStream, settings.getSuccessRDFFormat());
+ } finally {
+ m.leaveCriticalSection();
+ }
+ } catch (Exception e) {
+ // TODO: log something to the error log
+ }
}
}
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java
index 40be8b5b8..e2ecbbe63 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java
@@ -4,6 +4,7 @@ package edu.cornell.mannlib.vitro.webapp.servlet.setup;
import java.io.IOException;
+import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
@@ -12,6 +13,7 @@ import com.hp.hpl.jena.ontology.OntModel;
import edu.cornell.mannlib.vitro.webapp.dao.jena.JenaBaseDao;
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
import edu.cornell.mannlib.vitro.webapp.dao.jena.SimpleOntModelSelector;
+import edu.cornell.mannlib.vitro.webapp.ontology.update.OntologyUpdateSettings;
import edu.cornell.mannlib.vitro.webapp.ontology.update.OntologyUpdater;
/**
@@ -22,14 +24,41 @@ import edu.cornell.mannlib.vitro.webapp.ontology.update.OntologyUpdater;
*/
public class UpdateKnowledgeBase implements ServletContextListener {
+ private final String DATA_DIR = "/WEB-INF/ontologies/update/";
+ private final String LOG_DIR = "logs/";
+ private final String REMOVED_DATA_DIR = "removedData/";
+ private final String ASK_QUERY_FILE = DATA_DIR + "ask.sparql";
+ private final String SUCCESS_ASSERTIONS_FILE = DATA_DIR + "success.n3";
+ private final String SUCCESS_RDF_FORMAT = "N3";
+ private final String DIFF_FILE = DATA_DIR + "diff.tab.txt";
+ private final String LOG_FILE = DATA_DIR + LOG_DIR +
+ "knowledgeBaseUpdate.log";
+ private final String ERROR_LOG_FILE = DATA_DIR + LOG_DIR +
+ "knowledgeBaseUpdate.error.log";
+ private final String REMOVED_DATA_FILE = DATA_DIR + REMOVED_DATA_DIR +
+ "removedData.rdf";
+
public void contextInitialized(ServletContextEvent sce) {
+ ServletContext ctx = sce.getServletContext();
+
OntModelSelector oms = new SimpleOntModelSelector(
(OntModel) sce.getServletContext().getAttribute(
JenaBaseDao.ASSERTIONS_ONT_MODEL_ATTRIBUTE_NAME));
+ OntologyUpdateSettings settings = new OntologyUpdateSettings();
+ settings.setAskQueryFile(ctx.getRealPath(ASK_QUERY_FILE));
+ settings.setDataDir(ctx.getRealPath(DATA_DIR));
+ settings.setDiffFile(ctx.getRealPath(DIFF_FILE));
+ settings.setSuccessAssertionsFile(
+ ctx.getRealPath(SUCCESS_ASSERTIONS_FILE));
+ settings.setSuccessRDFFormat(ctx.getRealPath(SUCCESS_RDF_FORMAT));
+ settings.setLogFile(ctx.getRealPath(LOG_FILE));
+ settings.setErrorLogFile(ctx.getRealPath(ERROR_LOG_FILE));
+ settings.setRemovedDataFile(ctx.getRealPath(REMOVED_DATA_FILE));
+
try {
- (new OntologyUpdater(sce.getServletContext(), oms)).update();
+ (new OntologyUpdater(settings)).update();
} catch (IOException ioe) {
throw new RuntimeException("IOException updating knowledge base " +
"for ontology changes", ioe);