NIHVIVO-1333 Initial version of class definitions used for individual ontology property display

This commit is contained in:
rjy7 2010-11-29 17:36:14 +00:00
parent c1372d5cc2
commit 150b8e1de2
14 changed files with 337 additions and 92 deletions

View file

@ -0,0 +1,23 @@
/* $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.List;
public class CollatedObjectProperty extends ObjectPropertyTemplateModel {
private List<SubclassList> subclassList = null;
CollatedObjectProperty(String predicateUri) {
super(predicateUri);
// TODO Auto-generated constructor stub
}
public List<SubclassList> getSubclassList() {
return subclassList;
}
public List<SubclassList> getStatements() {
return subclassList;
}
}

View file

@ -0,0 +1,22 @@
/* $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;
public class DataPropertyStatementTemplateModel extends PropertyStatementTemplateModel {
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;
DataPropertyStatementTemplateModel(String subjectUri, String predicateUri, String data) {
this.subjectUri = subjectUri;
this.predicateUri = predicateUri;
this.data = data;
}
}

View file

@ -0,0 +1,12 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
public class DataPropertyTemplateModel extends PropertyTemplateModel {
DataPropertyTemplateModel(String predicateUri) {
super(predicateUri);
// TODO Auto-generated constructor stub
}
}

View file

@ -0,0 +1,20 @@
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;
}
}

View file

@ -0,0 +1,89 @@
/* $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.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.cornell.mannlib.vedit.beans.LoginStatusBean;
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel;
/** The entire grouped property list for the subject.
* If there are no groups defined or populated, use a dummy group so that the
* display logic in the templates is the same whether or not there are groups.
* @author rjy7
*
*/
public class GroupedPropertyList extends BaseTemplateModel {
private static final Log log = LogFactory.getLog(GroupedPropertyList.class);
private static final int MAX_GROUP_DISPLAY_RANK = 99;
/** Don't include these properties in the list. */
private static final Collection<String> SUPPRESSED_OBJECT_PROPERTIES = Collections
.unmodifiableCollection(Arrays
.asList(new String[] { VitroVocabulary.IND_MAIN_IMAGE }));
// RY Do we really want to store subject and vreq as members? Could just pass around.
private Individual subject;
private VitroRequest vreq;
private List<PropertyGroupTemplateModel> groups;
GroupedPropertyList(Individual subject, VitroRequest vreq) {
// RY Do we really want to store these as members? Could just pass around.
this.subject = subject;
this.vreq = vreq;
// Get the property groups
WebappDaoFactory wdf = vreq.getWebappDaoFactory();
PropertyGroupDao pgDao = wdf.getPropertyGroupDao();
List<PropertyGroup> groupList = pgDao.getPublicGroups(false); // may be returned empty but not null
List<PropertyGroupTemplateModel> groups = new ArrayList<PropertyGroupTemplateModel>(groupList.size());
for (PropertyGroup g : groupList) {
groups.add(new PropertyGroupTemplateModel(g));
// Properties unassigned to any group go in a dummy group with name an empty string. Templates
// must test for <#if ! group.name?has_content> or <#if group.name == ""> or <#if group.name?length == 0>
groups.add(new DummyPropertyGroupTemplateModel(""));
}
// If there are no groups, create a dummy group, so that the template display logic is the same
// in both cases. Name is null. Templates must test for <#if ! group.name??>
if (groups.isEmpty()) {
groups.add(new DummyPropertyGroupTemplateModel(null));
}
}
/**
* Return true iff the user is editing.
*/
private boolean getEditingStatus() {
// These tests may change once self-editing issues are straightened out.
boolean isSelfEditing = VitroRequestPrep.isSelfEditing(vreq);
boolean isCurator = LoginStatusBean.getBean(vreq).isLoggedInAtLeast(LoginStatusBean.CURATOR);
return isSelfEditing || isCurator;
}
/*
* Public getters for templates
*/
public List<PropertyGroupTemplateModel> getGroups() {
return groups;
}
}

View file

