Fixed object property sorting on individual page for default list view. NIHVIVO-3415

Removed unused domainEntitySortField and rangeEntitySortField from ObjectProperty.
Added rangeEntitySortField back to property_retry.jsp.
This commit is contained in:
briancaruso 2012-06-21 17:10:14 +00:00
parent ceaf27a713
commit 9b30ecdcb1
8 changed files with 172 additions and 169 deletions

View file

@ -52,14 +52,12 @@ public class ObjectProperty extends Property implements Comparable<ObjectPropert
private String namespaceInverse = null; private String namespaceInverse = null;
private String localNameInverse = null; private String localNameInverse = null;
private String domainEntitySortField = null;
private String domainEntitySortDirection = null; private String domainEntitySortDirection = null;
private Integer domainDisplayTier = null; private Integer domainDisplayTier = null;
private Integer domainDisplayLimit = 5; private Integer domainDisplayLimit = 5;
private String objectIndividualSortPropertyURI = null; private String objectIndividualSortPropertyURI = null;
private String rangeEntitySortField = null;
private String rangeEntitySortDirection = null; private String rangeEntitySortDirection = null;
private Integer rangeDisplayTier = null; private Integer rangeDisplayTier = null;
private Integer rangeDisplayLimit = 5; private Integer rangeDisplayLimit = 5;

View file

@ -31,10 +31,20 @@ public interface ObjectPropertyStatementDao {
int insertNewObjectPropertyStatement(ObjectPropertyStatement objPropertyStmt ); int insertNewObjectPropertyStatement(ObjectPropertyStatement objPropertyStmt );
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(String subjectUri, String propertyUri, String objectKey, String query); // public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(
// String subjectUri,
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(String subjectUri, String propertyUri, String objectKey, String query, Set<String> constructQueries); // String propertyUri,
// String objectKey,
// String queryString,
// Set<String> constructQueryStrings);
public Map<String, String> getMostSpecificTypesInClassgroupsForIndividual(String subjectUri); public Map<String, String> getMostSpecificTypesInClassgroupsForIndividual(String subjectUri);
List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(
String subjectUri, String propertyUri, String objectKey,
String queryString, Set<String> constructQueryStrings,
String sortDirection);
} }

View file

@ -86,16 +86,12 @@ class ObjectPropertyStatementDaoFiltering extends BaseFiltering implements Objec
@Override @Override
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty( public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(
String subjectUri, String propertyUri, String objectKey, String query) { String subjectUri, String propertyUri, String objectKey, String query,
return getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, objectKey, query, null); Set<String> queryStrings, String sortDirection) {
}
@Override List<Map<String, String>> data =
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty( innerObjectPropertyStatementDao.getObjectPropertyStatementsForIndividualByProperty(
String subjectUri, String propertyUri, String objectKey, String query, Set<String> queryStrings) { subjectUri, propertyUri, objectKey, query, queryStrings,sortDirection);
List<Map<String, String>> data = innerObjectPropertyStatementDao.
getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, objectKey, query, queryStrings);
/* Filter the data /* Filter the data
* *
@ -137,4 +133,6 @@ class ObjectPropertyStatementDaoFiltering extends BaseFiltering implements Objec
} }
} }

View file

@ -266,27 +266,22 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
* However, we do need to get the object of the statement so that we have it to create editing links. * However, we do need to get the object of the statement so that we have it to create editing links.
*/ */
@Override
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(
String subjectUri,
String propertyUri,
String objectKey, String queryString) {
return getObjectPropertyStatementsForIndividualByProperty(
subjectUri, propertyUri, objectKey, objectKey, null);
}
@Override @Override
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty( public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(
String subjectUri, String subjectUri,
String propertyUri, String propertyUri,
String objectKey, String objectKey,
String queryString, Set<String> constructQueryStrings ) { String queryString,
Set<String> constructQueryStrings,
String sortDirection) {
Model constructedModel = constructModelForSelectQueries( Model constructedModel = constructModelForSelectQueries(
subjectUri, propertyUri, constructQueryStrings); subjectUri, propertyUri, constructQueryStrings);
if("desc".equalsIgnoreCase( sortDirection ) ){
queryString = queryString.replaceAll(" ASC\\(", " DESC(");
}
log.debug("Query string for object property " + propertyUri + ": " + queryString); log.debug("Query string for object property " + propertyUri + ": " + queryString);
Query query = null; Query query = null;

View file

@ -79,6 +79,7 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel
private PropertyListConfig config; private PropertyListConfig config;
private String objectKey; private String objectKey;
private String sortDirection;
ObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, ObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq,
boolean editing) boolean editing)
@ -87,6 +88,8 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel
super(op, subject, vreq); super(op, subject, vreq);
setName(op.getDomainPublic()); setName(op.getDomainPublic());
sortDirection = op.getDomainEntitySortDirection();
// Get the config for this object property // Get the config for this object property
try { try {
config = new PropertyListConfig(this, getFreemarkerTemplateLoader(), vreq, op, editing); config = new PropertyListConfig(this, getFreemarkerTemplateLoader(), vreq, op, editing);
@ -144,7 +147,8 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel
protected List<Map<String, String>> getStatementData() { protected List<Map<String, String>> getStatementData() {
ObjectPropertyStatementDao opDao = vreq.getWebappDaoFactory().getObjectPropertyStatementDao(); ObjectPropertyStatementDao opDao = vreq.getWebappDaoFactory().getObjectPropertyStatementDao();
return opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, objectKey, getSelectQuery(), getConstructQueries());
return opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, objectKey, getSelectQuery(), getConstructQueries(), sortDirection);
} }
protected abstract boolean isEmpty(); protected abstract boolean isEmpty();

