From eaa1d4ef78d80c1ad76f13c0c9cae81de6026377 Mon Sep 17 00:00:00 2001 From: rjy7 Date: Mon, 31 Jan 2011 22:47:14 +0000 Subject: [PATCH] NIHVIVO-1891 Don't do queries for properties known to be unpopulated --- .../CollatedObjectPropertyTemplateModel.java | 50 +++++++++++-------- .../individual/DataPropertyTemplateModel.java | 24 +++++---- .../individual/GroupedPropertyList.java | 13 ++--- .../ObjectPropertyTemplateModel.java | 7 +-- .../PropertyGroupTemplateModel.java | 8 +-- ...UncollatedObjectPropertyTemplateModel.java | 47 +++++++++-------- 6 files changed, 87 insertions(+), 62 deletions(-) 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 1cf74a2e3..b058fe926 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 @@ -45,32 +45,40 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM private WebappDaoFactory wdf; CollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, - VitroRequest vreq, EditingPolicyHelper policyHelper) - throws InvalidConfigurationException { + VitroRequest vreq, EditingPolicyHelper policyHelper, + List populatedObjectPropertyList) + throws InvalidConfigurationException { super(op, subject, vreq, policyHelper); - /* Get the data */ - wdf = vreq.getWebappDaoFactory(); - ObjectPropertyStatementDao opDao = wdf.getObjectPropertyStatementDao(); - String subjectUri = subject.getURI(); - String propertyUri = op.getURI(); - List> statementData = - opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getSelectQuery(), getConstructQueries()); - - /* Apply post-processing */ - postprocess(statementData, wdf); - - /* Collate the data */ - Map> unsortedSubclasses = - collate(subjectUri, propertyUri, statementData, vreq, policyHelper); - - /* Sort by subclass name */ subclasses = new TreeMap>(); - subclasses.putAll(unsortedSubclasses); - for (List list : subclasses.values()) { - postprocessStatementList(list); + if (populatedObjectPropertyList.contains(op)) { + log.debug("Getting data for populated object property " + getUri()); + /* Get the data */ + wdf = vreq.getWebappDaoFactory(); + ObjectPropertyStatementDao opDao = wdf.getObjectPropertyStatementDao(); + String subjectUri = subject.getURI(); + String propertyUri = op.getURI(); + List> statementData = + opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getSelectQuery(), getConstructQueries()); + + /* Apply post-processing */ + postprocess(statementData, wdf); + + /* Collate the data */ + Map> unsortedSubclasses = + collate(subjectUri, propertyUri, statementData, vreq, policyHelper); + + /* Sort by subclass name */ + subclasses = new TreeMap>(); + subclasses.putAll(unsortedSubclasses); + + for (List list : subclasses.values()) { + postprocessStatementList(list); + } + } else { + log.debug("Object property " + getUri() + " is unpopulated."); } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java index 8206253c3..9de79dbcb 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java @@ -29,17 +29,23 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel { private List statements; - DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq, EditingPolicyHelper policyHelper) { + DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq, + EditingPolicyHelper policyHelper, List populatedDataPropertyList) { + super(dp, subject, policyHelper); - setName(dp.getPublicName()); - - // Get the data property statements via a sparql query - DataPropertyStatementDao dpDao = vreq.getWebappDaoFactory().getDataPropertyStatementDao(); - List values = dpDao.getDataPropertyValuesForIndividualByProperty(subject, dp); - statements = new ArrayList(values.size()); - for (Literal value : values) { - statements.add(new DataPropertyStatementTemplateModel(subjectUri, propertyUri, value, policyHelper)); + statements = new ArrayList(); + + // If the property is populated, get the data property statements via a sparql query + if (populatedDataPropertyList.contains(dp)) { + log.debug("Getting data for populated data property " + getUri()); + DataPropertyStatementDao dpDao = vreq.getWebappDaoFactory().getDataPropertyStatementDao(); + List values = dpDao.getDataPropertyValuesForIndividualByProperty(subject, dp); + for (Literal value : values) { + statements.add(new DataPropertyStatementTemplateModel(subjectUri, propertyUri, value, policyHelper)); + } + } else { + log.debug("Data property " + getUri() + " is unpopulated."); } // Determine whether a new statement can be added 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 27148b10c..ebf339280 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 @@ -69,14 +69,14 @@ public class GroupedPropertyList extends BaseTemplateModel { // First get all the object properties that occur in statements in the db with this subject as subject. // This may include properties that are not defined as "possible properties" for a subject of this class, // so we cannot just rely on getting that list. - List objectPropertyList = subject.getPopulatedObjectPropertyList(); - propertyList.addAll(objectPropertyList); + List populatedObjectPropertyList = subject.getPopulatedObjectPropertyList(); + 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 CAN add properties to. if (policyHelper != null) { - mergeAllPossibleObjectProperties(objectPropertyList, propertyList); + mergeAllPossibleObjectProperties(populatedObjectPropertyList, propertyList); } // Now do much the same with data properties: get the list of populated data properties, then add in placeholders for missing ones @@ -85,8 +85,8 @@ public class GroupedPropertyList extends BaseTemplateModel { // DataPropertyStatements. Note that this does not apply to object properties, because the queries // can be customized and thus differ from property to property. So it's easier for now to keep the // two working in parallel. - List dataPropertyList = subject.getPopulatedDataPropertyList(); - propertyList.addAll(dataPropertyList); + List populatedDataPropertyList = subject.getPopulatedDataPropertyList(); + propertyList.addAll(populatedDataPropertyList); if (policyHelper != null) { mergeAllPossibleDataProperties(propertyList); @@ -100,7 +100,8 @@ public class GroupedPropertyList extends BaseTemplateModel { // Build the template data model from the groupList groups = new ArrayList(propertyGroupList.size()); for (PropertyGroup propertyGroup: propertyGroupList) { - groups.add(new PropertyGroupTemplateModel(vreq, propertyGroup, subject, policyHelper)); + groups.add(new PropertyGroupTemplateModel(vreq, propertyGroup, subject, + policyHelper, populatedDataPropertyList, populatedObjectPropertyList)); } } 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 a8fe697d0..17a6d92c8 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 @@ -169,18 +169,19 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel } protected static ObjectPropertyTemplateModel getObjectPropertyTemplateModel(ObjectProperty op, - Individual subject, VitroRequest vreq, EditingPolicyHelper policyHelper) { + Individual subject, VitroRequest vreq, EditingPolicyHelper policyHelper, + List populatedObjectPropertyList) { if (op.getCollateBySubclass()) { try { - return new CollatedObjectPropertyTemplateModel(op, subject, vreq, policyHelper); + return new CollatedObjectPropertyTemplateModel(op, subject, vreq, policyHelper, populatedObjectPropertyList); } catch (InvalidConfigurationException e) { log.warn(e.getMessage()); // If the collated config is invalid, instantiate an UncollatedObjectPropertyTemplateModel instead. } } try { - return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, policyHelper); + return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, policyHelper, populatedObjectPropertyList); } catch (InvalidConfigurationException e) { log.error(e.getMessage()); return null; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyGroupTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyGroupTemplateModel.java index 45a097812..1b5be6252 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyGroupTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyGroupTemplateModel.java @@ -24,7 +24,9 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel { private String name; private List properties; - PropertyGroupTemplateModel(VitroRequest vreq, PropertyGroup group, Individual subject, EditingPolicyHelper policyHelper) { + PropertyGroupTemplateModel(VitroRequest vreq, PropertyGroup group, + Individual subject, EditingPolicyHelper policyHelper, + List populatedDataPropertyList, List populatedObjectPropertyList) { this.name = group.getName(); List propertyList = group.getPropertyList(); @@ -32,9 +34,9 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel { for (Property p : propertyList) { if (p instanceof ObjectProperty) { ObjectProperty op = (ObjectProperty)p; - properties.add(ObjectPropertyTemplateModel.getObjectPropertyTemplateModel(op, subject, vreq, policyHelper)); + properties.add(ObjectPropertyTemplateModel.getObjectPropertyTemplateModel(op, subject, vreq, policyHelper, populatedObjectPropertyList)); } else { - properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, vreq, policyHelper)); + properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, vreq, policyHelper, populatedDataPropertyList)); } } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/UncollatedObjectPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/UncollatedObjectPropertyTemplateModel.java index 05d6754d3..cbcbcbe9a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/UncollatedObjectPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/UncollatedObjectPropertyTemplateModel.java @@ -21,31 +21,38 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat private List statements; - UncollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingPolicyHelper policyHelper) + UncollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, + VitroRequest vreq, EditingPolicyHelper policyHelper, + List populatedObjectPropertyList) throws InvalidConfigurationException { super(op, subject, vreq, policyHelper); + statements = new ArrayList(); - /* Get the data */ - WebappDaoFactory wdf = vreq.getWebappDaoFactory(); - ObjectPropertyStatementDao opDao = wdf.getObjectPropertyStatementDao(); - String subjectUri = subject.getURI(); - String propertyUri = op.getURI(); - List> statementData = - opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getSelectQuery(), getConstructQueries()); - - /* Apply postprocessing */ - postprocess(statementData, wdf); - - /* Put into data structure to send to template */ - statements = new ArrayList(statementData.size()); - String objectKey = getObjectKey(); - for (Map map : statementData) { - statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, - propertyUri, objectKey, map, policyHelper)); + if (populatedObjectPropertyList.contains(op)) { + log.debug("Getting data for populated object property " + getUri()); + /* Get the data */ + WebappDaoFactory wdf = vreq.getWebappDaoFactory(); + ObjectPropertyStatementDao opDao = wdf.getObjectPropertyStatementDao(); + String subjectUri = subject.getURI(); + String propertyUri = op.getURI(); + List> statementData = + opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getSelectQuery(), getConstructQueries()); + + /* Apply postprocessing */ + postprocess(statementData, wdf); + + /* Put into data structure to send to template */ + String objectKey = getObjectKey(); + for (Map map : statementData) { + statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, + propertyUri, objectKey, map, policyHelper)); + } + + postprocessStatementList(statements); + } else { + log.debug("Object property " + getUri() + " is unpopulated."); } - - postprocessStatementList(statements); } /* Access methods for templates */