diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/DataPropertyStatementDao.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/DataPropertyStatementDao.java index 780082833..48fcc3759 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/DataPropertyStatementDao.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/DataPropertyStatementDao.java @@ -38,5 +38,7 @@ public interface DataPropertyStatementDao { int insertNewDataPropertyStatement(DataPropertyStatement dataPropertyStatement ); + List getDataPropertyStatementsForIndividualByProperty(Individual subject, DataProperty property); + } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/DataPropertyStatementDaoFiltering.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/DataPropertyStatementDaoFiltering.java index 911efefa1..8039a9434 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/DataPropertyStatementDaoFiltering.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/DataPropertyStatementDaoFiltering.java @@ -89,6 +89,11 @@ class DataPropertyStatementDaoFiltering extends BaseFiltering implements DataPro DataPropertyStatement dataPropertyStatement) { return innerDataPropertyStatementDao.insertNewDataPropertyStatement(dataPropertyStatement); } - + + @Override + // RY What about filtering? + public List getDataPropertyStatementsForIndividualByProperty(Individual subject, DataProperty property) { + return innerDataPropertyStatementDao.getDataPropertyStatementsForIndividualByProperty(subject, property); + } } \ No newline at end of file diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoJena.java index b31ab637e..83ba2c853 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoJena.java @@ -10,6 +10,13 @@ import com.hp.hpl.jena.datatypes.TypeMapper; import com.hp.hpl.jena.ontology.DatatypeProperty; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntResource; +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryExecution; +import com.hp.hpl.jena.query.QueryExecutionFactory; +import com.hp.hpl.jena.query.QueryFactory; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.QuerySolutionMap; +import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.AnonId; import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Property; @@ -32,6 +39,23 @@ import edu.cornell.mannlib.vitro.webapp.dao.jena.event.IndividualUpdateEvent; public class DataPropertyStatementDaoJena extends JenaBaseDao implements DataPropertyStatementDao { + protected static final String dataPropertyValueQueryString = + "SELECT ?value WHERE { \n" + + //" GRAPH ?g {\n" + + " ?subject ?property ?value . \n" + + //" }\n" + + "}"; + + static protected Query dataPropertyValueQuery; + static { + try { + dataPropertyValueQuery = QueryFactory.create(dataPropertyValueQueryString); + } catch(Throwable th){ + log.error("could not create SPARQL query for dataPropertyQueryString " + th.getMessage()); + log.error(dataPropertyValueQueryString); + } + } + public DataPropertyStatementDaoJena(WebappDaoFactoryJena wadf) { super(wadf); } @@ -254,4 +278,32 @@ public class DataPropertyStatementDaoJena extends JenaBaseDao implements DataPro return l; } + @Override + /* + * SPARQL-based method for getting the individual's values for a single data property. + */ + public List getDataPropertyStatementsForIndividualByProperty(Individual subject, DataProperty property) { + log.debug("dataPropertyValueQueryString:\n" + dataPropertyValueQueryString); + log.debug("dataPropertyValueQuery:\n" + dataPropertyValueQuery); + + String subjectUri = subject.getURI(); + String propertyUri = property.getURI(); + + QuerySolutionMap bindings = new QuerySolutionMap(); + bindings.add("subject", ResourceFactory.createResource(subjectUri)); + bindings.add("property", ResourceFactory.createResource(propertyUri)); + + // Run the SPARQL query to get the properties + QueryExecution qexec = QueryExecutionFactory.create(dataPropertyValueQuery, getOntModelSelector().getFullModel(), bindings); + ResultSet results = qexec.execSelect(); + + List values = new ArrayList(); + while (results.hasNext()) { + QuerySolution sol = results.next(); + Literal value = sol.getLiteral("value"); + DataPropertyStatement dps = new DataPropertyStatementImpl(subjectUri, propertyUri, value.getLexicalForm()); + values.add(dps); + } + return values; + } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoSDB.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoSDB.java index 91af6bb34..1d1d9b477 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoSDB.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoSDB.java @@ -9,12 +9,17 @@ import java.util.List; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.query.Dataset; +import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QueryFactory; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.QuerySolutionMap; +import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.Resource; +import com.hp.hpl.jena.rdf.model.ResourceFactory; import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.rdf.model.StmtIterator; import com.hp.hpl.jena.shared.Lock; @@ -97,4 +102,29 @@ public class DataPropertyStatementDaoSDB extends DataPropertyStatementDaoJena } } + @Override + public List getDataPropertyStatementsForIndividualByProperty(Individual subject, DataProperty property) { + log.debug("dataPropertyValueQueryString:\n" + dataPropertyValueQueryString); + log.debug("dataPropertyValueQuery:\n" + dataPropertyValueQuery); + + String subjectUri = subject.getURI(); + String propertyUri = property.getURI(); + + QuerySolutionMap bindings = new QuerySolutionMap(); + bindings.add("subject", ResourceFactory.createResource(subjectUri)); + bindings.add("property", ResourceFactory.createResource(propertyUri)); + + // Run the SPARQL query to get the properties + QueryExecution qexec = QueryExecutionFactory.create(dataPropertyValueQuery, getOntModelSelector().getFullModel(), bindings); + ResultSet results = qexec.execSelect(); + + List values = new ArrayList(); + while (results.hasNext()) { + QuerySolution sol = results.next(); + Literal value = sol.getLiteral("value"); + DataPropertyStatement dps = new DataPropertyStatementImpl(subjectUri, propertyUri, value.getLexicalForm()); + values.add(dps); + } + return values; + } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/JenaBaseDao.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/JenaBaseDao.java index 3b5bfe803..bc9c710af 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/JenaBaseDao.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/JenaBaseDao.java @@ -6,6 +6,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -30,6 +31,8 @@ import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QueryFactory; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.Syntax; import com.hp.hpl.jena.rdf.model.AnonId; import com.hp.hpl.jena.rdf.model.Literal; @@ -944,5 +947,69 @@ public class JenaBaseDao extends JenaBaseDaoCon { return temp; } + + /* ****************************************************************************** */ + /** + * Converts a sparql query that returns a multiple rows to a list of maps. + * The maps will have column names as keys to the values. + */ + protected List> executeQueryToCollection( + QueryExecution qexec) { + List> rv = new ArrayList>(); + ResultSet results = qexec.execSelect(); + while (results.hasNext()) { + QuerySolution soln = results.nextSolution(); + rv.add(querySolutionToMap(soln)); + } + return rv; + } + + protected Map querySolutionToMap( 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; + } + + static protected 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 ""; + } + } + + static protected 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 ""; + } + } + protected Map resultsToMap(){ + return null; + } + } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PageDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PageDaoJena.java index 9d5ba453b..9ffe422ff 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PageDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PageDaoJena.java @@ -161,68 +161,5 @@ public class PageDaoJena extends JenaBaseDao implements PageDao { } - /* ****************************************************************************** */ - - /** - * Converts a sparql query that returns a multiple rows to a list of maps. - * The maps will have column names as keys to the values. - */ - protected List> executeQueryToCollection( - QueryExecution qexec) { - List> rv = new ArrayList>(); - ResultSet results = qexec.execSelect(); - while (results.hasNext()) { - QuerySolution soln = results.nextSolution(); - rv.add(querySolutionToMap(soln)); - } - return rv; - } - - protected Map querySolutionToMap( 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; - } - - static protected 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 ""; - } - } - - static protected 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 ""; - } - } - protected Map resultsToMap(){ - return null; - } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyStatementTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyStatementTemplateModel.java index dfbb6936f..d9f4f89cd 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyStatementTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyStatementTemplateModel.java @@ -5,18 +5,31 @@ package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -public class DataPropertyStatementTemplateModel extends PropertyStatementTemplateModel { +import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; + +public class DataPropertyStatementTemplateModel extends BaseTemplateModel { private static final Log log = LogFactory.getLog(DataPropertyStatementTemplateModel.class); - // not sure whether we want the objects or the uris here - //protected DataProperty property = null; - protected String predicateUri = null; - protected String data = null; + private DataPropertyStatement statement; - DataPropertyStatementTemplateModel(String subjectUri, String predicateUri, String data) { - this.subjectUri = subjectUri; - this.predicateUri = predicateUri; - this.data = data; + DataPropertyStatementTemplateModel(DataPropertyStatement statement) { + this.statement = statement; } + + /* Access methods for templates */ + + public String getValue() { + return statement.getData(); + } + + public String getEditLink() { + return null; + } + + public String getDeleteLink() { + return null; + } + } 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 38e9f99ed..163c33617 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 @@ -2,18 +2,30 @@ package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; +import java.util.ArrayList; +import java.util.List; + import edu.cornell.mannlib.vitro.webapp.beans.DataProperty; +import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement; +import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyStatementDao; +import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; public class DataPropertyTemplateModel extends PropertyTemplateModel { private static final String TYPE = "data"; + private List statements; - DataPropertyTemplateModel(DataProperty dp) { + DataPropertyTemplateModel(DataProperty dp, Individual subject, WebappDaoFactory wdf) { super(dp); - - // get the data property statements from the db via sparql query + // Get the data property statements via sparql query + DataPropertyStatementDao dpDao = wdf.getDataPropertyStatementDao(); + List dpStatements = dpDao.getDataPropertyStatementsForIndividualByProperty(subject, dp); + statements = new ArrayList(dpStatements.size()); + for (DataPropertyStatement dps : dpStatements) { + statements.add(new DataPropertyStatementTemplateModel(dps)); + } } - /* Access methods for templates */ @@ -21,25 +33,27 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel { return TYPE; } + @Override + public String getAddLink() { + // TODO Auto-generated method stub + return null; + } @Override - public String addLink() { + public String getEditLink() { // TODO Auto-generated method stub return null; } @Override - public String editLink() { + public String getDeleteLink() { // TODO Auto-generated method stub return null; } - - - @Override - public String deleteLink() { - // TODO Auto-generated method stub - return null; + + public List getStatements() { + return statements; } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DummyPropertyGroupTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DummyPropertyGroupTemplateModel.java deleted file mode 100644 index 35edadd9f..000000000 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DummyPropertyGroupTemplateModel.java +++ /dev/null @@ -1,20 +0,0 @@ -package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; - -import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup; - -public class DummyPropertyGroupTemplateModel extends - PropertyGroupTemplateModel { - - private String name; - - DummyPropertyGroupTemplateModel(String name) { - super(null); - this.name = name; - } - - @Override - public String getName() { - return name; - } - -} 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 78dbef847..8a6d3d175 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 @@ -22,21 +22,21 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel public abstract boolean getIsCollatedBySubtype(); @Override - public String addLink() { + public String getAddLink() { // TODO Auto-generated method stub return null; } @Override - public String editLink() { + public String getEditLink() { // TODO Auto-generated method stub return null; } @Override - public String deleteLink() { + public String getDeleteLink() { // TODO Auto-generated method stub 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 c6687040c..2d2b77785 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 @@ -6,19 +6,19 @@ import java.util.ArrayList; import java.util.List; import edu.cornell.mannlib.vitro.webapp.beans.DataProperty; +import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty; import edu.cornell.mannlib.vitro.webapp.beans.Property; import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup; +import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; public class PropertyGroupTemplateModel extends BaseTemplateModel { private String name; private List properties; - - PropertyGroupTemplateModel() { } - - PropertyGroupTemplateModel(PropertyGroup group) { + + PropertyGroupTemplateModel(WebappDaoFactory wdf, PropertyGroup group, Individual subject) { this.name = group.getName(); List propertyList = group.getPropertyList(); @@ -32,7 +32,7 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel { properties.add(new UncollatedObjectProperty(op)); } } else { - properties.add(new DataPropertyTemplateModel((DataProperty)p)); + properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, wdf)); } } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyList.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyList.java deleted file mode 100644 index 7ad667031..000000000 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyList.java +++ /dev/null @@ -1,219 +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.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import edu.cornell.mannlib.vitro.webapp.beans.DataProperty; -import edu.cornell.mannlib.vitro.webapp.beans.Individual; -import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty; -import edu.cornell.mannlib.vitro.webapp.beans.Property; -import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup; -import edu.cornell.mannlib.vitro.webapp.beans.PropertyInstance; -import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao; -import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDao; -import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao; -import edu.cornell.mannlib.vitro.webapp.dao.PropertyInstanceDao; -import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; -import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; - -public class PropertyList extends BaseTemplateModel { - - private static final Log log = LogFactory.getLog(PropertyList.class); - - private List propertyList; - - PropertyList() { - propertyList = new ArrayList(); - } - - protected void addObjectProperties(List propertyList) { - for (ObjectProperty op : propertyList) { - add(op); - } - } - - protected void add(ObjectProperty op) { - propertyList.add(op); - } - - protected void addDataProperties(List propertyList) { - for (DataProperty dp : propertyList) { - add(dp); - } - } - - protected void add(DataProperty p) { - propertyList.add(p); - } - - protected boolean contains(Property property) { - String propertyUri = property.getURI(); - if (propertyUri == null) { - log.error("Property has no propertyURI in alreadyOnPropertyList()"); - return true; // don't add to list - } - for (Property p : propertyList) { - if (propertyUri.equals(p.getURI())) { - return true; - } - } - return false; - } - - private static boolean contains(List list, PropertyInstance pi) { - if (pi.getPropertyURI() == null) { - return false; - } - for (ObjectProperty op : list) { - if (op.getURI() != null && op.getURI().equals(pi.getPropertyURI())) { - return op.isSubjectSide() == pi.getSubjectSide(); - } - } - return false; - } - - protected List getProperties() { - return propertyList; - } - - protected void mergeAllPossibleObjectProperties(WebappDaoFactory wdf, Individual subject, List objectPropertyList) { - PropertyInstanceDao piDao = wdf.getPropertyInstanceDao(); - // RY *** Does this exclude properties in the excluded namespaces already? If not, need same test as above - Collection allPropInstColl = piDao.getAllPossiblePropInstForIndividual(subject.getURI()); - if (allPropInstColl != null) { - for (PropertyInstance pi : allPropInstColl) { - if (pi != null) { - // RY Do we need to check this before checking if it's on the property list?? - if (! contains(objectPropertyList, pi)) { - ObjectPropertyDao opDao = wdf.getObjectPropertyDao(); - ObjectProperty op = opDao.getObjectPropertyByURI(pi.getPropertyURI()); - if (op == null) { - log.error("ObjectProperty op returned null from opDao.getObjectPropertyByURI()"); - } else if (op.getURI() == null) { - log.error("ObjectProperty op returned with null propertyURI from opDao.getObjectPropertyByURI()"); - } else if (! contains(op)) { - add(op); - } - } - } else { - log.error("a property instance in the Collection created by PropertyInstanceDao.getAllPossiblePropInstForIndividual() is unexpectedly null"); - } - } - } else { - log.error("a null Collection is returned from PropertyInstanceDao.getAllPossiblePropInstForIndividual()"); - } - } - - protected void mergeAllPossibleDataProperties(WebappDaoFactory wdf, Individual subject) { - DataPropertyDao dpDao = wdf.getDataPropertyDao(); - // RY *** Does this exclude properties in the excluded namespaces already? If not, need same test as above - Collection allDatapropColl = dpDao.getAllPossibleDatapropsForIndividual(subject.getURI()); - if (allDatapropColl != null) { - for (DataProperty dp : allDatapropColl ) { - if (dp!=null) { - if (dp.getURI() == null) { - log.error("DataProperty dp returned with null propertyURI from dpDao.getAllPossibleDatapropsForIndividual()"); - } else if (! contains(dp)) { - add(dp); - } - } else { - log.error("a data property in the Collection created in DataPropertyDao.getAllPossibleDatapropsForIndividual() is unexpectedly null)"); - } - } - } else { - log.error("a null Collection is returned from DataPropertyDao.getAllPossibleDatapropsForIndividual())"); - } - } - - @SuppressWarnings("unchecked") - protected void sort(VitroRequest vreq) { - try { - Collections.sort(propertyList, new PropertyRanker(vreq)); - } catch (Exception ex) { - log.error("Exception sorting merged property list: " + ex.getMessage()); - } - } - - private class PropertyRanker implements Comparator { - - WebappDaoFactory wdf; - PropertyGroupDao pgDao; - - private PropertyRanker(VitroRequest vreq) { - this.wdf = vreq.getWebappDaoFactory(); - this.pgDao = wdf.getPropertyGroupDao(); - } - - public int compare (Object o1, Object o2) { - Property p1 = (Property) o1; - Property p2 = (Property) o2; - - // sort first by property group rank; if the same, then sort by property rank - final int MAX_GROUP_RANK=99; - - int p1GroupRank=MAX_GROUP_RANK; - try { - if (p1.getGroupURI()!=null) { - PropertyGroup pg1 = pgDao.getGroupByURI(p1.getGroupURI()); - if (pg1!=null) { - p1GroupRank=pg1.getDisplayRank(); - } - } - } catch (Exception ex) { - log.error("Cannot retrieve p1GroupRank for group "+p1.getLabel()); - } - - int p2GroupRank=MAX_GROUP_RANK; - try { - if (p2.getGroupURI()!=null) { - PropertyGroup pg2 = pgDao.getGroupByURI(p2.getGroupURI()); - if (pg2!=null) { - p2GroupRank=pg2.getDisplayRank(); - } - } - } catch (Exception ex) { - log.error("Cannot retrieve p2GroupRank for group "+p2.getLabel()); - } - - // int diff = pgDao.getGroupByURI(p1.getGroupURI()).getDisplayRank() - pgDao.getGroupByURI(p2.getGroupURI()).getDisplayRank(); - int diff=p1GroupRank - p2GroupRank; - if (diff==0) { - diff = determineDisplayRank(p1) - determineDisplayRank(p2); - if (diff==0) { - return p1.getLabel().compareTo(p2.getLabel()); - } else { - return diff; - } - } - return diff; - } - - private int determineDisplayRank(Property p) { - if (p instanceof DataProperty) { - DataProperty dp = (DataProperty)p; - return dp.getDisplayTier(); - } else if (p instanceof ObjectProperty) { - ObjectProperty op = (ObjectProperty)p; - String tierStr = op.getDomainDisplayTier(); // no longer used: p.isSubjectSide() ? op.getDomainDisplayTier() : op.getRangeDisplayTier(); - try { - return Integer.parseInt(tierStr); - } catch (NumberFormatException ex) { - log.error("Cannot decode object property display tier value "+tierStr+" as an integer"); - } - } else { - log.error("Property is of unknown class in PropertyRanker()"); - } - return 0; - } - } -} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyListBuilder.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyListBuilder.java index 2c923ef73..00cb8c291 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyListBuilder.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyListBuilder.java @@ -7,6 +7,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -56,7 +57,6 @@ public class PropertyListBuilder { boolean userCanEditThisProfile = getEditingStatus(); // Create the property list for the subject. The properties will be put into groups later. - //PropertyList propertyList = new PropertyList(); List propertyList = new ArrayList(); // First get all the object properties that occur in statements in the db with this subject as subject. @@ -98,14 +98,12 @@ public class PropertyListBuilder { List groupList = addPropertiesToGroups(propertyList); // Build the template data model from the groupList + // List> groups = new ArrayList>(groupList.size()); List groups = new ArrayList(groupList.size()); for (PropertyGroup pg : groupList) { - groups.add(new PropertyGroupTemplateModel(pg)); - } - // *** ADD collation and statements here *** - // Don't include custom sorting, since that will be handled from custom short views - // We'll populate each item in the property list with its statements or subclass lists - + groups.add(new PropertyGroupTemplateModel(wdf, pg, subject)); + } + return groups; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyStatementTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyStatementTemplateModel.java deleted file mode 100644 index b60da85c9..000000000 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyStatementTemplateModel.java +++ /dev/null @@ -1,27 +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 org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import edu.cornell.mannlib.vitro.webapp.beans.Individual; -import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; - -public abstract class PropertyStatementTemplateModel extends BaseTemplateModel { - - private static final Log log = LogFactory.getLog(PropertyStatementTemplateModel.class); - - protected Individual subject = null; // not sure whether we want subject, or subject uri - protected String subjectUri = null; - - - public String getEditLink() { - return null; - } - - public String getDeleteLink() { - return null; - } - -} 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 ad50a5412..48c900945 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,24 +20,16 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { /* Access methods for templates */ - public String getAddLink() { - return null; - } - public abstract String getType(); public String getName() { return name; } -// protected String getUri() { -// return property.getURI(); -// } + public abstract String getAddLink(); - public abstract String addLink(); + public abstract String getEditLink(); - public abstract String editLink(); - - public abstract String deleteLink(); + public abstract String getDeleteLink(); } diff --git a/webapp/web/templates/freemarker/body/individual/individual-properties.ftl b/webapp/web/templates/freemarker/body/individual/individual-properties.ftl index 31a1bb95c..f1fcf34bf 100644 --- a/webapp/web/templates/freemarker/body/individual/individual-properties.ftl +++ b/webapp/web/templates/freemarker/body/individual/individual-properties.ftl @@ -19,11 +19,8 @@ <#-- Now list the properties in the group --> -

Number of properties in group: ${group.properties?size}

<#-- temporary --> - <#-- <#list group.properties as property> - +

${property.name}

- --> \ No newline at end of file