View file

@ -217,15 +217,7 @@ public class ObjectPropertyStatementDaoStub implements
@Override @Override
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty( public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(
String subjectUri, String propertyUri, String objectKey, String subjectUri, String propertyUri, String objectKey,
String query) { String query, Set<String> constructQueries, String sortDir) {
throw new RuntimeException(
"ObjectPropertyStatementDaoStub.getObjectPropertyStatementsForIndividualByProperty() not implemented.");
}
@Override
public List<Map<String, String>> getObjectPropertyStatementsForIndividualByProperty(
String subjectUri, String propertyUri, String objectKey,
String query, Set<String> constructQueries) {
throw new RuntimeException( throw new RuntimeException(
"ObjectPropertyStatementDaoStub.getObjectPropertyStatementsForIndividualByProperty() not implemented."); "ObjectPropertyStatementDaoStub.getObjectPropertyStatementsForIndividualByProperty() not implemented.");
} }

View file

@ -32,7 +32,7 @@
FILTER ( afn:namespace(?subclass) != "http://vitro.mannlib.cornell.edu/ns/vitro/0.7#" ) FILTER ( afn:namespace(?subclass) != "http://vitro.mannlib.cornell.edu/ns/vitro/0.7#" )
</collated> </collated>
} ORDER BY <collated> ?subclass </collated> ?label ?label ?localName } ORDER BY <collated> ?subclass </collated> ASC( ?label ) ASC( ?label ) ASC( ?localName )
</query-select> </query-select>
<query-construct> <query-construct>

View file