@ -152,17 +152,19 @@ public class IndividualTemplateModel extends BaseTemplateModel {
return models;
}
public List<Object> getPropertyList() {
PropertyListBuilder propListBuilder = new PropertyListBuilder(individual, vreq);
return propListBuilder.getPropertyList();
public GroupedPropertyList getPropertyList() {
// PropertyListBuilder propListBuilder = new PropertyListBuilder(individual, vreq);
// return propListBuilder.getPropertyList();
return new GroupedPropertyList(individual, vreq);
}
/* These methods simply forward to the Individual methods. It would be desirable to implement a scheme
for proxying or delegation so that the methods don't need to be simply listed here.
A Ruby-style method missing method would be ideal.
Update: DynamicProxy doesn't work because the proxied object is of type Individual, so we cannot
declare new methods here that are not declared in the Individual interface.
/* These methods simply forward to the methods of the wrapped individual. It would be desirable to
* implement a scheme for proxying or delegation so that the methods don't need to be simply listed here.
* A Ruby-style method missing method would be ideal.
* Update: DynamicProxy doesn't work because the proxied object is of type Individual, so we cannot
* declare new methods here that are not declared in the Individual interface.
*/
public String getName() {
return individual.getName();
}

View file

@ -0,0 +1,23 @@
/* $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;
public class ObjectPropertyStatementTemplateModel extends PropertyStatementTemplateModel {
private static final Log log = LogFactory.getLog(ObjectPropertyStatementTemplateModel.class);
// not sure whether we want the objects or the uris here
//protected ObjectProperty property = null;
protected String predicateUri = null;
//protected Individual object = null;
protected String objectUri = null;
ObjectPropertyStatementTemplateModel(String subjectUri, String predicateUri, String objectUri) {
this.subjectUri = subjectUri;
this.predicateUri = predicateUri;
this.objectUri = objectUri;
}
}

View file

@ -0,0 +1,12 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel {
ObjectPropertyTemplateModel(String predicateUri) {
super(predicateUri);
// TODO Auto-generated constructor stub
}
}

View file

@ -0,0 +1,29 @@
/* $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.List;
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel;
public class PropertyGroupTemplateModel extends BaseTemplateModel {
protected PropertyGroup group;
protected List<PropertyTemplateModel> properties;
PropertyGroupTemplateModel() { }
PropertyGroupTemplateModel(PropertyGroup group) {
this.group = group;
}
public String getName() {
return group.getName();
}
public List<PropertyTemplateModel> getProperties() {
return properties;
}
}

View file

@ -1,83 +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.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.cornell.mannlib.vedit.beans.LoginStatusBean;
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.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep;
public class PropertyListBuilder {
private static final Log log = LogFactory.getLog(PropertyListBuilder.class);
private static final int MAX_GROUP_DISPLAY_RANK = 99;
// Don't include these properties in the list.
private static final Collection<String> SUPPRESSED_OBJECT_PROPERTIES = Collections
.unmodifiableCollection(Arrays
.asList(new String[] { VitroVocabulary.IND_MAIN_IMAGE }));
protected Individual subject;
protected VitroRequest vreq;
PropertyListBuilder(Individual individual, VitroRequest vreq) {
this.subject = individual;
this.vreq = vreq;
}
protected List<Object> getPropertyList() {
// Determine whether we're editing or not.
// These tests may change once self-editing issues are straightened out.
boolean isSelfEditing = VitroRequestPrep.isSelfEditing(vreq);
boolean isCurator = LoginStatusBean.getBean(vreq).isLoggedInAtLeast(LoginStatusBean.CURATOR);
boolean isEditing = isSelfEditing || isCurator;
// Determine whether to return a grouped or ungrouped property list.
// If the call specified ungrouped, use ungrouped.
// If the call specified grouped:
WebappDaoFactory wdf = vreq.getWebappDaoFactory();
PropertyGroupDao pgDao = wdf.getPropertyGroupDao();
List <PropertyGroup> groupsList = pgDao.getPublicGroups(false); // may be returned empty but not null
// Use ungrouped if no property groups are defined
// If < 2 property groups are populated, we also want ungrouped, but we won't know that until we
// get the property list.
// Assemble the property list
List<Property> mergedPropertyList = new ArrayList<Property>();
// First get the properties this entity actually has, presumably populated with statements
List<ObjectProperty> objectPropertyList = subject.getObjectPropertyList();
for (ObjectProperty op : objectPropertyList) {
if (!SUPPRESSED_OBJECT_PROPERTIES.contains(op)) {
op.setEditLabel(op.getDomainPublic());
mergedPropertyList.add(op);
}else{
log.debug("suppressed " + op.getURI());
}
}
// If < 2 property groups populated, we want ungrouped.
// This can just be handled by not including a group, or using an "empty" group with no name.
return null;
}
}

View file

@ -0,0 +1,27 @@
/* $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;
}
}

View file

@ -0,0 +1,23 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel;
/**
* Represents the property statement list for a single property of an individual.
*/
public abstract class PropertyTemplateModel extends BaseTemplateModel {
// Not sure whether we need the property or the uri.
protected String predicateUri = null;
PropertyTemplateModel(String predicateUri) {
this.predicateUri = predicateUri;
}
public String getAddLink() {
return null;
}
}

View file

@ -0,0 +1,26 @@
/* $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.List;
/** List of object property statements for an individual, where the objects belong to a single subclass **/
public class SubclassList {
String name = null;
List<ObjectPropertyStatementTemplateModel> statements = null;
SubclassList(String name, List<ObjectPropertyStatementTemplateModel> statements) {
this.name = name;
this.statements = statements;
}
public String getName() {
return name;
}
public List<ObjectPropertyStatementTemplateModel> getStatements() {
return statements;
}
}

View file

@ -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.individual;
import java.util.List;
public class UncollatedObjectProperty extends ObjectPropertyTemplateModel {
private List<ObjectPropertyStatementTemplateModel> statements = null;
UncollatedObjectProperty(String predicateUri) {
super(predicateUri);
// TODO Auto-generated constructor stub
}
public List<ObjectPropertyStatementTemplateModel> getStatements() {
return statements;
}
}