diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java index 862abb4f1..fecd7a46e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java @@ -517,8 +517,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { write(sw, response); } - protected void write(StringWriter sw, HttpServletResponse response) { - + protected void write(StringWriter sw, HttpServletResponse response) { try { PrintWriter out = response.getWriter(); out.print(sw); 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 17ebe61ca..8debf0476 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 @@ -2,9 +2,12 @@ package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -24,13 +27,19 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM CollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, WebappDaoFactory wdf) throws Exception { super(op, subject, wdf); + + String collationTargetError = getCollationTargetError(); + if ( ! collationTargetError.isEmpty()) { + String errorMessage = "Collation target error for collated object property " + getName() + ": " + + collationTargetError + " " + + "Creating uncollated property list instead."; + throw new Exception(errorMessage); + } - /* RY Temporarily throw an error because collation hasn't been implemented yet. We'll then use an uncollated one instead. - * In final version, throw an error if config doesn't contain collation-target element. We'll use an uncollated one instead. - */ + // RY Temporarily throw an error because collation hasn't been implemented yet. boolean error = true; if (error) { - throw new Exception("No collation target specified for collated object property " + op.getLabel()); + throw new Exception("No collation target specified for collated object property " + getName()); } ObjectPropertyStatementDao opDao = wdf.getObjectPropertyStatementDao(); @@ -49,6 +58,25 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM } + private String getCollationTargetError() { + String errorMessage = null; + String collationTarget = getCollationTarget(); + // Make sure the collation target is not null or empty. + if (collationTarget == null || collationTarget.trim().isEmpty()) { + errorMessage = "No collation target specified."; + } else { + // Make sure the collation target is one of the select terms in the query. + String queryString = getQueryString(); + String selectClause = queryString.substring(0, queryString.indexOf("{")); + Pattern collationTargetPattern = Pattern.compile("\\b\\\\?" + collationTarget + "\\b"); + Matcher matcher = collationTargetPattern.matcher(selectClause); + if (! matcher.find()) { + errorMessage = "Invalid collation target."; + } + } + return errorMessage; + } + private List getDirectVClasses(String key, List> data) { return null; } 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 573fee585..122e1c158 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 @@ -49,6 +49,7 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel try { return new CollatedObjectPropertyTemplateModel(op, subject, wdf); } catch (Exception e) { + log.error(e, e); return new UncollatedObjectPropertyTemplateModel(op, subject, wdf); } } else { 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 0a5c71406..1658f6a15 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 @@ -20,7 +20,6 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { protected Property property; // needed to get the edit links PropertyTemplateModel(Property property) { - this.name = property.getLabel(); // Do in subclass constructor. The label has not been set on the property, and getting the // label differs between object and data properties. // this.name = property.getLabel(); diff --git a/webapp/web/config/objectPropertyList-default.xml b/webapp/web/config/objectPropertyList-default.xml index 00282c162..0259dca75 100644 --- a/webapp/web/config/objectPropertyList-default.xml +++ b/webapp/web/config/objectPropertyList-default.xml @@ -2,7 +2,7 @@ - SELECT ?object { + SELECT ?object { ?subject ?property ?object . }