changes related to NIHVIVO-264 ABox update
This commit is contained in:
parent
0f5fdf84de
commit
622f75e118
2 changed files with 86 additions and 50 deletions
|
@ -179,8 +179,7 @@ public class ABoxUpdater {
|
||||||
*/
|
*/
|
||||||
public void addClass(AtomicOntologyChange change) throws IOException {
|
public void addClass(AtomicOntologyChange change) throws IOException {
|
||||||
|
|
||||||
//TODO - is sourceURI the right thing here?
|
OntClass addedClass = newTboxModel.getOntClass(change.getDestinationURI());
|
||||||
OntClass addedClass = newTboxModel.getOntClass(change.getSourceURI());
|
|
||||||
|
|
||||||
if (addedClass == null) {
|
if (addedClass == null) {
|
||||||
// TODO - log
|
// TODO - log
|
||||||
|
@ -244,7 +243,6 @@ public class ABoxUpdater {
|
||||||
OntClass replacementClass = newTboxModel.getOntClass(parent.getURI());
|
OntClass replacementClass = newTboxModel.getOntClass(parent.getURI());
|
||||||
|
|
||||||
while (replacementClass == null) {
|
while (replacementClass == null) {
|
||||||
//ditto
|
|
||||||
parent = parent.getSuperClass();
|
parent = parent.getSuperClass();
|
||||||
replacementClass = newTboxModel.getOntClass(parent.getURI());
|
replacementClass = newTboxModel.getOntClass(parent.getURI());
|
||||||
}
|
}
|
||||||
|
@ -254,16 +252,15 @@ public class ABoxUpdater {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void processPropertyChanges(List<AtomicOntologyChange> changes) throws IOException {
|
public void processPropertyChanges(List<AtomicOntologyChange> changes) throws IOException {
|
||||||
Iterator propItr = changes.iterator();
|
Iterator<AtomicOntologyChange> propItr = changes.iterator();
|
||||||
while(propItr.hasNext()){
|
while(propItr.hasNext()){
|
||||||
AtomicOntologyChange propChangeObj = (AtomicOntologyChange)
|
AtomicOntologyChange propChangeObj = propItr.next();
|
||||||
propItr.next();
|
|
||||||
switch (propChangeObj.getAtomicChangeType()){
|
switch (propChangeObj.getAtomicChangeType()){
|
||||||
case ADD: addProperties(propChangeObj);
|
case ADD: addProperty(propChangeObj);
|
||||||
break;
|
break;
|
||||||
case DELETE: deleteProperties(propChangeObj);
|
case DELETE: deleteProperty(propChangeObj);
|
||||||
break;
|
break;
|
||||||
case RENAME: renameProperties(propChangeObj);
|
case RENAME: renameProperty(propChangeObj);
|
||||||
break;
|
break;
|
||||||
default: logger.logError("Property change can't be null");
|
default: logger.logError("Property change can't be null");
|
||||||
break;
|
break;
|
||||||
|
@ -271,64 +268,101 @@ public class ABoxUpdater {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addProperties(AtomicOntologyChange propObj) throws IOException{
|
private void addProperty(AtomicOntologyChange propObj) throws IOException{
|
||||||
Statement tempStatement = null;
|
|
||||||
OntProperty tempProperty = newTboxModel.getOntProperty
|
OntProperty tempProperty = newTboxModel.getOntProperty
|
||||||
(propObj.getDestinationURI()).getSuperProperty();
|
(propObj.getDestinationURI()).getSuperProperty();
|
||||||
StmtIterator stmItr = aboxModel.listStatements();
|
if (tempProperty == null) {
|
||||||
int count = 0;
|
return;
|
||||||
while(stmItr.hasNext()){
|
|
||||||
tempStatement = stmItr.nextStatement();
|
|
||||||
if(tempStatement.getPredicate().getURI().
|
|
||||||
equalsIgnoreCase(tempProperty.getURI())){
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
int count = aboxModel.listStatements(
|
||||||
|
(Resource) null, tempProperty, (RDFNode) null).toSet().size();
|
||||||
logger.log("The Property " + tempProperty.getURI() +
|
logger.log("The Property " + tempProperty.getURI() +
|
||||||
"which occurs " + count + "times in database has " +
|
"which occurs " + count + "times in database has " +
|
||||||
"a new subProperty " + propObj.getDestinationURI() +
|
"a new subProperty " + propObj.getDestinationURI() +
|
||||||
"added to Core 1.0");
|
"added to Core 1.0");
|
||||||
logger.log("Please review accordingly");
|
logger.log("Please review accordingly");
|
||||||
}
|
}
|
||||||
private void deleteProperties(AtomicOntologyChange propObj) throws IOException{
|
|
||||||
|
private void deleteProperty(AtomicOntologyChange propObj) throws IOException{
|
||||||
|
OntProperty deletedProperty = oldTboxModel.getOntProperty(propObj.getSourceURI());
|
||||||
|
|
||||||
|
if (deletedProperty == null) {
|
||||||
|
// TODO - log
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
OntModel deletePropModel = ModelFactory.createOntologyModel();
|
OntModel deletePropModel = ModelFactory.createOntologyModel();
|
||||||
Statement tempStatement = null;
|
|
||||||
StmtIterator stmItr = aboxModel.listStatements();
|
if (replacementProperty == null) {
|
||||||
while(stmItr.hasNext()){
|
aboxModel.enterCriticalSection(Lock.WRITE);
|
||||||
tempStatement = stmItr.nextStatement();
|
try {
|
||||||
if(tempStatement.getPredicate().getURI().equalsIgnoreCase
|
deletePropModel.add(aboxModel.listStatements(
|
||||||
(propObj.getSourceURI())){
|
(Resource) null, deletedProperty, (RDFNode) null));
|
||||||
deletePropModel.add(tempStatement);
|
aboxModel.remove(deletePropModel);
|
||||||
|
} finally {
|
||||||
|
aboxModel.leaveCriticalSection();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
aboxModel = (OntModel) aboxModel.difference(deletePropModel);
|
|
||||||
record.recordRetractions(deletePropModel);
|
record.recordRetractions(deletePropModel);
|
||||||
logger.log("All statements using " + propObj.getSourceURI() +
|
logger.log(deletePropModel.size() + " statements using " +
|
||||||
"were removed. Please refer removed data model");
|
propObj.getSourceURI() + " were removed. " +
|
||||||
|
" Please refer to the removed data model");
|
||||||
|
} else {
|
||||||
|
AtomicOntologyChange chg = new AtomicOntologyChange(deletedProperty.getURI(), replacementProperty.getURI(), AtomicChangeType.RENAME);
|
||||||
|
renameProperty(chg);
|
||||||
}
|
}
|
||||||
private void renameProperties(AtomicOntologyChange propObj){
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void renameProperty(AtomicOntologyChange propObj) throws IOException {
|
||||||
|
|
||||||
|
OntProperty oldProperty = oldTboxModel.getOntProperty(propObj.getSourceURI());
|
||||||
|
OntProperty newProperty = newTboxModel.getOntProperty(propObj.getDestinationURI());
|
||||||
|
|
||||||
|
if (oldProperty == null || newProperty == null) {
|
||||||
|
// TODO - log
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Model renamePropAddModel = ModelFactory.createDefaultModel();
|
Model renamePropAddModel = ModelFactory.createDefaultModel();
|
||||||
Model renamePropRetractModel =
|
Model renamePropRetractModel =
|
||||||
ModelFactory.createDefaultModel();
|
ModelFactory.createDefaultModel();
|
||||||
Statement tempStatement = null;
|
|
||||||
Property tempProperty = null;
|
aboxModel.enterCriticalSection(Lock.WRITE);
|
||||||
StmtIterator stmItr = aboxModel.listStatements();
|
try {
|
||||||
|
renamePropRetractModel.add( aboxModel.listStatements(
|
||||||
|
(Resource) null, oldProperty, (RDFNode) null));
|
||||||
|
StmtIterator stmItr = renamePropRetractModel.listStatements();
|
||||||
while(stmItr.hasNext()) {
|
while(stmItr.hasNext()) {
|
||||||
tempStatement = stmItr.nextStatement();
|
Statement tempStatement = stmItr.nextStatement();
|
||||||
if(tempStatement.getPredicate().getURI().
|
|
||||||
equalsIgnoreCase(propObj.getSourceURI())){
|
|
||||||
tempProperty = ResourceFactory.createProperty(
|
|
||||||
propObj.getDestinationURI());
|
|
||||||
aboxModel.remove(tempStatement);
|
|
||||||
renamePropRetractModel.add(tempStatement);
|
|
||||||
aboxModel.add(tempStatement.getSubject(),tempProperty
|
|
||||||
,tempStatement.getObject());
|
|
||||||
renamePropAddModel.add( tempStatement.getSubject(),
|
renamePropAddModel.add( tempStatement.getSubject(),
|
||||||
tempProperty,tempStatement.getObject());
|
newProperty,
|
||||||
|
tempStatement.getObject() );
|
||||||
}
|
}
|
||||||
|
aboxModel.remove(renamePropRetractModel);
|
||||||
|
aboxModel.add(renamePropAddModel);
|
||||||
|
} finally {
|
||||||
|
aboxModel.leaveCriticalSection();
|
||||||
}
|
}
|
||||||
|
|
||||||
record.recordAdditions(renamePropAddModel);
|
record.recordAdditions(renamePropAddModel);
|
||||||
record.recordRetractions(renamePropRetractModel);
|
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.");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -27,10 +27,12 @@ public class SimpleOntologyChangeLogger implements OntologyChangeLogger {
|
||||||
|
|
||||||
|
|
||||||
public void log(String logMessage) throws IOException {
|
public void log(String logMessage) throws IOException {
|
||||||
|
//TODO get calling method info from stack and include in message
|
||||||
logWriter.write(logMessage + "\n");
|
logWriter.write(logMessage + "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void logError(String errorMessage) throws IOException {
|
public void logError(String errorMessage) throws IOException {
|
||||||
|
//TODO get calling method info from stack and include in message
|
||||||
errorWriter.write(errorMessage + "\n");
|
errorWriter.write(errorMessage + "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue