diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java index 6ffd1f011..153891db7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java @@ -244,9 +244,18 @@ public class UrlBuilder { return getPath(route.path(), params); } + public static String getIndividualProfileUrl(String individualUri, WebappDaoFactory wadf) { + Individual individual = wadf.getIndividualDao().getIndividualByURI(individualUri); + return getIndividualProfileUrl(individual, individualUri, wadf); + } + public static String getIndividualProfileUrl(Individual individual, WebappDaoFactory wadf) { - String profileUrl = null; String individualUri = individual.getURI(); + return getIndividualProfileUrl(individual, individualUri, wadf); + } + + private static String getIndividualProfileUrl(Individual individual, String individualUri, WebappDaoFactory wadf) { + String profileUrl = null; URI uri = new URIImpl(individualUri); String namespace = uri.getNamespace(); String defaultNamespace = wadf.getDefaultNamespace(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDao.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDao.java index d15a0482b..6af64078a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDao.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDao.java @@ -30,5 +30,5 @@ public interface ObjectPropertyStatementDao { int insertNewObjectPropertyStatement(ObjectPropertyStatement objPropertyStmt ); - public List> getObjectPropertyStatementsForIndividualByProperty(String subjectUri, String propertyUri, String query); + public List> getObjectPropertyStatementsForIndividualByProperty(String subjectUri, String propertyUri, String query); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyStatementDaoFiltering.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyStatementDaoFiltering.java index 8b8c37da7..a0c71f9b9 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyStatementDaoFiltering.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyStatementDaoFiltering.java @@ -84,7 +84,7 @@ class ObjectPropertyStatementDaoFiltering extends BaseFiltering implements Objec @Override // RY What about filtering? - public List> getObjectPropertyStatementsForIndividualByProperty( + public List> getObjectPropertyStatementsForIndividualByProperty( String subjectUri, String propertyUri, String query) { return innerObjectPropertyStatementDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, query); } 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 ddd04e738..18213798b 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 @@ -898,9 +898,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp ResultSet results = qexec.execSelect(); while (results.hasNext()) { QuerySolution soln = results.next(); - Resource resource = soln.getResource("property"); - String uri = resource.getURI(); - ObjectProperty prop = getObjectPropertyByURI(uri); + ObjectProperty prop = getObjectPropertyByURI(soln.getResource("property").getURI()); String filename = soln.getLiteral("filename").getLexicalForm(); customListViewConfigFileMap.put(prop, filename); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java index 6aa2c26ab..10f26b59d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java @@ -251,7 +251,7 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec * custom queries that could request any data in addition to just the object of the statement. * However, we do need to get the object of the statement so that we have it to create editing links. */ - public List> getObjectPropertyStatementsForIndividualByProperty(String subjectUri, String propertyUri, String queryString) { + public List> getObjectPropertyStatementsForIndividualByProperty(String subjectUri, String propertyUri, String queryString) { log.debug("Object property query string: " + queryString); @@ -269,47 +269,16 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec // Run the SPARQL query to get the properties QueryExecution qexec = QueryExecutionFactory.create(query, getOntModelSelector().getFullModel(), bindings); - return executeQueryToObjectValueCollection(qexec); - } - - protected List> executeQueryToObjectValueCollection( - QueryExecution qexec) { - List> rv = new ArrayList>(); ResultSet results = qexec.execSelect(); + List> list = new ArrayList>(); + while (results.hasNext()) { QuerySolution soln = results.nextSolution(); - rv.add(querySolutionToObjectValueMap(soln)); + list.add(QueryUtils.querySolutionToStringValueMap(soln)); } - return rv; + return list; } - protected Map querySolutionToObjectValueMap( QuerySolution soln){ - Map map = new HashMap(); - Iterator varNames = soln.varNames(); - while(varNames.hasNext()){ - String varName = varNames.next(); - map.put(varName, nodeToObject( soln.get(varName))); - } - return map; - } + - protected Object nodeToObject( RDFNode node ){ - if( node == null ){ - return ""; - }else if( node.isLiteral() ){ - Literal literal = node.asLiteral(); - //return literal.getValue(); - return literal.getLexicalForm(); - }else if( node.isURIResource() ){ - Resource resource = node.asResource(); - // See notes in ObjectPropertyStatementTemplateModel about why we are returning the individual - // here instead of just the URI. - return getWebappDaoFactory().getIndividualDao().getIndividualByURI(resource.getURI()); - }else if( node.isAnon() ){ - Resource resource = node.asResource(); - return resource.getId().getLabelString(); //get b-node id - }else{ - return ""; - } - } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/QueryUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/QueryUtils.java new file mode 100644 index 000000000..bb2d9c8a2 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/QueryUtils.java @@ -0,0 +1,78 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.dao.jena; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.hp.hpl.jena.query.QueryExecution; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.rdf.model.Literal; +import com.hp.hpl.jena.rdf.model.RDFNode; +import com.hp.hpl.jena.rdf.model.Resource; + +/** + * Utilities for executing queries and working with query results. + * + */ + +public class QueryUtils { + + protected static Map querySolutionToObjectValueMap( QuerySolution soln){ + Map map = new HashMap(); + Iterator varNames = soln.varNames(); + while(varNames.hasNext()){ + String varName = varNames.next(); + map.put(varName, nodeToObject( soln.get(varName))); + } + return map; + } + + protected static Map querySolutionToStringValueMap( QuerySolution soln ){ + Map map = new HashMap(); + Iterator varNames = soln.varNames(); + while(varNames.hasNext()){ + String varName = varNames.next(); + map.put(varName, nodeToString( soln.get(varName))); + } + return map; + } + + protected static Object nodeToObject( RDFNode node ){ + if( node == null ){ + return ""; + }else if( node.isLiteral() ){ + Literal literal = node.asLiteral(); + return literal.getValue(); + }else if( node.isURIResource() ){ + Resource resource = node.asResource(); + return resource.getURI(); + }else if( node.isAnon() ){ + Resource resource = node.asResource(); + return resource.getId().getLabelString(); //get b-node id + }else{ + return ""; + } + } + + protected static String nodeToString( RDFNode node ){ + if( node == null ){ + return ""; + }else if( node.isLiteral() ){ + Literal literal = node.asLiteral(); + return literal.getLexicalForm(); + }else if( node.isURIResource() ){ + Resource resource = node.asResource(); + return resource.getURI(); + }else if( node.isAnon() ){ + Resource resource = node.asResource(); + return resource.getId().getLabelString(); //get b-node id + }else{ + return ""; + } + } +} 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 678180bcf..5c6a9d8ff 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 @@ -22,7 +22,7 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM private static final Log log = LogFactory.getLog(CollatedObjectPropertyTemplateModel.class); - private Map> collatedStatements; + private Map> subclasses; //private List subclassList; CollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, WebappDaoFactory wdf) throws Exception { @@ -53,16 +53,16 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM ObjectPropertyStatementDao opDao = wdf.getObjectPropertyStatementDao(); String subjectUri = subject.getURI(); String propertyUri = op.getURI(); - List> statementData = opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getQueryString()); - collatedStatements = new HashMap>(statementData.size()); + List> statementData = opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getQueryString()); + subclasses = new HashMap>(statementData.size()); // for (Map map : statementData) { // statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, map, wdf)); // } - if (statementData.size() > 0) { - String collationTarget = getCollationTarget(); - List vclasses = getDirectVClasses(collationTarget, statementData); - } +// if (statementData.size() > 0) { +// String collationTarget = getCollationTarget(); +// List vclasses = getDirectVClasses(collationTarget, statementData); +// } } @@ -92,7 +92,7 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM /* Access methods for templates */ public Map> getCollatedStatements() { - return collatedStatements; + return subclasses; } @Override 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 dafc2330b..a4bc288c5 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 @@ -19,24 +19,12 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel { private String subjectUri; // we'll use these to make the edit links private String propertyUri; - private Map data; - private WebappDaoFactory wdf; + private Map data; - ObjectPropertyStatementTemplateModel(String subjectUri, String propertyUri, Map data, WebappDaoFactory wdf) { + ObjectPropertyStatementTemplateModel(String subjectUri, String propertyUri, Map data) { this.subjectUri = subjectUri; this.propertyUri = propertyUri; - this.wdf = wdf; - this.data = new HashMap(data.size()); - // See comments above the StatementObject class definition on why we don't just set this.data = data. - for (String key : data.keySet()) { - Object value = data.get(key); - if (value instanceof Individual) { - Individual i = (Individual) value; - this.data.put(key, new StatementObject(i)); - } else { - this.data.put(key, value); - } - } + this.data = data; } /* This is a hopefully temporary solution to account for the fact that in the default @@ -75,28 +63,7 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel { * object getProfileUrl(String uri), so in the template we call ${statement.profileUrl(object)} (but still the semantics * is a bit weird, since the profile url doesn't belong to the statement). */ - public class StatementObject { - - private Individual individual; - - StatementObject(Individual individual) { - this.individual = individual; - } - - /* Access methods for templates */ - - public String getName() { - return individual.getName(); - } - - public String getMoniker() { - return individual.getMoniker(); - } - - public String getUrl() { - return UrlBuilder.getIndividualProfileUrl(individual, wdf); - } - } + /* Access methods for templates */ 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 335fa75aa..1d1d37ca5 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 @@ -3,6 +3,8 @@ package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; import java.io.File; +import java.util.List; +import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -15,6 +17,7 @@ import org.w3c.dom.NodeList; import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDao; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; @@ -44,6 +47,11 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel protected String getCollationTarget() { return config.collationTarget; } + + protected String getLinkTarget() { + return config.linkTarget; + } + protected static ObjectPropertyTemplateModel getObjectPropertyTemplateModel(ObjectProperty op, Individual subject, WebappDaoFactory wdf) { if (op.getCollateBySubclass()) { @@ -58,6 +66,23 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel } } + /** Applies preprocessing to query results to prepare for template */ + protected void preprocess(List> data, WebappDaoFactory wdf) { + /* First apply standard post-processing for all object properties */ + + // Add urls for link targets to the data + String linkTarget = config.linkTarget; + for (Map map : data) { + String targetUri = map.get(linkTarget); + if (targetUri != null) { + String targetUrl = UrlBuilder.getIndividualProfileUrl(targetUri, wdf); + map.put(linkTarget + "Url", targetUrl); + } + } + + /* Then apply custom post-processing specified in config */ + } + private class PropertyListConfig { private static final String DEFAULT_CONFIG_FILE = "objectPropertyList-default.xml"; @@ -65,10 +90,14 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel private static final String NODE_NAME_QUERY = "query"; private static final String NODE_NAME_TEMPLATE = "template"; private static final String NODE_NAME_COLLATION_TARGET = "collation-target"; + private static final String NODE_NAME_LINK_TARGET = "link-target"; + private static final String NODE_NAME_PREPROCESSOR = "preprocessor"; private String queryString; private String templateName; private String collationTarget; + private String linkTarget; // we could easily make this a list if we ever want multiple links + private String preprocessor; PropertyListConfig(ObjectProperty op, WebappDaoFactory wdf) throws Exception { @@ -93,9 +122,13 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(configFilePath); + // Required values queryString = getConfigValue(doc, NODE_NAME_QUERY); - templateName = getConfigValue(doc, NODE_NAME_TEMPLATE); + templateName = getConfigValue(doc, NODE_NAME_TEMPLATE); + // Optional values collationTarget = getConfigValue(doc, NODE_NAME_COLLATION_TARGET); + linkTarget = getConfigValue(doc, NODE_NAME_LINK_TARGET); // if this is null, no link will be generated + preprocessor = getConfigValue(doc, NODE_NAME_PREPROCESSOR); } catch (Exception e) { log.error("Error processing config file " + configFilePath + " for object property " + op.getURI(), e); // What should we do here? diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/SubclassList.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/SubclassList.java deleted file mode 100644 index b94f08e39..000000000 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/SubclassList.java +++ /dev/null @@ -1,41 +0,0 @@ -/* $This file is distributed under the terms of the license in /doc/license.txt$ */ - -package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; - -/** List of object property statements for an individual, where the objects belong to a single subclass **/ - -// RY ** This can probably be eliminated. It can be a map of subclass name to statements. - -public class SubclassList extends BaseTemplateModel { - - private static final Log log = LogFactory.getLog(SubclassList.class); - - String name; - List statements; - - SubclassList(String name) { - this.name = name; - this.statements = new ArrayList(); - - // get the obj property statements for this subclass from the db via a sparql query - - } - - /* Access methods for templates */ - - public String getName() { - return name; - } - - public List getStatements() { - return statements; - } -} 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 ee8561abf..05155ecfe 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 @@ -25,10 +25,11 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat ObjectPropertyStatementDao opDao = wdf.getObjectPropertyStatementDao(); String subjectUri = subject.getURI(); String propertyUri = op.getURI(); - List> statementData = opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getQueryString()); + List> statementData = opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getQueryString()); + preprocess(statementData, wdf); statements = new ArrayList(statementData.size()); - for (Map map : statementData) { - statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, map, wdf)); + for (Map map : statementData) { + statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, map)); } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/preprocessors/BaseObjectPropertyDataPreprocessor.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/preprocessors/BaseObjectPropertyDataPreprocessor.java new file mode 100644 index 000000000..b77efecac --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/preprocessors/BaseObjectPropertyDataPreprocessor.java @@ -0,0 +1,13 @@ +package edu.cornell.mannlib.vitro.webapp.web.templatemodels.preprocessors; + +import java.util.List; +import java.util.Map; + +public abstract class BaseObjectPropertyDataPreprocessor implements + ObjectPropertyDataPreprocessor { + + @Override + public abstract void preprocess(List> data); + + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/preprocessors/DefaultObjectPropertyDataPreprocessor.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/preprocessors/DefaultObjectPropertyDataPreprocessor.java new file mode 100644 index 000000000..9c8c28640 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/preprocessors/DefaultObjectPropertyDataPreprocessor.java @@ -0,0 +1,17 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.web.templatemodels.preprocessors; + +import java.util.List; +import java.util.Map; + +public class DefaultObjectPropertyDataPreprocessor extends + BaseObjectPropertyDataPreprocessor { + + @Override + public void preprocess(List> data) { + // TODO Auto-generated method stub + + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/preprocessors/ObjectPropertyDataPreprocessor.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/preprocessors/ObjectPropertyDataPreprocessor.java new file mode 100644 index 000000000..1e3d459df --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/preprocessors/ObjectPropertyDataPreprocessor.java @@ -0,0 +1,20 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.web.templatemodels.preprocessors; + +import java.util.List; +import java.util.Map; + +/** + * These preprocessors take a list of object property statement data derived from a + * SPARQL query (or other source) and prepare it for insertion into the template data model. + * + * @author rjy7 + * + */ + +public interface ObjectPropertyDataPreprocessor { + + public void preprocess(List> data); + +} diff --git a/webapp/web/config/objectPropertyList-default.xml b/webapp/web/config/objectPropertyList-default.xml index 0259dca75..f33109869 100644 --- a/webapp/web/config/objectPropertyList-default.xml +++ b/webapp/web/config/objectPropertyList-default.xml @@ -1,13 +1,22 @@ - - SELECT ?object { + + PREFIX vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> + PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> + + SELECT ?object ?name ?moniker { ?subject ?property ?object . + OPTIONAL { ?object rdfs:label ?name . } + OPTIONAL { ?object vitro:moniker ?moniker . } } object - + object + + + + \ No newline at end of file diff --git a/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl b/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl index 135d9f6b8..95923eefe 100644 --- a/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl +++ b/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl @@ -2,10 +2,6 @@ <#-- Template for property listing on individual profile page --> -<#-- RY Just a temporary fix to prevent classgroup heading from being pushed to the right edge of the page. -Feel free to redo/remove. --> -<#-->
--> - <#list propertyGroups as group> <#-- Get the group name --> @@ -17,7 +13,7 @@ Feel free to redo/remove. --> <#assign groupName = "other"> <#else> - <#-- If there are no groups, a dummy group has been created with a null name. --> + <#-- If there are no groups, a dummy group has been created with a null (as opposed to empty) name. --> <#assign groupName = ""> @@ -28,32 +24,27 @@ Feel free to redo/remove. -->

${groupName}

- <#-- Now list the properties in the group --> - - <#list group.properties as property> + <#-- List the properties in the group --> + <#list group.properties as property>
<#-- Property display name -->

${property.name}

- - <#-- List the statements for each property --> - <#if property.type == "data"> <#-- data property --> + + <#-- List the statements for each property --> + <#-- data property --> + <#if property.type == "data"> <#list property.statements as statement>

${statement.value}

- - - <#else> <#-- object property --> - <#if property.collatedBySubclass> - <#include "objectPropertyList-collated.ftl"> - <#else> -
    - <#include "${property.template}"> -
- + + <#-- object property --> + <#elseif property.collatedBySubclass> + <#include "objectPropertyList-collated.ftl"> + <#else> + <#include "objectPropertyList-statements.ftl"> - -
- - - + + + + diff --git a/webapp/web/templates/freemarker/body/partials/individual/objectPropertyList-default.ftl b/webapp/web/templates/freemarker/body/partials/individual/objectPropertyList-default.ftl deleted file mode 100644 index fc79e3e6c..000000000 --- a/webapp/web/templates/freemarker/body/partials/individual/objectPropertyList-default.ftl +++ /dev/null @@ -1,7 +0,0 @@ -<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> - -<#-- Default object property list template --> - -<#list property.statements as statement> -
  • ${statement.object.name} | ${statement.object.moniker!}
  • - diff --git a/webapp/web/templates/freemarker/body/partials/individual/objectPropertyList-statements.ftl b/webapp/web/templates/freemarker/body/partials/individual/objectPropertyList-statements.ftl new file mode 100644 index 000000000..799aeb8fc --- /dev/null +++ b/webapp/web/templates/freemarker/body/partials/individual/objectPropertyList-statements.ftl @@ -0,0 +1,10 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#-- Template to list statements for an object property --> +
      + <#list property.statements as statement> +
    • + <#include "${property.template}"> +
    • + +
    diff --git a/webapp/web/templates/freemarker/body/partials/individual/shortView-default.ftl b/webapp/web/templates/freemarker/body/partials/individual/shortView-default.ftl new file mode 100644 index 000000000..fb7bb9bbe --- /dev/null +++ b/webapp/web/templates/freemarker/body/partials/individual/shortView-default.ftl @@ -0,0 +1,5 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#-- Default object property statement template --> + +${statement.name!"object name here"} ${statement.moniker!"moniker here"}