diff --git a/webapp/config/web.xml b/webapp/config/web.xml index 7e2863c67..e5f2f3aca 100644 --- a/webapp/config/web.xml +++ b/webapp/config/web.xml @@ -72,18 +72,19 @@ edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetup + + + + + edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateKnowledgeBase + + 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/OntologyUpdater.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdater.java index 2915b5849..fa8110560 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 @@ -84,7 +84,7 @@ public class OntologyUpdater { AtomicOntologyChangeLists changes = new AtomicOntologyChangeLists(rawChanges, - settings.getOntModelSelector().getTBoxModel(), + settings.getNewTBoxModel(), settings.getOldTBoxModel()); //updateTBox(changes); @@ -186,7 +186,7 @@ public class OntologyUpdater { private void updateTBoxAnnotations() throws IOException { (new TBoxUpdater(settings.getOldTBoxAnnotationsModel(), settings.getNewTBoxAnnotationsModel(), - settings.getOntModelSelector().getTBoxModel(), logger, record)) + settings.getOntModelSelector().getABoxModel(), logger, record)) .updateVitroPropertyDefaultValues(); } 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 f5c58c98f..4e8418047 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 @@ -46,12 +46,16 @@ public class SimpleOntologyChangeRecord implements OntologyChangeRecord { public void recordAdditions(Model incrementalAdditions) { additionsModel.add(incrementalAdditions); - write(additionsModel, additionsFile); + if (additionsModel.size() > 0) { + write(additionsModel, additionsFile); + } } public void recordRetractions(Model incrementalRetractions) { retractionsModel.add(incrementalRetractions); - write(retractionsModel, retractionsFile); + if (retractionsModel.size() > 0) { + write(retractionsModel, retractionsFile); + } } private void write(Model model, File file) { 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 78b4ed7f3..ff32b825a 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 @@ -122,7 +122,11 @@ public class TBoxUpdater { if (!newObject.equals(oldObject)) { objects = siteModel.listObjectsOfProperty(subject,predicate); - + + if (!objects.hasNext()) { + continue; + } + RDFNode siteObject = objects.next(); if (objects.hasNext()) { logger.logError("Warning: found " + objects.toList().size() + @@ -163,18 +167,18 @@ public class TBoxUpdater { } } - siteModel.add(additions); - record.recordAdditions(additions); - siteModel.remove(retractions); - record.recordRetractions(retractions); + Model actualAdditions = additions.difference(retractions); + siteModel.add(actualAdditions); + record.recordAdditions(actualAdditions); + Model actualRetractions = retractions.difference(additions); + siteModel.remove(actualRetractions); + record.recordRetractions(actualRetractions); // log summary of changes - StmtIterator addedIter = additions.listStatements(); logger.log("Updated the default vitro annotation value for " + - addedIter.toList().size() + " statments in the knowledge base."); + actualAdditions.size() + " statments in the knowledge base."); - StmtIterator removedIter = retractions.listStatements(); - int numRemoved = removedIter.toList().size() - addedIter.toList().size(); + long numRemoved = actualRetractions.size() - actualAdditions.size(); logger.log("Removed " + numRemoved + " superfluous vitro annotation property settings from the knowledge base."); @@ -183,15 +187,21 @@ public class TBoxUpdater { // Model newAnnotationSettings = newTboxModel.difference(oldTboxModel); - siteModel.add(newAnnotationSettings); - record.recordAdditions(newAnnotationSettings); + Model newAnnotationSettingsToAdd = ModelFactory.createDefaultModel(); + StmtIterator newStmtIt = newAnnotationSettings.listStatements(); + while (newStmtIt.hasNext()) { + Statement stmt = newStmtIt.next(); + if (!siteModel.contains(stmt)) { + newAnnotationSettingsToAdd.add(stmt); + } + } + siteModel.add(newAnnotationSettingsToAdd); + record.recordAdditions(newAnnotationSettingsToAdd); // log the additions - iter = newAnnotationSettings.listStatements(); - //summary - logger.log("Added " + iter.toList().size() + " new annotation property settings to the knowledge base. This includes " + - "exsiting annotation properties applied to exsiting classes where they weren't applied before, or existing " + + logger.log("Added " + newAnnotationSettingsToAdd.size() + " new annotation property settings to the knowledge base. This includes " + + "existing annotation properties applied to existing classes where they weren't applied before, or existing " + "properties applied to new classes. No new annotation properties have been introduced."); //details 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 29d561917..76b2718d5 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 @@ -60,6 +60,7 @@ public class UpdateKnowledgeBase implements ServletContextListener { 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/"; + private final String NEW_TBOX_MODEL_DIR = "/WEB-INF/submodels/"; private final String OLD_TBOX_ANNOTATIONS_DIR = DATA_DIR + "oldAnnotations/"; private final String NEW_TBOX_ANNOTATIONS_DIR = "/WEB-INF/ontologies/user"; @@ -91,7 +92,8 @@ public class UpdateKnowledgeBase implements ServletContextListener { settings.setOntModelSelector(oms); OntModel oldTBoxModel = loadModelFromDirectory(ctx.getRealPath(OLD_TBOX_MODEL_DIR)); settings.setOldTBoxModel(oldTBoxModel); - settings.setNewTBoxModel(oms.getTBoxModel()); + OntModel newTBoxModel = loadModelFromDirectory(ctx.getRealPath(NEW_TBOX_MODEL_DIR)); + settings.setNewTBoxModel(newTBoxModel); OntModel oldTBoxAnnotationsModel = loadModelFromDirectory(ctx.getRealPath(OLD_TBOX_ANNOTATIONS_DIR)); settings.setOldTBoxAnnotationsModel(oldTBoxAnnotationsModel); OntModel newTBoxAnnotationsModel = loadModelFromDirectory(ctx.getRealPath(NEW_TBOX_ANNOTATIONS_DIR));