diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/DataPropertyComparator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/DataPropertyComparator.java new file mode 100644 index 000000000..e2ba33d2c --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/DataPropertyComparator.java @@ -0,0 +1,43 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.beans; + +import java.util.Comparator; + +import com.hp.hpl.jena.vocabulary.XSD; + +public class DataPropertyComparator implements Comparator { + + private String dataPropertyUri = null; + + public DataPropertyComparator(String dataPropertyUri) { + this.dataPropertyUri = dataPropertyUri; + } + + public int compare(Individual ind1, Individual ind2) { + DataPropertyStatement s1 = ind1.getDataPropertyStatement(dataPropertyUri); + DataPropertyStatement s2 = ind2.getDataPropertyStatement(dataPropertyUri); + + String datatype = s1.getDatatypeURI(); + + int result; + + if (datatype.equals(XSD.xint.toString())) { + int i1 = Integer.valueOf(s1.getData()); + int i2 = Integer.valueOf(s2.getData()); + result = ((Integer) i1).compareTo(i2); + } + else if (datatype.equals(XSD.xstring.toString())) { + result = s1.getData().compareTo(s2.getData()); + } + // Fill in other types here + else { + throw new ClassCastException("Unsupported datatype"); + } + + return result; + } + + + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/Individual.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/Individual.java index 51ad79f85..ac0c5ba69 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/Individual.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/Individual.java @@ -49,6 +49,7 @@ public interface Individual extends ResourceBean, VitroTimeWindowedResource, Com void setDataPropertyStatements(List list); List getDataPropertyStatements(); List getDataPropertyStatements(String propertyUri); + DataPropertyStatement getDataPropertyStatement(String propertyUri); List getDataValues(String propertyUri); String getDataValue(String propertyUri); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/IndividualImpl.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/IndividualImpl.java index afaa5163c..d79c5f941 100755 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/IndividualImpl.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/IndividualImpl.java @@ -139,6 +139,11 @@ public class IndividualImpl extends BaseResourceBean implements Individual, Comp } return stmtsForProp; } + + public DataPropertyStatement getDataPropertyStatement(String propertyUri) { + List stmts = getDataPropertyStatements(propertyUri); + return stmts.isEmpty() ? null : stmts.get(0); + } public List getDataValues(String propertyUri) { List stmts = getDataPropertyStatements(propertyUri); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java index 0ca84ee6e..8b1c0eb4d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java @@ -84,9 +84,7 @@ public class IndividualFiltering implements Individual { List outDstmts = new LinkedList(); Filter.filter(dStmts,_filters.getDataPropertyStatementFilter(), outDstmts); return outDstmts; - } - - + } public Map getDataPropertyMap() { Map innerMap = _innerIndividual.getDataPropertyMap(); @@ -600,6 +598,12 @@ public class IndividualFiltering implements Individual { return stmts.isEmpty() ? null : stmts.get(0).getData(); } + public DataPropertyStatement getDataPropertyStatement(String propertyUri) { + List stmts = getDataPropertyStatements(propertyUri); + // Since the statements have been filtered, we can just take the first data value without filtering. + return stmts.isEmpty() ? null : stmts.get(0); + } + public List getRelatedIndividuals(String propertyUri) { List stmts = getObjectPropertyStatements(propertyUri); // Since the statements have been filtered, we can just take the individuals without filtering.