From 679d43a63311f43239fa698ace57f34cd84e8783 Mon Sep 17 00:00:00 2001 From: sjm222 Date: Thu, 1 Apr 2010 20:31:06 +0000 Subject: [PATCH] NIHVIVO-216 --- .../dao/jena/ObjectPropertyDaoJena.java | 177 +++++++++--------- 1 file changed, 87 insertions(+), 90 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java index 4986006d2..9b3237a59 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java @@ -387,6 +387,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp updateProperty(prop,getOntModel()); } + public void updateProperty(ObjectProperty prop, OntModel ontModel) { if (prop.getURI()==null || prop.getURI().length()<3) { return; @@ -400,20 +401,24 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp } com.hp.hpl.jena.ontology.ObjectProperty inv = null; if (hasInverse(prop)) { - try { - inv = ontModel.getObjectProperty(prop.getURIInverse()); - inv.setInverseOf(p); - p.setInverseOf(inv); - } catch (Exception e) { - System.out.println("Couldn't set "+prop.getURIInverse()+" as inverse"); - // BJL: What we really want to do here is create a new property as inverse - } + try { + inv = ontModel.getObjectProperty(prop.getURIInverse()); + + if (!inv.isInverseOf(p)) { + inv.setInverseOf(p); + p.setInverseOf(inv); + } + } catch (Exception e) { + System.out.println("Couldn't set "+prop.getURIInverse()+" as inverse"); + // BJL: What we really want to do here is create a new property as inverse + } } - try { - doUpdate(prop,p,inv,ontModel); - } catch (Exception e) { - e.printStackTrace(); - } + + try { + doUpdate(prop,p,inv,ontModel); + } catch (Exception e) { + e.printStackTrace(); + } } finally { getOntModel().getBaseModel().notifyEvent(new EditEvent(getWebappDaoFactory().getUserURI(),false)); ontModel.leaveCriticalSection(); @@ -422,32 +427,31 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp /* This method assumes that the caller is locking and unlocking the model */ private void doUpdate(ObjectProperty prop, OntProperty p, OntProperty inv, OntModel ontModel) { - if (inv != null) { - if ((prop.getRangePublic() != null) && (prop.getRangePublic().length() > 0)) { - inv.setLabel(prop.getRangePublic(), (String) getDefaultLanguage()); - } else { - inv.removeAll(RDFS.label); - } + + updateRDFSLabel(p,prop.getDomainPublic()); + + if (inv != null) { + updateRDFSLabel(inv,prop.getRangePublic()); } + try { - if (p.getSuperProperty() != null) { - p.removeSuperProperty(p.getSuperProperty()); - } String parentURI = prop.getParentURI(); if (parentURI != null) { com.hp.hpl.jena.ontology.ObjectProperty parent = ontModel.getObjectProperty(prop.getParentURI()); if (parent != null) { - p.addSuperProperty(parent); + + if (!p.hasSuperProperty(parent, true)) { + p.addSuperProperty(parent); + } + if (inv != null) { OntProperty parentInv = parent.getInverse(); - if (inv.getSuperProperty() != null) { - if (inv.getSuperProperty() != null) { - inv.removeSuperProperty(inv.getSuperProperty()); - } - } + if (parentInv != null) { - inv.setSuperProperty(parentInv); - } + if (!inv.hasSuperProperty(parentInv,true)) { + inv.setSuperProperty(parentInv); + } + } } } } @@ -456,10 +460,12 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp // plus, this whole section needs reworking log.error("Unable to update parent property for "+prop.getURI(), e); } + if (prop.getTransitive()) { if (!getOntModel().contains(p,RDF.type,OWL.TransitiveProperty)) { getOntModel().add(p,RDF.type,OWL.TransitiveProperty); } + if ( (inv != null) && (!getOntModel().contains(inv,RDF.type,OWL.TransitiveProperty))) { getOntModel().add(inv,RDF.type,OWL.TransitiveProperty); } @@ -471,6 +477,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp getOntModel().remove(inv,RDF.type,OWL.TransitiveProperty); } } + if (prop.getSymmetric()) { if (!getOntModel().contains(p,RDF.type,OWL.SymmetricProperty)) { getOntModel().add(p,RDF.type,OWL.SymmetricProperty); @@ -486,6 +493,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp getOntModel().remove(inv,RDF.type,OWL.SymmetricProperty); } } + if (prop.getFunctional()) { if (!getOntModel().contains(p,RDF.type,OWL.FunctionalProperty)) { getOntModel().add(p,RDF.type,OWL.FunctionalProperty); @@ -495,6 +503,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp getOntModel().remove(p,RDF.type,OWL.FunctionalProperty); } } + if (prop.getInverseFunctional()) { if (!getOntModel().contains(p,RDF.type,OWL.InverseFunctionalProperty)) { getOntModel().add(p,RDF.type,OWL.InverseFunctionalProperty); @@ -504,35 +513,48 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp getOntModel().remove(p,RDF.type,OWL.InverseFunctionalProperty); } } + +/* 3/29/2010 sjm. Commenting out per bjl. As far as we can tell from looking at the code, these fields + * are no longer used by the application. Leaving this here commented out for now though, + * just in case. Also, we deprecated the fields in ObjectProperty.java + + if (prop.getDomainSidePhasedOut() != null) { updatePropertyStringValue(p,PROPERTY_FULLPROPERTYNAMEANNOT,prop.getDomainSidePhasedOut(),ontModel); } if (prop.getRangeSidePhasedOut() != null && inv != null) { updatePropertyStringValue(inv,PROPERTY_FULLPROPERTYNAMEANNOT,prop.getRangeSidePhasedOut(),ontModel); } - if (prop.getDomainPublic() != null && prop.getDomainPublic().length() > 0) { - p.setLabel(prop.getDomainPublic(), (String) getDefaultLanguage()); - } else { - p.removeAll(RDFS.label); - } - p.removeAll(RDFS.domain); - if (inv != null) { - inv.removeAll(RDFS.range); - } +*/ + if ( (prop.getDomainVClassURI() != null) && (prop.getDomainVClassURI().length()>0) ) { - p.setDomain(ontModel.getResource(prop.getDomainVClassURI())); - if (inv != null) - inv.setRange(p.getDomain()); - } - p.removeAll(RDFS.range); - if (inv != null) { - inv.removeAll(RDFS.domain); + if (!p.hasDomain(ontModel.getResource(prop.getDomainVClassURI()))) { + p.setDomain(ontModel.getResource(prop.getDomainVClassURI())); + if (inv != null) { + inv.setRange(p.getDomain()); + } + } + } else { + p.removeAll(RDFS.domain); + if (inv != null) { + inv.removeAll(RDFS.range); + } } + if ( (prop.getRangeVClassURI() != null) && (prop.getRangeVClassURI().length()>0) ) { - p.setRange(ontModel.getResource(prop.getRangeVClassURI())); - if (inv != null) - inv.setDomain(p.getRange()); + if (!p.hasRange(ontModel.getResource(prop.getRangeVClassURI()))) { + p.setRange(ontModel.getResource(prop.getRangeVClassURI())); + if (inv != null) { + inv.setDomain(p.getRange()); + } + } + } else { + p.removeAll(RDFS.range); + if (inv != null) { + inv.removeAll(RDFS.domain); + } } + updatePropertyStringValue(p,EXAMPLE_ANNOT,prop.getExample(),getOntModel()); updatePropertyStringValue(p,DESCRIPTION_ANNOT,prop.getDescription(),getOntModel()); updatePropertyStringValue(p,PUBLIC_DESCRIPTION_ANNOT,prop.getPublicDescription(),getOntModel()); @@ -542,33 +564,21 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp if (inv != null) { updatePropertyStringValue(inv,EXAMPLE_ANNOT,prop.getExample(),getOntModel()); updatePropertyStringValue(inv,DESCRIPTION_ANNOT,prop.getDescription(),getOntModel()); - //updatePropertyStringValue(inv,PUBLIC_DESCRIPTION_ANNOT,prop.getPublicDescription(),getOntModel()); updatePropertyNonNegativeIntValue(inv,DISPLAY_LIMIT,prop.getRangeDisplayLimit(),getOntModel()); updatePropertyStringValue(inv,PROPERTY_ENTITYSORTFIELD,prop.getRangeEntitySortField(),getOntModel()); updatePropertyStringValue(inv,PROPERTY_ENTITYSORTDIRECTION,prop.getRangeEntitySortDirection(),getOntModel()); } - if (DISPLAY_RANK_ANNOT != null) { - try { - p.removeAll(DISPLAY_RANK_ANNOT); - if (prop.getDomainDisplayTier() != null) { - int domainDisplayTierInt = Integer.decode(prop.getDomainDisplayTier()); - if (domainDisplayTierInt > -1) { - p.addProperty(DISPLAY_RANK_ANNOT, prop.getDomainDisplayTier(), XSDDatatype.XSDint); - } + + if (prop.getDomainDisplayTier() != null) { + updatePropertyNonNegativeIntValue(p,DISPLAY_RANK_ANNOT,Integer.decode(prop.getDomainDisplayTier()),getOntModel()); + + if (inv != null) { + if (prop.getRangeDisplayTier() != null) { + updatePropertyNonNegativeIntValue(inv,DISPLAY_RANK_ANNOT,Integer.decode(prop.getRangeDisplayTier()),getOntModel()); } - } catch (NumberFormatException e) {} - if (inv != null) { - try { - inv.removeAll(DISPLAY_RANK_ANNOT); - if (prop.getRangeDisplayTier() != null) { - int rangeDisplayTierInt = Integer.decode(prop.getRangeDisplayTier()); - if (rangeDisplayTierInt >-1) { - inv.addProperty(DISPLAY_RANK_ANNOT, prop.getRangeDisplayTier(), XSDDatatype.XSDint); - } - } - } catch (NumberFormatException e) {} - } - } + } + } + String oldObjectIndividualSortPropertyURI = null; RDFNode sortPropertyNode = p.getPropertyValue(PROPERTY_OBJECTINDIVIDUALSORTPROPERTY); if (sortPropertyNode != null && sortPropertyNode instanceof Resource) { @@ -591,14 +601,12 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp } } - p.removeAll(HIDDEN_FROM_DISPLAY_BELOW_ROLE_LEVEL_ANNOT); - if (HIDDEN_FROM_DISPLAY_BELOW_ROLE_LEVEL_ANNOT != null && prop.getHiddenFromDisplayBelowRoleLevel() != null) { // only need to add if present - p.addProperty(HIDDEN_FROM_DISPLAY_BELOW_ROLE_LEVEL_ANNOT, ResourceFactory.createResource(prop.getHiddenFromDisplayBelowRoleLevel().getURI())); + if (prop.getHiddenFromDisplayBelowRoleLevel() != null) { + updatePropertyResourceURIValue(p, HIDDEN_FROM_DISPLAY_BELOW_ROLE_LEVEL_ANNOT, prop.getHiddenFromDisplayBelowRoleLevel().getURI()); } - p.removeAll(PROHIBITED_FROM_UPDATE_BELOW_ROLE_LEVEL_ANNOT); - if (PROHIBITED_FROM_UPDATE_BELOW_ROLE_LEVEL_ANNOT != null && prop.getProhibitedFromUpdateBelowRoleLevel() != null) { // only need to add if present - p.addProperty(PROHIBITED_FROM_UPDATE_BELOW_ROLE_LEVEL_ANNOT, ResourceFactory.createResource(prop.getProhibitedFromUpdateBelowRoleLevel().getURI())); + if (prop.getProhibitedFromUpdateBelowRoleLevel() != null) { + updatePropertyResourceURIValue(p, PROHIBITED_FROM_UPDATE_BELOW_ROLE_LEVEL_ANNOT, prop.getProhibitedFromUpdateBelowRoleLevel().getURI()); } updatePropertyStringValue(p,PROPERTY_CUSTOMENTRYFORMANNOT,prop.getCustomEntryForm(),ontModel); @@ -606,19 +614,8 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp updatePropertyBooleanValue(p,PROPERTY_OFFERCREATENEWOPTIONANNOT,prop.getOfferCreateNewOption(),ontModel,JenaBaseDao.KEEP_ONLY_IF_TRUE); updatePropertyBooleanValue(p,PROPERTY_STUBOBJECTPROPERTYANNOT,prop.getStubObjectRelation(),ontModel,JenaBaseDao.KEEP_ONLY_IF_TRUE); updatePropertyBooleanValue(p,PROPERTY_COLLATEBYSUBCLASSANNOT,prop.getCollateBySubclass(),ontModel,JenaBaseDao.KEEP_ONLY_IF_TRUE); - try { - p.removeAll(PROPERTY_INPROPERTYGROUPANNOT); - if (prop.getGroupURI() != null && prop.getGroupURI().length()>0) { - String badURIErrorStr = checkURI(prop.getGroupURI()); - if (badURIErrorStr == null) { - p.addProperty(PROPERTY_INPROPERTYGROUPANNOT, getOntModel().getResource(prop.getGroupURI())); - } else { - log.error(badURIErrorStr); - } - } - } catch (Exception e) { - log.error("error linking object property "+prop.getURI()+" to property group"); - } + + updatePropertyResourceURIValue(p, PROPERTY_INPROPERTYGROUPANNOT, prop.getGroupURI()); } public void deleteObjectProperty(ObjectProperty prop) {