From 819f05039d816c0677a6f3922ca7780439c33ea1 Mon Sep 17 00:00:00 2001 From: bjl23 Date: Fri, 2 Apr 2010 16:10:14 +0000 Subject: [PATCH] improvements and bugfixes for NIHVIVO-205 ontology upgrade --- .../webapp/ontology/update/ABoxUpdater.java | 136 ++++++++++++------ .../ontology/update/OntologyChangeParser.java | 72 +++++----- .../ontology/update/OntologyUpdater.java | 25 ++-- .../update/SimpleOntologyChangeLogger.java | 2 + .../update/SimpleOntologyChangeRecord.java | 14 +- .../webapp/ontology/update/TBoxUpdater.java | 34 ++--- .../servlet/setup/UpdateKnowledgeBase.java | 97 +++++++------ 7 files changed, 222 insertions(+), 158 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/ABoxUpdater.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/ABoxUpdater.java index 762a6f3b9..2ac5a1378 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/ABoxUpdater.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/ABoxUpdater.java @@ -3,11 +3,13 @@ package edu.cornell.mannlib.vitro.webapp.ontology.update; import java.io.IOException; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.hp.hpl.jena.ontology.OntClass; import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.ontology.OntProperty; import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Model; @@ -36,6 +38,9 @@ public class ABoxUpdater { private OntModel aboxModel; private OntologyChangeLogger logger; private OntologyChangeRecord record; + private OntClass OWL_THING = (ModelFactory + .createOntologyModel(OntModelSpec.OWL_MEM)) + .createClass(OWL.Thing.getURI()); /** * @@ -127,10 +132,9 @@ public class ABoxUpdater { // Change class references in the subjects of statements StmtIterator iter = aboxModel.listStatements(oldClass, (Property) null, (RDFNode) null); - //log summary of changes - logger.log("Changing " + iter.toList().size() + " subject referernces to the " + oldClass.getURI() + " class to be " + newClass.getURI()); - - while (iter.hasNext()) { + int count = 0; + while (iter.hasNext()) { + count++; Statement oldStatement = iter.next(); Statement newStatement = ResourceFactory.createStatement(newClass, oldStatement.getPredicate(), oldStatement.getObject()); retractions.add(oldStatement); @@ -138,14 +142,18 @@ public class ABoxUpdater { logChange(oldStatement, false); logChange(newStatement,true); } + + //log summary of changes + if (count > 0) { + logger.log("Changing " + count + " subject referernces to the " + oldClass.getURI() + " class to be " + newClass.getURI()); + } // Change class references in the objects of statements iter = aboxModel.listStatements((Resource) null, (Property) null, oldClass); - //log summary of changes - logger.log("Changing " + iter.toList().size() + " object referernces to the " + oldClass.getURI() + " class to be " + newClass.getURI()); - - while (iter.hasNext()) { + count = 0; + while (iter.hasNext()) { + count++; Statement oldStatement = iter.next(); Statement newStatement = ResourceFactory.createStatement(oldStatement.getSubject(), oldStatement.getPredicate(), newClass); retractions.add(oldStatement); @@ -155,6 +163,11 @@ public class ABoxUpdater { logChanges(oldStatement, newStatement); } + //log summary of changes + if (count > 0) { + logger.log("Changing " + count + " object referernces to the " + oldClass.getURI() + " class to be " + newClass.getURI()); + } + aboxModel.remove(retractions); record.recordRetractions(retractions); aboxModel.add(additions); @@ -191,7 +204,18 @@ public class ABoxUpdater { return; } - ExtendedIterator classIter = addedClass.listSuperClasses(true); + List classList = addedClass.listSuperClasses(true).toList(); + List namedClassList = new ArrayList(); + for (OntClass ontClass : classList) { + if (!ontClass.isAnon()) { + namedClassList.add(ontClass); + } + } + if (namedClassList.isEmpty()) { + namedClassList.add(OWL_THING); + } + + Iterator classIter = namedClassList.iterator(); while (classIter.hasNext()) { OntClass parentOfAddedClass = classIter.next(); @@ -209,11 +233,13 @@ public class ABoxUpdater { indList += "\n\t" + stmt.getSubject().getURI(); } - //TODO - take out the detailed logging after our internal testing is completed. - logger.log("There are " + count + " individuals in the model that are of type " + parentOfAddedClass.getURI() + "," + - " and a new subclass of that class has been added: " + addedClass.getURI() + ". " + - "Please review the following individuals to see whether they should be of type: " + addedClass.getURI() + ":" + - indList ); + if (count > 0) { + //TODO - take out the detailed logging after our internal testing is completed. + logger.log("There are " + count + " individuals in the model that are of type " + parentOfAddedClass.getURI() + "," + + " and a new subclass of that class has been added: " + addedClass.getURI() + ". " + + "Please review the following individuals to see whether they should be of type: " + addedClass.getURI() + ":" + + indList ); + } } } } @@ -246,7 +272,17 @@ public class ABoxUpdater { return; } - OntClass parent = deletedClass.getSuperClass(); + List classList = deletedClass.listSuperClasses(true).toList(); + List namedClassList = new ArrayList(); + for (OntClass ontClass : classList) { + if (!ontClass.isAnon()) { + namedClassList.add(ontClass); + } + } + OntClass parent = (namedClassList.isEmpty()) + ? namedClassList.get(0) + : OWL_THING; + OntClass replacementClass = newTboxModel.getOntClass(parent.getURI()); while (replacementClass == null) { @@ -255,7 +291,7 @@ public class ABoxUpdater { } //log summary of changes - logger.log("CLass " + deletedClass.getURI() + " has been deleted. Any references to it in the knowledge base will be changed to " + + logger.log("Class " + deletedClass.getURI() + " has been deleted. Any references to it in the knowledge base will be changed to " + replacementClass.getURI()); AtomicOntologyChange chg = new AtomicOntologyChange(deletedClass.getURI(), replacementClass.getURI(), AtomicChangeType.RENAME); @@ -281,37 +317,50 @@ public class ABoxUpdater { private void addProperty(AtomicOntologyChange propObj) throws IOException{ OntProperty tempProperty = newTboxModel.getOntProperty - (propObj.getDestinationURI()).getSuperProperty(); + (propObj.getDestinationURI()); if (tempProperty == null) { + logger.logError("Unable to find property " + + propObj.getDestinationURI() + + " in newTBoxModel"); + return; + } + OntProperty superProperty = tempProperty.getSuperProperty(); + if (superProperty == null) { return; } int count = aboxModel.listStatements( - (Resource) null, tempProperty, (RDFNode) null).toSet().size(); - logger.log("The Property " + tempProperty.getURI() + - "which occurs " + count + "times in database has " + - "a new subProperty " + propObj.getDestinationURI() + - "added to Core 1.0"); - logger.log("Please review accordingly"); + (Resource) null, superProperty, (RDFNode) null).toSet().size(); + if (count > 0) { + logger.log("The Property " + superProperty.getURI() + + " which occurs " + count + " times in database has " + + "a new subProperty " + propObj.getDestinationURI() + + " in the new ontology version. "); + logger.log("Please review accordingly."); + } } private void deleteProperty(AtomicOntologyChange propObj) throws IOException{ OntProperty deletedProperty = oldTboxModel.getOntProperty(propObj.getSourceURI()); if (deletedProperty == null) { - // TODO - log + logger.logError("expected to find property " + + propObj.getSourceURI() + " in oldTBoxModel"); return; } + OntProperty replacementProperty = null; OntProperty parent = deletedProperty.getSuperProperty(); - OntProperty replacementProperty = newTboxModel.getOntProperty(parent.getURI()); - - while (replacementProperty == null) { - parent = parent.getSuperProperty(); - if (parent == null) { - break; - } - replacementProperty = newTboxModel.getOntProperty(parent.getURI()); - } + if (parent != null) { + replacementProperty = newTboxModel.getOntProperty(parent.getURI()); + + while (replacementProperty == null) { + parent = parent.getSuperProperty(); + if (parent == null) { + break; + } + replacementProperty = newTboxModel.getOntProperty(parent.getURI()); + } + } Model deletePropModel = ModelFactory.createDefaultModel(); @@ -325,9 +374,11 @@ public class ABoxUpdater { aboxModel.leaveCriticalSection(); } record.recordRetractions(deletePropModel); - logger.log(deletePropModel.size() + " statements using " + - propObj.getSourceURI() + " were removed. " + - " Please refer to the removed data model"); + if (deletePropModel.size() > 0) { + logger.log(deletePropModel.size() + " statements using " + + propObj.getSourceURI() + " were removed. " + + " Please refer to the removed data model"); + } } else { AtomicOntologyChange chg = new AtomicOntologyChange(deletedProperty.getURI(), replacementProperty.getURI(), AtomicChangeType.RENAME); renameProperty(chg); @@ -341,7 +392,8 @@ public class ABoxUpdater { OntProperty newProperty = newTboxModel.getOntProperty(propObj.getDestinationURI()); if (oldProperty == null || newProperty == null) { - // TODO - log + logger.logError(" expects non-null old property and new property " + + "URIs"); return; } @@ -369,10 +421,12 @@ public class ABoxUpdater { record.recordAdditions(renamePropAddModel); record.recordRetractions(renamePropRetractModel); - logger.log(renamePropRetractModel.size() + " statments using " + - "property " + propObj.getSourceURI() + " were changed to use " + - propObj.getDestinationURI() + " instead. Please refer to the " + - "removed data model and the added data model."); + if (renamePropRetractModel.size() > 0) { + logger.log(renamePropRetractModel.size() + " statments using " + + "property " + propObj.getSourceURI() + " were changed to use " + + propObj.getDestinationURI() + " instead. Please refer to the " + + "removed data model and the added data model."); + } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeParser.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeParser.java index 37a47a173..b54109c72 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeParser.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeParser.java @@ -24,6 +24,12 @@ import java.util.ArrayList; public class OntologyChangeParser { + private OntologyChangeLogger logger; + + public OntologyChangeParser(OntologyChangeLogger logger) { + this.logger = logger; + } + /** * @param args * @throws IOException @@ -32,6 +38,8 @@ public class OntologyChangeParser { @SuppressWarnings({ "unchecked", "null", "static-access" }) public ArrayList parseFile(String diffPath) throws IOException{ + logger.log("Parsing PromptDiff file at " + diffPath); + AtomicOntologyChange changeObj; ArrayList changeObjects = new ArrayList(); int countColumns = 0; @@ -42,56 +50,44 @@ public class OntologyChangeParser { StringTokenizer stArr = null; FileInputStream in = new FileInputStream(new File(diffPath)); CSVReader readFile = new SimpleReader(); + readFile.setSeperator('\t'); List rows = readFile.parse(in); for(int rowNum = 0; rowNum < rows.size(); rowNum++){ String[] cols = rows.get(rowNum); - - for(int col =0; col < cols.length; col++){ - String column = cols[col].trim(); - stArr = new StringTokenizer(column," "); - countColumns = stArr.countTokens(); + if (cols.length != 5) { + logger.logError("Invalid PromptDiff data at row " + (rowNum + 1) + + ". Expected 5 columns; found " + cols.length ); + } else { + changeObj = new AtomicOntologyChange(); - - if(countColumns == 4){ - - URI = stArr.nextToken(); - rename = stArr.nextToken(); - String check = stArr.nextToken(); - - if(check.equalsIgnoreCase("Add")){ - - AtomicChangeType atomicChangeType = changeObj.getAtomicChangeType(); - changeObj.setAtomicChangeType(atomicChangeType.ADD); - changeObj.setDestinationURI(URI); - changeObjects.add(changeObj); - - } - else{ - AtomicChangeType atomicChangeType = changeObj.getAtomicChangeType(); - changeObj.setAtomicChangeType(atomicChangeType.DELETE); - changeObj.setSourceURI(URI); - changeObjects.add(changeObj); - } - } - else{ - - sourceURI = stArr.nextToken(); - destinationURI = stArr.nextToken(); - AtomicChangeType atomicChangeType = changeObj.getAtomicChangeType(); - changeObj.setAtomicChangeType(atomicChangeType.RENAME); - changeObj.setSourceURI(sourceURI); - changeObj.setDestinationURI(destinationURI); - changeObjects.add(changeObj); - - } + if (cols[0] != null && cols[0].length() > 0) { + changeObj.setSourceURI(cols[0]); + } + if (cols[1] != null && cols[1].length() > 0) { + changeObj.setDestinationURI(cols[1]); + } + if ("Yes".equals(cols[2])) { + changeObj.setAtomicChangeType(AtomicChangeType.RENAME); + } else if ("Delete".equals(cols[3])) { + changeObj.setAtomicChangeType(AtomicChangeType.DELETE); + } else if ("Add".equals(cols[3])) { + changeObj.setAtomicChangeType(AtomicChangeType.ADD); + } else { + logger.logError("Invalid rename or change type data: '" + + cols[2] + " " + cols[3] + "'"); + } + changeObjects.add(changeObj); } } + if (changeObjects.size() == 0) { + logger.log("did not find any changes in PromptDiff output file."); + } return changeObjects; } 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 abcb095e7..b240dadad 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 @@ -9,6 +9,7 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -87,7 +88,7 @@ public class OntologyUpdater { updateTBoxAnnotations(); - // perform additional additions and retractions + logger.closeLogs(); } /** @@ -158,7 +159,8 @@ public class OntologyUpdater { private List getAtomicOntologyChanges() throws IOException { - return (new OntologyChangeParser()).parseFile(settings.getDiffFile()); + return (new OntologyChangeParser(logger)) + .parseFile(settings.getDiffFile()); } @@ -166,9 +168,9 @@ public class OntologyUpdater { private void updateABox(AtomicOntologyChangeLists changes) throws IOException { // TODO get models from somewhere - OntModel oldTBoxModel = null; - OntModel newTBoxModel = null; - OntModel ABoxModel = null; + OntModel oldTBoxModel = settings.getOldTBoxModel(); + OntModel newTBoxModel = settings.getNewTBoxModel(); + OntModel ABoxModel = settings.getOntModelSelector().getABoxModel(); ABoxUpdater aboxUpdater = new ABoxUpdater( oldTBoxModel, newTBoxModel, ABoxModel, logger, record); aboxUpdater.processPropertyChanges(changes.getAtomicPropertyChanges()); @@ -252,19 +254,20 @@ public class OntologyUpdater { */ private class AtomicOntologyChangeLists { - private List atomicClassChanges; + private List atomicClassChanges = + new ArrayList(); - private List atomicPropertyChanges; + private List atomicPropertyChanges = + new ArrayList(); public AtomicOntologyChangeLists ( List changeList, OntModel newTboxModel, OntModel oldTboxModel) throws IOException { - String str = null; Iterator listItr = changeList.iterator(); while(listItr.hasNext()){ AtomicOntologyChange changeObj = listItr.next(); - if(!changeObj.getSourceURI().equals(str)){ + if(changeObj.getSourceURI() != null){ if(oldTboxModel.getOntProperty(changeObj. getSourceURI()) != null){ atomicPropertyChanges.add(changeObj); @@ -279,7 +282,7 @@ public class OntologyUpdater { } } - else if(!changeObj.getDestinationURI().equals(str)){ + else if(changeObj.getDestinationURI() != null){ if(newTboxModel.getOntProperty(changeObj. getDestinationURI()) != null){ atomicPropertyChanges.add(changeObj); @@ -298,7 +301,7 @@ public class OntologyUpdater { + "Change Object skipped" ); } } - logger.log("Property and Class change Object lists seperated"); + //logger.log("Property and Class change Object lists separated"); } public List getAtomicClassChanges() { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeLogger.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeLogger.java index 56354e083..52e0ad724 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeLogger.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeLogger.java @@ -33,6 +33,7 @@ public class SimpleOntologyChangeLogger implements OntologyChangeLogger { String methodName = ((StackTraceElement)elements[1]).getMethodName(); logWriter.write(className + "." + methodName + ": " + logMessage + "\n"); + logWriter.flush(); } public void logError(String errorMessage) throws IOException { @@ -45,6 +46,7 @@ public class SimpleOntologyChangeLogger implements OntologyChangeLogger { int lineNumber = ((StackTraceElement)elements[1]).getLineNumber(); errorWriter.write(className + "." + methodName + " line " + lineNumber + ": " + errorMessage + "\n"); + errorWriter.flush(); } public void closeLogs() throws IOException { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeRecord.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeRecord.java index 7c5b2ff1c..18a67dcc8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeRecord.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeRecord.java @@ -3,6 +3,8 @@ package edu.cornell.mannlib.vitro.webapp.ontology.update; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -25,12 +27,16 @@ public class SimpleOntologyChangeRecord implements OntologyChangeRecord { public SimpleOntologyChangeRecord( String additionsFile, String retractionsFile) { this.additionsFile = new File(additionsFile); - if (!this.additionsFile.exists()) { - throw new RuntimeException(this.getClass().getName() + + try { + FileWriter test = new FileWriter(additionsFile); + } catch (IOException ioe) { + throw new RuntimeException(this.getClass().getName() + " unable to create required file at " + additionsFile); - } + } this.retractionsFile = new File(retractionsFile); - if (!this.retractionsFile.exists()) { + try { + FileWriter test = new FileWriter(retractionsFile); + } catch (IOException ioe) { throw new RuntimeException(this.getClass().getName() + " unable to create required file at " + retractionsFile); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/TBoxUpdater.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/TBoxUpdater.java index 0702c98b5..78b4ed7f3 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/TBoxUpdater.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/TBoxUpdater.java @@ -103,35 +103,35 @@ public class TBoxUpdater { NodeIterator objects = newTboxModel.listObjectsOfProperty(subject, predicate); - if ((objects == null) || (objects.toList().size() == 0) ) { - logger.logError("Error: found a statement for subject = " + subject.getURI() + - " and property = " + predicate.getURI() + - " in the old version but not the new version of the ontology."); - continue; - - } else if (objects.toList().size() > 1) { + if ((objects == null) || (!objects.hasNext()) ) { + retractions.add(siteModel.listStatements(subject, predicate, (RDFNode) null)); + //logger.log("Error: found a statement for subject = " + subject.getURI() + + // " and property = " + predicate.getURI() + + // " in the old version but not the new version of the ontology."); + continue; + } + + RDFNode newObject = objects.next(); + if (objects.hasNext()) { logger.logError("Error: found " + objects.toList().size() + " statements with subject = " + subject.getURI() + " and property = " + predicate.getURI() + " in the new version of the ontology. (maximum of one is expected)"); - continue; + continue; } - RDFNode newObject = objects.next(); - if (!newObject.equals(oldObject)) { objects = siteModel.listObjectsOfProperty(subject,predicate); - if (objects.toList().size() > 1) { + RDFNode siteObject = objects.next(); + if (objects.hasNext()) { logger.logError("Warning: found " + objects.toList().size() + " statements with subject = " + subject.getURI() + " and property = " + predicate.getURI() + " in the site model (maximum of one is expected). +" + " did not perform any update on this property"); - continue; + continue; } - - RDFNode siteObject = objects.next(); if (!siteObject.equals(oldObject)) { try { @@ -149,11 +149,11 @@ public class TBoxUpdater { additions.add(subject, predicate, newObject); logger.log("Changed the value of property " + predicate.getURI() + - " of class = " + subject.getURI() + + " of subject = " + subject.getURI() + " from " + - (newObject.isLiteral() ? ((Resource)oldObject).getURI() : ((Literal)oldObject).getLexicalForm()) + + (oldObject.isResource() ? ((Resource)oldObject).getURI() : ((Literal)oldObject).getLexicalForm()) + " to " + - (newObject.isLiteral() ? ((Resource)newObject).getURI() : ((Literal)newObject).getLexicalForm()) + + (newObject.isResource() ? ((Resource)newObject).getURI() : ((Literal)newObject).getLexicalForm()) + " in the knowledge base:\n"); } catch (Exception e) { logger.logError("Error trying to change the value of property " + predicate.getURI() + 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 61eefa024..ac9e70494 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 @@ -44,7 +44,7 @@ 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 CHANGED_DATA_DIR = "changedData/"; 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"; @@ -53,8 +53,10 @@ public class UpdateKnowledgeBase implements ServletContextListener { "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 + + private final String REMOVED_DATA_FILE = DATA_DIR + CHANGED_DATA_DIR + "removedData.rdf"; + private final String ADDED_DATA_FILE = DATA_DIR + CHANGED_DATA_DIR + + "addedData.rdf"; private final String SPARQL_CONSTRUCTS_DIR = DATA_DIR + "sparqlConstructs/"; private final String MISC_REPLACEMENTS_FILE = DATA_DIR + "miscReplacements.rdf"; private final String OLD_TBOX_MODEL_DIR = DATA_DIR + "oldVersion/"; @@ -63,53 +65,54 @@ public class UpdateKnowledgeBase implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { - // TODO remove when ready - if (true) { - return; - } - - 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.setSparqlConstructsDir(ctx.getRealPath(SPARQL_CONSTRUCTS_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)); - WebappDaoFactory wadf = (WebappDaoFactory) ctx.getAttribute("webappDaoFactory"); - settings.setDefaultNamespace(wadf.getDefaultNamespace()); - - OntModel oldTBoxModel = loadModelFromDirectory(ctx.getRealPath(OLD_TBOX_MODEL_DIR)); - settings.setOldTBoxModel(oldTBoxModel); - settings.setNewTBoxModel(oms.getTBoxModel()); - OntModel oldTBoxAnnotationsModel = loadModelFromDirectory(ctx.getRealPath(OLD_TBOX_ANNOTATIONS_DIR)); - settings.setOldTBoxAnnotationsModel(oldTBoxAnnotationsModel); - OntModel newTBoxAnnotationsModel = loadModelFromDirectory(ctx.getRealPath(NEW_TBOX_ANNOTATIONS_DIR)); - settings.setNewTBoxAnnotationsModel(newTBoxAnnotationsModel); - try { - doMiscAppMetadataReplacements(ctx.getRealPath(MISC_REPLACEMENTS_FILE), oms); - (new OntologyUpdater(settings)).update(); - } catch (IOException ioe) { - String errMsg = "IOException updating knowledge base " + - "for ontology changes: "; - // Tomcat doesn't always seem to print exceptions thrown from - // context listeners - System.out.println(errMsg); - ioe.printStackTrace(); - throw new RuntimeException(errMsg, ioe); - } - + + 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.setSparqlConstructsDir(ctx.getRealPath(SPARQL_CONSTRUCTS_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.setAddedDataFile(ctx.getRealPath(ADDED_DATA_FILE)); + settings.setRemovedDataFile(ctx.getRealPath(REMOVED_DATA_FILE)); + WebappDaoFactory wadf = (WebappDaoFactory) ctx.getAttribute("webappDaoFactory"); + settings.setDefaultNamespace(wadf.getDefaultNamespace()); + + settings.setOntModelSelector(oms); + OntModel oldTBoxModel = loadModelFromDirectory(ctx.getRealPath(OLD_TBOX_MODEL_DIR)); + settings.setOldTBoxModel(oldTBoxModel); + settings.setNewTBoxModel(oms.getTBoxModel()); + OntModel oldTBoxAnnotationsModel = loadModelFromDirectory(ctx.getRealPath(OLD_TBOX_ANNOTATIONS_DIR)); + settings.setOldTBoxAnnotationsModel(oldTBoxAnnotationsModel); + OntModel newTBoxAnnotationsModel = loadModelFromDirectory(ctx.getRealPath(NEW_TBOX_ANNOTATIONS_DIR)); + settings.setNewTBoxAnnotationsModel(newTBoxAnnotationsModel); + + try { + doMiscAppMetadataReplacements(ctx.getRealPath(MISC_REPLACEMENTS_FILE), oms); + (new OntologyUpdater(settings)).update(); + } catch (IOException ioe) { + String errMsg = "IOException updating knowledge base " + + "for ontology changes: "; + // Tomcat doesn't always seem to print exceptions thrown from + // context listeners + System.out.println(errMsg); + ioe.printStackTrace(); + throw new RuntimeException(errMsg, ioe); + } + } catch (Throwable t) { + t.printStackTrace(); + } }