@ -3,9 +3,9 @@
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %> <%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%-- colspan set to 4 in PropertyRetryController.java --%> <%-- colspan set to 5 in PropertyRetryController.java --%>
<tr class="editformcell"> <tr class="editformcell">
<td valign="top" colspan="1"> <td valign="top" colspan="2">
<b>Parent property</b><br/><br/> <b>Parent property</b><br/><br/>
<select name="ParentURI"><form:option name="ParentURI"/></select> <select name="ParentURI"><form:option name="ParentURI"/></select>
</td> </td>
@ -36,7 +36,7 @@
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</td> </td>
<td style="vertical-align:bottom;" valign="bottom" colspan="1"> <td style="vertical-align:bottom;" valign="bottom" colspan="2">
<b>Local name for property*</b> <b>Local name for property*</b>
<c:choose> <c:choose>
<c:when test="${_action eq 'update'}"> <c:when test="${_action eq 'update'}">
@ -75,7 +75,7 @@
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</td> </td>
<td style="vertical-align:bottom;" valign="bottom" colspan="1"> <td style="vertical-align:bottom;" valign="bottom" colspan="2">
<b>Optional: Inverse property local name</b> <b>Optional: Inverse property local name</b>
<c:choose> <c:choose>
<c:when test="${_action eq 'update'}"> <c:when test="${_action eq 'update'}">
@ -106,14 +106,14 @@
<b>Domain class</b><br /> <b>Domain class</b><br />
<select name="DomainVClassURI"><form:option name="DomainVClassURI"/></select> <select name="DomainVClassURI"><form:option name="DomainVClassURI"/></select>
</td> </td>
<td valign="top" colspan="2"> <td valign="top" colspan="3">
<b>Range class</b><br /> <b>Range class</b><br />
<select name="RangeVClassURI" ><form:option name="RangeVClassURI"/></select> <select name="RangeVClassURI" ><form:option name="RangeVClassURI"/></select>
</td> </td>
</tr> </tr>
<tr class="editformcell"> <tr class="editformcell">
<td valign="top" colspan="4"> <td valign="top" colspan="5">
<b>Public Description</b> for front-end users, as it will appear on editing forms<br/> <b>Public Description</b> for front-end users, as it will appear on editing forms<br/>
<textarea name="PublicDescription"><form:value name="PublicDescription"/></textarea> <textarea name="PublicDescription"><form:value name="PublicDescription"/></textarea>
<c:set var="PublicDescriptionError"><form:error name="PublicDescription"/></c:set> <c:set var="PublicDescriptionError"><form:error name="PublicDescription"/></c:set>
@ -122,48 +122,6 @@
</c:if> </c:if>
</td> </td>
</tr> </tr>
<tr class="editformcell">
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${transitive}">
<input name="Transitive" type="checkbox" value="TRUE" checked="checked"/>transitive
</c:when>
<c:otherwise>
<input name="Transitive" type="checkbox" value="TRUE"/>transitive
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${symmetric}">
<input name="Symmetric" type="checkbox" value="TRUE" checked="checked"/> symmetric
</c:when>
<c:otherwise>
<input name="Symmetric" type="checkbox" value="TRUE"/> symmetric
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${functional}">
<input name="Functional" type="checkbox" value="TRUE" checked="checked"/> functional
</c:when>
<c:otherwise>
<input name="Functional" type="checkbox" value="TRUE"/> functional
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${inverseFunctional}">
<input name="InverseFunctional" type="checkbox" value="TRUE" checked="checked"/> inverse functional
</c:when>
<c:otherwise>
<input name="InverseFunctional" type="checkbox" value="TRUE"/> inverse functional
</c:otherwise>
</c:choose>
</td>
</tr>
<tr class="editformcell"> <tr class="editformcell">
<td valign="bottom" colspan="1"> <td valign="bottom" colspan="1">
<em>Optional: display tier for this property<br /> <em>Optional: display tier for this property<br />
@ -174,7 +132,7 @@
<span class="notice"><c:out value="${DomainDisplayTierError}"/></span> <span class="notice"><c:out value="${DomainDisplayTierError}"/></span>
</c:if> </c:if>
</td> </td>
<td valign="bottom" colspan="1"> <td valign="bottom" colspan="2">
<em>Optional: display tier for this property's inverse<br /> <em>Optional: display tier for this property's inverse<br />
(<strong>lower</strong> numbers display first)</em><br/> (<strong>lower</strong> numbers display first)</em><br/>
<input name="RangeDisplayTier" value="<form:value name="RangeDisplayTier"/>" style="width:15%;" /> <input name="RangeDisplayTier" value="<form:value name="RangeDisplayTier"/>" style="width:15%;" />
@ -183,7 +141,7 @@
<span class="notice"><c:out value="${RangeDisplayTierError}"/></span> <span class="notice"><c:out value="${RangeDisplayTierError}"/></span>
</c:if> </c:if>
</td> </td>
<td valign="bottom" colspan="1"> <td valign="bottom" colspan="2">
<em>Related <strong>object individuals</strong> to display without collapsing<br /> <em>Related <strong>object individuals</strong> to display without collapsing<br />
(<strong>lower</strong> numbers display first)</em><br/> (<strong>lower</strong> numbers display first)</em><br/>
<input name="DomainDisplayLimit" value="<form:value name="DomainDisplayLimit"/>" style="width:15%;" /> <input name="DomainDisplayLimit" value="<form:value name="DomainDisplayLimit"/>" style="width:15%;" />
@ -192,89 +150,137 @@
<span class="notice"><c:out value="${DomainDisplayLimitError}"/></span> <span class="notice"><c:out value="${DomainDisplayLimitError}"/></span>
</c:if> </c:if>
</td> </td>
<td valign="bottom" colspan="1">
<em>Related <strong>object individuals of inverse property</strong> to display without collapsing</em><br />
(<strong>lower</strong> numbers display first)<br/>
<input name="RangeDisplayLimit" value="<form:value name="RangeDisplayLimit"/>" style="width:15%;" />
<c:set var="RangeDisplayLimitError"><form:error name="RangeDisplayLimit"/></c:set>
<c:if test="${!empty RangeDisplayLimitError}">
<span class="notice"><c:out value="${RangeDisplayLimitError}"/></span>
</c:if>
</td>
</tr> </tr>
<tr class="editformcell"> <tr class="editformcell">
<td valign="bottom" colspan="1"> <td valign="bottom" colspan="2">
<em>Optional: <strong>sort direction</strong><br />
(blank for ascending, &quot;desc&quot; for descending)</em><br/>
<input name="DomainEntitySortDirection" value="<form:value name="DomainEntitySortDirection"/>" />
<c:set var="DomainEntitySortDirectionError"><form:error name="DomainEntitySortDirection"/></c:set>
<c:if test="${!empty DomainEntitySortDirectionError}">
<span class="notice"><c:out value="${DomainEntitySortDirectionError}"/></span>
</c:if>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="5">
<c:choose> <c:choose>
<c:when test="${collateBySubclass}"> <c:when test="${collateBySubclass}">
<input name="CollateBySubclass" type="checkbox" value="TRUE" checked="checked"/>collate by subclass <input name="CollateBySubclass" type="checkbox" value="TRUE" checked="checked"/>collate by subclass
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<input name="CollateBySubclass" type="checkbox" value="TRUE"/>collate by subclass <input name="CollateBySubclass" type="checkbox" value="TRUE"/>collate by subclass
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</td> </td>
<td valign="bottom" colspan="1">
<em><strong>Caution:</strong>delete object when statement deleted?</em><br />
<c:choose>
<c:when test="${stubObjectRelation}">
<input name="StubObjectRelation" type="checkbox" value="TRUE" checked="checked"/>stub object relation with force delete
</c:when>
<c:otherwise>
<input name="StubObjectRelation" type="checkbox" value="TRUE"/>stub object relation with force delete
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<em>select from existing choices when adding statements?</em><br />
<c:choose>
<c:when test="${selectFromExisting}">
<input name="SelectFromExisting" type="checkbox" value="TRUE" checked="checked"/>provide selection
</c:when>
<c:otherwise>
<input name="SelectFromExisting" type="checkbox" value="TRUE"/>provide selection
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<em>when adding a new statement, also offer option to create new individual?</em><br />
<c:choose>
<c:when test="${offerCreateNewOption}">
<input name="OfferCreateNewOption" type="checkbox" value="TRUE" checked="checked"/>offer create option
</c:when>
<c:otherwise>
<input name="OfferCreateNewOption" type="checkbox" value="TRUE"/>offer create option
</c:otherwise>
</c:choose>
</td>
</tr> </tr>
<tr class="editformcell"> <tr class="editformcell">
<td valign="bottom" colspan="4"> <td valign="bottom" colspan="1">
<em>custom entry form</em><br /> <c:choose>
<input name="CustomEntryForm" size="30" value="<form:value name="CustomEntryForm"/>" /> <c:when test="${transitive}">
<c:set var="CustomEntryFormError"><form:error name="CustomEntryForm"/></c:set> <input name="Transitive" type="checkbox" value="TRUE" checked="checked"/>transitive
<c:if test="${!empty CustomEntryFormError}"> </c:when>
<span class="notice"><c:out value="${CustomEntryFormError}"/></span> <c:otherwise>
</c:if> <input name="Transitive" type="checkbox" value="TRUE"/>transitive
</c:otherwise>
</c:choose>
</td> </td>
</tr> <td valign="bottom" colspan="2">
<tr class="editformcell"> <c:choose>
<td valign="bottom" colspan="4"> <c:when test="${symmetric}">
<b>Example</b><br /> <input name="Symmetric" type="checkbox" value="TRUE" checked="checked"/> symmetric
<input name="Example" style="width:90%;" value="<form:value name="Example"/>" /> </c:when>
<c:set var="ExampleError"><form:error name="Example"/></c:set> <c:otherwise>
<c:if test="${!empty ExampleError}"> <input name="Symmetric" type="checkbox" value="TRUE"/> symmetric
<span class="notice"><c:out value="${ExampleError}"/></span> </c:otherwise>
</c:if> </c:choose>
</td> </td>
</tr> <td valign="bottom" colspan="1">
<tr class="editformcell"> <c:choose>
<td valign="bottom" colspan="4"> <c:when test="${functional}">
<b>Description</b> for ontology editors<br /> <input name="Functional" type="checkbox" value="TRUE" checked="checked"/> functional
<textarea name="Description" style="width:90%;"><form:value name="Description"/></textarea> </c:when>
<c:set var="DescriptionError"><form:error name="Description"/></c:set> <c:otherwise>
<c:if test="${!empty DescriptionError}"> <input name="Functional" type="checkbox" value="TRUE"/> functional
<span class="notice"><c:out value="${DescriptionError}"/></span> </c:otherwise>
</c:if> </c:choose>
</td>
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${inverseFunctional}">
<input name="InverseFunctional" type="checkbox" value="TRUE" checked="checked"/> inverse functional
</c:when>
<c:otherwise>
<input name="InverseFunctional" type="checkbox" value="TRUE"/> inverse functional
</c:otherwise>
</c:choose>
</td> </td>
</tr> </tr>
<tr class="editformcell">
<td valign="bottom" colspan="2">
<em>custom entry form</em><br />
<input name="CustomEntryForm" size="30" value="<form:value name="CustomEntryForm"/>" />
<c:set var="CustomEntryFormError"><form:error name="CustomEntryForm"/></c:set>
<c:if test="${!empty CustomEntryFormError}">
<span class="notice"><c:out value="${CustomEntryFormError}"/></span>
</c:if>
</td>
<td valign="bottom" colspan="1">
<em><strong>Caution:</strong>delete object when statement deleted?</em><br />
<c:choose>
<c:when test="${stubObjectRelation}">
<input name="StubObjectRelation" type="checkbox" value="TRUE" checked="checked"/>stub object relation with force delete
</c:when>
<c:otherwise>
<input name="StubObjectRelation" type="checkbox" value="TRUE"/>stub object relation with force delete
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<em>select from existing choices when adding statements?</em><br />
<c:choose>
<c:when test="${selectFromExisting}">
<input name="SelectFromExisting" type="checkbox" value="TRUE" checked="checked"/>provide selection
</c:when>
<c:otherwise>
<input name="SelectFromExisting" type="checkbox" value="TRUE"/>provide selection
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<em>when adding a new statement, also offer option to create new individual?</em><br />
<c:choose>
<c:when test="${offerCreateNewOption}">
<input name="OfferCreateNewOption" type="checkbox" value="TRUE" checked="checked"/>offer create option
</c:when>
<c:otherwise>
<input name="OfferCreateNewOption" type="checkbox" value="TRUE"/>offer create option
</c:otherwise>
</c:choose>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="5">
<b>Example</b><br />
<input name="Example" style="width:90%;" value="<form:value name="Example"/>" />
<c:set var="ExampleError"><form:error name="Example"/></c:set>
<c:if test="${!empty ExampleError}">
<span class="notice"><c:out value="${ExampleError}"/></span>
</c:if>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="5">
<b>Description</b> for ontology editors<br />
<textarea name="Description" style="width:90%;"><form:value name="Description"/></textarea>
<c:set var="DescriptionError"><form:error name="Description"/></c:set>
<c:if test="${!empty DescriptionError}">
<span class="notice"><c:out value="${DescriptionError}"/></span>
</c:if>
</td>
</tr>