From e3d6e37ab914d5e01e421c751c865364b9ddb8f6 Mon Sep 17 00:00:00 2001 From: brianjlowe Date: Thu, 29 Aug 2013 10:58:34 -0400 Subject: [PATCH] support for domain qualification in property config --- .../vitro/webapp/dao/ObjectPropertyDao.java | 2 +- .../filtering/ObjectPropertyDaoFiltering.java | 4 +- .../dao/jena/ObjectPropertyDaoJena.java | 17 +++- .../webapp/dao/jena/PropertyDaoJena.java | 96 +++++++++++++------ .../vitro/webapp/dao/jena/VClassDaoJena.java | 7 +- .../VTwo/EditConfigurationUtils.java | 4 + .../EditRequestDispatchController.java | 9 +- .../edit/EditConfigurationTemplateModel.java | 1 + .../CollatedObjectPropertyTemplateModel.java | 2 +- .../individual/GroupedPropertyList.java | 25 +++-- .../ObjectPropertyStatementTemplateModel.java | 12 ++- .../ObjectPropertyTemplateModel.java | 4 + .../individual/PropertyTemplateModel.java | 1 + .../webapp/dao/ObjectPropertyDaoStub.java | 2 +- 14 files changed, 129 insertions(+), 57 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyDao.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyDao.java index 7d70cfc52..6c120ee79 100755 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyDao.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyDao.java @@ -15,7 +15,7 @@ public interface ObjectPropertyDao extends PropertyDao { public ObjectProperty getObjectPropertyByURI(String objectPropertyURI); - public ObjectProperty getObjectPropertyByURIAndRangeURI(String objectPropertyURI, String rangeURI); + public ObjectProperty getObjectPropertyByURIs(String objectPropertyURI, String domainURI, String rangeURI); public List getObjectPropertiesForObjectPropertyStatements(List /*of ObjectPropertyStatement */ objectPropertyStatements); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyDaoFiltering.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyDaoFiltering.java index 7e8704582..525301c3b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyDaoFiltering.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyDaoFiltering.java @@ -49,8 +49,8 @@ class ObjectPropertyDaoFiltering extends BaseFiltering implements ObjectProperty return (newOprop == null) ? null : new ObjectPropertyFiltering(newOprop, filters); } - public ObjectProperty getObjectPropertyByURIAndRangeURI(String objectPropertyURI, String rangeURI) { - ObjectProperty newOprop=innerObjectPropertyDao.getObjectPropertyByURIAndRangeURI(objectPropertyURI, rangeURI); + public ObjectProperty getObjectPropertyByURIs(String objectPropertyURI, String domainURI, String rangeURI) { + ObjectProperty newOprop=innerObjectPropertyDao.getObjectPropertyByURIs(objectPropertyURI, domainURI, rangeURI); return (newOprop == null) ? null : new ObjectPropertyFiltering(newOprop, filters); } 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 8c4dc5b25..8cef89672 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 @@ -284,19 +284,28 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp } } - public ObjectProperty getObjectPropertyByURIAndRangeURI(String propertyURI, String rangeURI) { + public ObjectProperty getObjectPropertyByURIs(String propertyURI, String domainURI, String rangeURI) { + if(log.isDebugEnabled()) { + log.debug("Getting " + propertyURI + " with domain " + domainURI + " and range " + rangeURI); + } ObjectProperty op = getObjectPropertyByURI(propertyURI); if (op == null || rangeURI == null) { return op; } + op.setDomainVClassURI(domainURI); op.setRangeVClassURI(rangeURI); String propQuery = "PREFIX rdfs: \n" + "PREFIX config: \n" + "PREFIX vitro: \n" + "SELECT ?range ?label ?group ?customForm ?displayLevel ?updateLevel WHERE { \n" + - " ?context config:configContextFor <" + propertyURI + "> . \n" + - " ?context config:qualifiedBy <" + rangeURI + "> . \n" + - " ?context config:hasConfiguration ?configuration . \n" + + " ?context config:configContextFor <" + propertyURI + "> . \n"; + if (domainURI != null) { + propQuery += " ?context config:qualifiedByDomain <" + domainURI + "> . \n"; + }; + if (rangeURI != null) { + propQuery += " ?context config:qualifiedBy <" + rangeURI + "> . \n"; + }; + propQuery += " ?context config:hasConfiguration ?configuration . \n" + " OPTIONAL { ?configuration config:propertyGroup ?group } \n" + " OPTIONAL { ?configuration config:displayName ?label } \n" + " OPTIONAL { ?configuration vitro:customEntryFormAnnot ?customForm } \n" + diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyDaoJena.java index ab79e8589..1e04c66e0 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyDaoJena.java @@ -34,6 +34,7 @@ import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.ResourceFactory; import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.rdf.model.StmtIterator; +import com.hp.hpl.jena.sdb.util.Pair; import com.hp.hpl.jena.shared.Lock; import com.hp.hpl.jena.sparql.resultset.ResultSetMem; import com.hp.hpl.jena.vocabulary.OWL; @@ -52,7 +53,8 @@ import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent; public class PropertyDaoJena extends JenaBaseDao implements PropertyDao { protected static final Log log = LogFactory.getLog(PropertyDaoJena.class.getName()); - + protected static final String FAUX_PROPERTY_FLAG = "FAUX"; + private static final Map NAMESPACES = new HashMap() {{ put("afn", VitroVocabulary.AFN); put("owl", VitroVocabulary.OWL); @@ -329,7 +331,7 @@ public class PropertyDaoJena extends JenaBaseDao implements PropertyDao { public List getClassesWithRestrictionOnProperty(String propertyURI) { if (propertyURI == null) { - log.info("getClassesWithRestrictionOnProperty: called with null propertyURI"); + log.warn("getClassesWithRestrictionOnProperty: called with null propertyURI"); return null; } @@ -524,15 +526,8 @@ public class PropertyDaoJena extends JenaBaseDao implements PropertyDao { } } - List piList = getAllPropInstByVClasses(vclasses); + return getAllPropInstByVClasses(vclasses); - for (PropertyInstance pi : piList) { - pi.setDomainClassURI(ind.getVClassURI()); - // TODO: improve. This is so the DWR property editing passes the - // individual's VClass to get the right restrictions - } - - return piList; } /* @@ -737,12 +732,36 @@ public class PropertyDaoJena extends JenaBaseDao implements PropertyDao { : (op.getRange() == null && foundRanges[1] != null) ? foundRanges[1] : op.getRange(); - propInsts.add(getPropInstForPropertyAndRange(op, rangeRes, applicableProperties)); - List additionalFauxSubpropertyRangeURIs = getAdditionalFauxSubpropertyRangeURIsForPropertyURI(propertyURI); - for (String rangeURI : additionalFauxSubpropertyRangeURIs) { - if (rangeRes == null || getWebappDaoFactory().getVClassDao().isSubClassOf(rangeURI, rangeRes.getURI())) { - propInsts.add(getPropInstForPropertyAndRange( - op, ResourceFactory.createResource(rangeURI), applicableProperties)); + Resource domainRes = op.getDomain(); + propInsts.add(getPropInst( + op, domainRes, rangeRes, applicableProperties)); + List> additionalFauxSubpropertyDomainAndRangeURIs = + getAdditionalFauxSubpropertyDomainAndRangeURIsForPropertyURI( + propertyURI); + for (Pair domainAndRangeURIs : + additionalFauxSubpropertyDomainAndRangeURIs) { + boolean applicablePropInst = false; + if (rangeRes == null || + !getWebappDaoFactory().getVClassDao().isSubClassOf( + rangeRes.getURI(), domainAndRangeURIs.getRight())) { + if (domainAndRangeURIs.getLeft() == null) { + applicablePropInst = true; + } else { + for(VClass vclass : vclasses) { + if (vclass.getURI() != null && vclass.getURI().equals( + domainAndRangeURIs.getLeft())) { + applicablePropInst = true; + break; + } + } + } + if (applicablePropInst) { + propInsts.add(getPropInst( + op, + ResourceFactory.createResource(domainAndRangeURIs.getLeft()), + ResourceFactory.createResource(domainAndRangeURIs.getRight()), + applicableProperties)); + } } } } @@ -755,10 +774,16 @@ public class PropertyDaoJena extends JenaBaseDao implements PropertyDao { } - private PropertyInstance getPropInstForPropertyAndRange(OntProperty op, Resource rangeRes, - Map applicableProperties) { + private PropertyInstance getPropInst(OntProperty op, Resource domainRes, Resource rangeRes, + Map applicableProperties) { + if (log.isDebugEnabled() && domainRes != null && rangeRes != null) { + log.debug("getPropInst() op: " + op.getURI() + " domain: " + + domainRes.getURI() + " range: " + rangeRes.getURI()); + } PropertyInstance pi = new PropertyInstance(); - String domainURIStr = getURIStr(op.getDomain()); + String domainURIStr = (domainRes != null && !domainRes.isAnon()) ? + domainURIStr = domainRes.getURI() + : null; if (rangeRes == null) { pi.setRangeClassURI(OWL.Thing.getURI()); // TODO see above } else { @@ -780,14 +805,16 @@ public class PropertyDaoJena extends JenaBaseDao implements PropertyDao { pi.setRangeClassName(range.getName()); } pi.setDomainClassURI(domainURIStr); - VClass domain = getWebappDaoFactory().getVClassDao() - .getVClassByURI(domainURIStr); - if (domain == null) { - domain = new VClass(); - domain.setURI(domainURIStr); - domain.setName(domain.getLocalName()); + if (domainURIStr != null) { + VClass domain = getWebappDaoFactory().getVClassDao() + .getVClassByURI(domainURIStr); + if (domain == null) { + domain = new VClass(); + domain.setURI(domainURIStr); + domain.setName(domain.getLocalName()); + } + pi.setDomainClassName(domain.getName()); } - pi.setDomainClassName(domain.getName()); pi.setSubjectSide(true); pi.setPropertyURI(op.getURI()); pi.setPropertyName(getLabelOrId(op)); // TODO @@ -796,14 +823,15 @@ public class PropertyDaoJena extends JenaBaseDao implements PropertyDao { return pi; } - private List getAdditionalFauxSubpropertyRangeURIsForPropertyURI(String propertyURI) { - List rangeURIs = new ArrayList(); + private List> getAdditionalFauxSubpropertyDomainAndRangeURIsForPropertyURI(String propertyURI) { + List> domainAndRangeURIs = new ArrayList>(); String propQuery = "PREFIX rdfs: \n" + "PREFIX config: \n" + "PREFIX vitro: \n" + - "SELECT ?range WHERE { \n" + + "SELECT ?domain ?range WHERE { \n" + " ?context config:configContextFor <" + propertyURI + "> . \n" + " ?context config:qualifiedBy ?range . \n" + + " OPTIONAL { ?context config:qualifiedByDomain ?domain } \n" + "}"; Query q = QueryFactory.create(propQuery); @@ -813,12 +841,18 @@ public class PropertyDaoJena extends JenaBaseDao implements PropertyDao { while (rs.hasNext()) { QuerySolution qsoln = rs.nextSolution(); Resource rangeRes = qsoln.getResource("range"); - rangeURIs.add(rangeRes.getURI()); + String rangeURI = rangeRes.getURI(); + Resource domainRes = qsoln.getResource("domain"); + String domainURI = null; + if (domainRes != null && !domainRes.isAnon()) { + domainURI = domainRes.getURI(); + } + domainAndRangeURIs.add(new Pair(domainURI, rangeURI)); } } finally { qe.close(); } - return rangeURIs; + return domainAndRangeURIs; } private String getURIStr(Resource res) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java index af559b5d0..1d168eb63 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java @@ -1093,11 +1093,8 @@ public class VClassDaoJena extends JenaBaseDao implements VClassDao { OntModel ontModel = getOntModel(); try { ontModel.enterCriticalSection(Lock.READ); - OntClass oc1 = getOntClass(ontModel, vclassURI1); - OntClass oc2 = getOntClass(ontModel, vclassURI2); - if (oc1 == null || oc2 == null) { - return false; - } + Resource oc1 = ontModel.getResource(vclassURI1); + Resource oc2 = ontModel.getResource(vclassURI2); return ontModel.contains(oc1, RDFS.subClassOf, oc2); } finally { ontModel.leaveCriticalSection(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtils.java index 97bd06225..534bce2a4 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtils.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtils.java @@ -53,6 +53,10 @@ public class EditConfigurationUtils { return vreq.getParameter("objectUri"); } + public static String getDomainUri(VitroRequest vreq) { + return vreq.getParameter("domainUri"); + } + public static String getRangeUri(VitroRequest vreq) { return vreq.getParameter("rangeUri"); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/controller/EditRequestDispatchController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/controller/EditRequestDispatchController.java index 1ba55f5ed..692f9212d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/controller/EditRequestDispatchController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/controller/EditRequestDispatchController.java @@ -202,6 +202,7 @@ public class EditRequestDispatchController extends FreemarkerHttpServlet { String editConfGeneratorName = null; String predicateUri = getPredicateUri(vreq); + String domainUri = EditConfigurationUtils.getDomainUri(vreq); String rangeUri = EditConfigurationUtils.getRangeUri(vreq); // *** handle the case where the form is specified as a request parameter *** @@ -218,7 +219,7 @@ public class EditRequestDispatchController extends FreemarkerHttpServlet { // *** check for a predicate URI in the request }else if( predicateUri != null && !predicateUri.isEmpty() ){ - Property prop = getProperty( predicateUri, rangeUri, vreq); + Property prop = getProperty( predicateUri, domainUri, rangeUri, vreq); if (prop != null && rangeUri != null) { editConfGeneratorName = getCustomEntryForm(prop); } else if( prop != null && prop.getCustomEntryForm() != null ){ @@ -258,11 +259,11 @@ public class EditRequestDispatchController extends FreemarkerHttpServlet { } } - private Property getProperty(String predicateUri, String rangeUri, VitroRequest vreq) { + private Property getProperty(String predicateUri, String domainUri, String rangeUri, VitroRequest vreq) { Property p = null; try{ - p = vreq.getWebappDaoFactory().getObjectPropertyDao().getObjectPropertyByURIAndRangeURI( - predicateUri, rangeUri); + p = vreq.getWebappDaoFactory().getObjectPropertyDao().getObjectPropertyByURIs( + predicateUri, domainUri, rangeUri); if(p == null) { p = vreq.getWebappDaoFactory().getDataPropertyDao().getDataPropertyByURI(predicateUri); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java index b74c130f7..95b4a80b5 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java @@ -459,6 +459,7 @@ public class EditConfigurationTemplateModel extends BaseTemplateModel { predicateUri, objectKey, null, + null, statementDisplay, null, vreq); ReadOnlyBeansWrapper wrapper = new ReadOnlyBeansWrapper(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java index 780fb050d..047854a73 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java @@ -218,7 +218,7 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM } listForThisSubclass.add(new ObjectPropertyStatementTemplateModel(subjectUri, - propertyUri, rangeUri, objectKey, map, getTemplateName(), vreq)); + propertyUri, domainUri, rangeUri, objectKey, map, getTemplateName(), vreq)); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java index a2af46880..7c023e022 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java @@ -89,7 +89,7 @@ public class GroupedPropertyList extends BaseTemplateModel { populatedObjectPropertyList.addAll(additions); propertyList.addAll(populatedObjectPropertyList); - + // If editing this page, merge in object properties applicable to the individual that are currently // unpopulated, so the properties are displayed to allow statements to be added to these properties. // RY In future, we should limit this to properties that the user has permission to add properties to. @@ -190,7 +190,7 @@ public class GroupedPropertyList extends BaseTemplateModel { if (pi != null) { if (!alreadyOnObjectPropertyList( populatedObjectPropertyList, pi)) { - addObjectPropertyToPropertyList(pi.getPropertyURI(), pi.getRangeClassURI(), + addObjectPropertyToPropertyList(pi.getPropertyURI(), pi.getDomainClassURI(), pi.getRangeClassURI(), propertyList); } } else { @@ -206,7 +206,7 @@ public class GroupedPropertyList extends BaseTemplateModel { // constitute a special case (i.e., included in piDao.getAllPossiblePropInstForIndividual()). for (String propertyUri : VITRO_PROPS_TO_ADD_TO_LIST) { if (!alreadyOnPropertyList(propertyList, propertyUri)) { - addObjectPropertyToPropertyList(propertyUri, null, propertyList); + addObjectPropertyToPropertyList(propertyUri, null, null, propertyList); } } } @@ -218,16 +218,29 @@ public class GroupedPropertyList extends BaseTemplateModel { } for (ObjectProperty op : opList) { if (op.getURI() != null && op.getURI().equals(pi.getPropertyURI())) { - return true; + if(op.getDomainVClassURI() == null) { + if(pi.getDomainClassURI() == null) { + return true; + } + } else if (op.getDomainVClassURI().equals(pi.getDomainClassURI())) { + return true; + } + if(op.getRangeVClassURI() == null) { + if (pi.getDomainClassURI() == null) { + return true; + } + } else if (op.getRangeVClassURI().equals(pi.getRangeClassURI())) { + return true; + } } } return false; } - private void addObjectPropertyToPropertyList(String propertyUri, String rangeUri, + private void addObjectPropertyToPropertyList(String propertyUri, String domainUri, String rangeUri, List propertyList) { ObjectPropertyDao opDao = wdf.getObjectPropertyDao(); - ObjectProperty op = opDao.getObjectPropertyByURIAndRangeURI(propertyUri, rangeUri); + ObjectProperty op = opDao.getObjectPropertyByURIs(propertyUri, domainUri, rangeUri); if (op == null) { log.error("ObjectProperty op returned null from opDao.getObjectPropertyByURI(" + propertyUri + ")"); } else if (op.getURI() == null) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyStatementTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyStatementTemplateModel.java index 9c94b25b4..ae7e145d5 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyStatementTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyStatementTemplateModel.java @@ -33,6 +33,11 @@ public class ObjectPropertyStatementTemplateModel extends PropertyStatementTempl public ObjectPropertyStatementTemplateModel(String subjectUri, String propertyUri, String rangeUri, String objectKey, Map data, String templateName, VitroRequest vreq) { + this (subjectUri, propertyUri, null, rangeUri, objectKey, data, templateName, vreq); + } + + public ObjectPropertyStatementTemplateModel(String subjectUri, String propertyUri, String domainUri, String rangeUri, String objectKey, + Map data, String templateName, VitroRequest vreq) { super(subjectUri, propertyUri, vreq); this.data = Collections.unmodifiableMap(new HashMap(data)); @@ -45,7 +50,7 @@ public class ObjectPropertyStatementTemplateModel extends PropertyStatementTempl // Do delete url first, since it is used in building edit url this.deleteUrl = makeDeleteUrl(); - this.editUrl = makeEditUrl(ops, rangeUri); + this.editUrl = makeEditUrl(ops, domainUri, rangeUri); } private String makeDeleteUrl() { @@ -90,7 +95,7 @@ public class ObjectPropertyStatementTemplateModel extends PropertyStatementTempl return UrlBuilder.getUrl(EDIT_PATH, params); } - private String makeEditUrl(ObjectPropertyStatement ops, String rangeUri) { + private String makeEditUrl(ObjectPropertyStatement ops, String domainUri, String rangeUri) { // Is the edit link suppressed for this property? if (new EditLinkSuppressor(vreq).isEditLinkSuppressed(propertyUri)) { return ""; @@ -115,6 +120,9 @@ public class ObjectPropertyStatementTemplateModel extends PropertyStatementTempl params.put("deleteProhibited", "prohibited"); } + if (domainUri != null) { + params.put("domainUri", rangeUri); + } if (rangeUri != null) { params.put("rangeUri", rangeUri); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java index 2e4fd2fd3..99da9d493 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java @@ -89,6 +89,7 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel setName(op.getDomainPublic()); sortDirection = op.getDomainEntitySortDirection(); + domainUri = op.getDomainVClassURI(); rangeUri = op.getRangeVClassURI(); // Get the config for this object property @@ -132,6 +133,9 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel "subjectUri", subjectUri, "predicateUri", propertyUri); + if (domainUri != null) { + params.put("domainUri", domainUri); + } if (rangeUri != null) { params.put("rangeUri", rangeUri); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java index 41cfabfb7..14a4db56b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java @@ -29,6 +29,7 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { protected final VitroRequest vreq; protected final String subjectUri; protected final String propertyUri; + protected String domainUri; protected String rangeUri; private final String localName; diff --git a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyDaoStub.java b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyDaoStub.java index 0017b9291..54ba17477 100644 --- a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyDaoStub.java +++ b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyDaoStub.java @@ -67,7 +67,7 @@ public class ObjectPropertyDaoStub implements ObjectPropertyDao { } @Override - public ObjectProperty getObjectPropertyByURIAndRangeURI(String objectPropertyURI, String rangeURI) { + public ObjectProperty getObjectPropertyByURIs(String objectPropertyURI, String domainURI, String rangeURI) { return getObjectPropertyByURI(objectPropertyURI); }