Fix comments (mostly alignments)

This commit is contained in:
ryounes 2011-07-25 15:52:51 +00:00
parent b765eeab79
commit 25ddcac07a

View file

@ -9,7 +9,6 @@ import java.util.Comparator;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -29,14 +28,14 @@ import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel;
/* /*
public class GroupedPropertyList extends ArrayList<PropertyGroupTemplateModel> { public class GroupedPropertyList extends ArrayList<PropertyGroupTemplateModel> {
If this class extends a List type, Freemarker does not let the templates call methods If this class extends a List type, Freemarker does not let the templates call methods
on it. Since the class must then contain a list rather than be a list, the template on it. Since the class must then contain a list rather than be a list, the template
syntax is less idiomatic: e.g., groups.all rather than simply groups. An alternative syntax is less idiomatic: e.g., groups.all rather than simply groups. An alternative
is to make the get methods (getProperty and getPropertyAndRemoveFromList) methods is to make the get methods (getProperty and getPropertyAndRemoveFromList) methods
of the IndividualTemplateModel. Then this class doesn't need methods, and can extend of the IndividualTemplateModel. Then this class doesn't need methods, and can extend
a List type. a List type.
*/ */
public class GroupedPropertyList extends BaseTemplateModel { public class GroupedPropertyList extends BaseTemplateModel {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -44,9 +43,11 @@ public class GroupedPropertyList extends BaseTemplateModel {
private static final int MAX_GROUP_DISPLAY_RANK = 99; private static final int MAX_GROUP_DISPLAY_RANK = 99;
@SuppressWarnings("serial") @SuppressWarnings("serial")
protected static final List<String> VITRO_PROPS_TO_ADD_TO_LIST = new ArrayList<String>() {{ protected static final List<String> VITRO_PROPS_TO_ADD_TO_LIST = new ArrayList<String>() {
{
add(VitroVocabulary.IND_MAIN_IMAGE); add(VitroVocabulary.IND_MAIN_IMAGE);
}}; }
};
private final Individual subject; private final Individual subject;
private final VitroRequest vreq; private final VitroRequest vreq;
@ -54,25 +55,30 @@ public class GroupedPropertyList extends BaseTemplateModel {
private List<PropertyGroupTemplateModel> groups; private List<PropertyGroupTemplateModel> groups;
GroupedPropertyList(Individual subject, VitroRequest vreq, EditingPolicyHelper policyHelper) { GroupedPropertyList(Individual subject, VitroRequest vreq,
EditingPolicyHelper policyHelper) {
this.vreq = vreq; this.vreq = vreq;
this.subject = subject; this.subject = subject;
this.wdf = vreq.getWebappDaoFactory(); this.wdf = vreq.getWebappDaoFactory();
boolean editing = policyHelper != null; boolean editing = policyHelper != null;
// Create the property list for the subject. The properties will be put into groups later. // Create the property list for the subject. The properties will be put
// into groups later.
List<Property> propertyList = new ArrayList<Property>(); List<Property> propertyList = new ArrayList<Property>();
// First get all the object properties that occur in statements in the db with this subject as subject. // First get all the object properties that occur in statements in the
// This may include properties that are not defined as "possible properties" for a subject of this class, // db with this subject as subject.
// This may include properties that are not defined as
// "possible properties" for a subject of this class,
// so we cannot just rely on getting that list. // so we cannot just rely on getting that list.
List<ObjectProperty> populatedObjectPropertyList = subject.getPopulatedObjectPropertyList(); List<ObjectProperty> populatedObjectPropertyList = subject
.getPopulatedObjectPropertyList();
propertyList.addAll(populatedObjectPropertyList); propertyList.addAll(populatedObjectPropertyList);
// If editing this page, merge in object properties applicable to the individual that are currently // If editing this page, merge in object properties applicable to the individual that are currently
// unpopulated, so the properties are displayed to allow statements to be added to these properties. // unpopulated, so the properties are displayed to allow statements to be added to these properties.
// RY In future, we should limit this to properties that the user CAN add properties to. // RY In future, we should limit this to properties that the user has permission to add properties to.
if (editing) { if (editing) {
mergeAllPossibleObjectProperties(populatedObjectPropertyList, propertyList); mergeAllPossibleObjectProperties(populatedObjectPropertyList, propertyList);
} }
@ -83,7 +89,8 @@ public class GroupedPropertyList extends BaseTemplateModel {
// DataPropertyStatements. Note that this does not apply to object properties, because the queries // DataPropertyStatements. Note that this does not apply to object properties, because the queries
// can be customized and thus differ from property to property. So it's easier for now to keep the // can be customized and thus differ from property to property. So it's easier for now to keep the
// two working in parallel. // two working in parallel.
List<DataProperty> populatedDataPropertyList = subject.getPopulatedDataPropertyList(); List<DataProperty> populatedDataPropertyList = subject
.getPopulatedDataPropertyList();
propertyList.addAll(populatedDataPropertyList); propertyList.addAll(populatedDataPropertyList);
if (editing) { if (editing) {
@ -96,10 +103,12 @@ public class GroupedPropertyList extends BaseTemplateModel {
List<PropertyGroup> propertyGroupList = addPropertiesToGroups(propertyList); List<PropertyGroup> propertyGroupList = addPropertiesToGroups(propertyList);
// Build the template data model from the groupList // Build the template data model from the groupList
groups = new ArrayList<PropertyGroupTemplateModel>(propertyGroupList.size()); groups = new ArrayList<PropertyGroupTemplateModel>(
for (PropertyGroup propertyGroup: propertyGroupList) { propertyGroupList.size());
groups.add(new PropertyGroupTemplateModel(vreq, propertyGroup, subject, for (PropertyGroup propertyGroup : propertyGroupList) {
policyHelper, populatedDataPropertyList, populatedObjectPropertyList)); groups.add(new PropertyGroupTemplateModel(vreq, propertyGroup,
subject, policyHelper, populatedDataPropertyList,
populatedObjectPropertyList));
} }
if (!editing) { if (!editing) {
@ -116,7 +125,8 @@ public class GroupedPropertyList extends BaseTemplateModel {
Iterator<PropertyGroupTemplateModel> iGroups = groups.iterator(); Iterator<PropertyGroupTemplateModel> iGroups = groups.iterator();
while (iGroups.hasNext()) { while (iGroups.hasNext()) {
PropertyGroupTemplateModel pgtm = iGroups.next(); PropertyGroupTemplateModel pgtm = iGroups.next();
Iterator<PropertyTemplateModel> iProperties = pgtm.getProperties().iterator(); Iterator<PropertyTemplateModel> iProperties = pgtm.getProperties()
.iterator();
while (iProperties.hasNext()) { while (iProperties.hasNext()) {
PropertyTemplateModel property = iProperties.next(); PropertyTemplateModel property = iProperties.next();
if (property instanceof ObjectPropertyTemplateModel) { if (property instanceof ObjectPropertyTemplateModel) {
@ -124,7 +134,7 @@ public class GroupedPropertyList extends BaseTemplateModel {
// of a CollatedObjectPropertyTemplateModel, because the collated subclass // of a CollatedObjectPropertyTemplateModel, because the collated subclass
// list is compiled on the basis of existing statements. There will not // list is compiled on the basis of existing statements. There will not
// be any empty subclasses. // be any empty subclasses.
if ( ( (ObjectPropertyTemplateModel) property).isEmpty() ) { if (((ObjectPropertyTemplateModel) property).isEmpty()) {
iProperties.remove(); iProperties.remove();
} }
} }
@ -140,22 +150,28 @@ public class GroupedPropertyList extends BaseTemplateModel {
try { try {
Collections.sort(propertyList, new PropertyRanker(vreq)); Collections.sort(propertyList, new PropertyRanker(vreq));
} catch (Exception ex) { } catch (Exception ex) {
log.error("Exception sorting merged property list: " + ex.getMessage()); log.error("Exception sorting merged property list: "
+ ex.getMessage());
} }
} }
private void mergeAllPossibleObjectProperties(List<ObjectProperty> populatedObjectPropertyList, List<Property> propertyList) { private void mergeAllPossibleObjectProperties(
List<ObjectProperty> populatedObjectPropertyList,
List<Property> propertyList) {
// There is no ObjectPropertyDao.getAllPossibleObjectPropertiesForIndividual() parallel to // There is no ObjectPropertyDao.getAllPossibleObjectPropertiesForIndividual() parallel to
// DataPropertyDao.getAllPossibleDatapropsForIndividual(). The comparable method for object properties // DataPropertyDao.getAllPossibleDatapropsForIndividual(). The comparable method for object properties
// is defined using PropertyInstance rather than ObjectProperty. // is defined using PropertyInstance rather than ObjectProperty.
PropertyInstanceDao piDao = wdf.getPropertyInstanceDao(); PropertyInstanceDao piDao = wdf.getPropertyInstanceDao();
Collection<PropertyInstance> allPropInstColl = piDao.getAllPossiblePropInstForIndividual(subject.getURI()); Collection<PropertyInstance> allPropInstColl = piDao
.getAllPossiblePropInstForIndividual(subject.getURI());
if (allPropInstColl != null) { if (allPropInstColl != null) {
for (PropertyInstance pi : allPropInstColl) { for (PropertyInstance pi : allPropInstColl) {
if (pi != null) { if (pi != null) {
if (! alreadyOnObjectPropertyList(populatedObjectPropertyList, pi)) { if (!alreadyOnObjectPropertyList(
addObjectPropertyToPropertyList(pi.getPropertyURI(), propertyList); populatedObjectPropertyList, pi)) {
addObjectPropertyToPropertyList(pi.getPropertyURI(),
propertyList);
} }
} else { } else {
log.error("a property instance in the Collection created by PropertyInstanceDao.getAllPossiblePropInstForIndividual() is unexpectedly null"); log.error("a property instance in the Collection created by PropertyInstanceDao.getAllPossiblePropInstForIndividual() is unexpectedly null");
@ -169,13 +185,14 @@ public class GroupedPropertyList extends BaseTemplateModel {
// In future, vitro ns props will be phased out. Vitro public properties should be changed so they do not // In future, vitro ns props will be phased out. Vitro public properties should be changed so they do not
// constitute a special case (i.e., included in piDao.getAllPossiblePropInstForIndividual()). // constitute a special case (i.e., included in piDao.getAllPossiblePropInstForIndividual()).
for (String propertyUri : VITRO_PROPS_TO_ADD_TO_LIST) { for (String propertyUri : VITRO_PROPS_TO_ADD_TO_LIST) {
if ( ! alreadyOnPropertyList(propertyList, propertyUri) ) { if (!alreadyOnPropertyList(propertyList, propertyUri)) {
addObjectPropertyToPropertyList(propertyUri, propertyList); addObjectPropertyToPropertyList(propertyUri, propertyList);
} }
} }
} }
private boolean alreadyOnObjectPropertyList(List<ObjectProperty> opList, PropertyInstance pi) { private boolean alreadyOnObjectPropertyList(List<ObjectProperty> opList,
PropertyInstance pi) {
if (pi.getPropertyURI() == null) { if (pi.getPropertyURI() == null) {
return false; return false;
} }
@ -187,7 +204,8 @@ public class GroupedPropertyList extends BaseTemplateModel {
return false; return false;
} }
private void addObjectPropertyToPropertyList(String propertyUri, List<Property> propertyList) { private void addObjectPropertyToPropertyList(String propertyUri,
List<Property> propertyList) {
ObjectPropertyDao opDao = wdf.getObjectPropertyDao(); ObjectPropertyDao opDao = wdf.getObjectPropertyDao();
ObjectProperty op = opDao.getObjectPropertyByURI(propertyUri); ObjectProperty op = opDao.getObjectPropertyByURI(propertyUri);
if (op == null) { if (op == null) {
@ -201,13 +219,14 @@ public class GroupedPropertyList extends BaseTemplateModel {
protected void mergeAllPossibleDataProperties(List<Property> propertyList) { protected void mergeAllPossibleDataProperties(List<Property> propertyList) {
DataPropertyDao dpDao = wdf.getDataPropertyDao(); DataPropertyDao dpDao = wdf.getDataPropertyDao();
Collection <DataProperty> allDatapropColl = dpDao.getAllPossibleDatapropsForIndividual(subject.getURI()); Collection<DataProperty> allDatapropColl = dpDao
.getAllPossibleDatapropsForIndividual(subject.getURI());
if (allDatapropColl != null) { if (allDatapropColl != null) {
for (DataProperty dp : allDatapropColl ) { for (DataProperty dp : allDatapropColl) {
if (dp!=null) { if (dp != null) {
if (dp.getURI() == null) { if (dp.getURI() == null) {
log.error("DataProperty dp returned with null propertyURI from dpDao.getAllPossibleDatapropsForIndividual()"); log.error("DataProperty dp returned with null propertyURI from dpDao.getAllPossibleDatapropsForIndividual()");
} else if (! alreadyOnPropertyList(propertyList, dp)) { } else if (!alreadyOnPropertyList(propertyList, dp)) {
propertyList.add(dp); propertyList.add(dp);
} }
} else { } else {
@ -219,7 +238,8 @@ public class GroupedPropertyList extends BaseTemplateModel {
} }
} }
private boolean alreadyOnPropertyList(List<Property> propertyList, Property p) { private boolean alreadyOnPropertyList(List<Property> propertyList,
Property p) {
if (p.getURI() == null) { if (p.getURI() == null) {
log.error("Property p has no propertyURI in alreadyOnPropertyList()"); log.error("Property p has no propertyURI in alreadyOnPropertyList()");
return true; // don't add to list return true; // don't add to list
@ -227,7 +247,8 @@ public class GroupedPropertyList extends BaseTemplateModel {
return (alreadyOnPropertyList(propertyList, p.getURI())); return (alreadyOnPropertyList(propertyList, p.getURI()));
} }
private boolean alreadyOnPropertyList(List<Property> propertyList, String propertyUri) { private boolean alreadyOnPropertyList(List<Property> propertyList,
String propertyUri) {
for (Property p : propertyList) { for (Property p : propertyList) {
String uri = p.getURI(); String uri = p.getURI();
if (uri != null && uri.equals(propertyUri)) { if (uri != null && uri.equals(propertyUri)) {
@ -237,7 +258,8 @@ public class GroupedPropertyList extends BaseTemplateModel {
return false; return false;
} }
private List<PropertyGroup> addPropertiesToGroups(List<Property> propertyList) { private List<PropertyGroup> addPropertiesToGroups(
List<Property> propertyList) {
// Get the property groups // Get the property groups
PropertyGroupDao pgDao = wdf.getPropertyGroupDao(); PropertyGroupDao pgDao = wdf.getPropertyGroupDao();
@ -248,8 +270,10 @@ public class GroupedPropertyList extends BaseTemplateModel {
int groupCount = groupList.size(); int groupCount = groupList.size();
/* /*
* If no property groups are defined, create a dummy group with a null name to signal to the template that it's * If no property groups are defined, create a dummy group with a null
* not a real group. This allows the looping structure in the template to be the same whether there are groups or not. * name to signal to the template that it's not a real group. This
* allows the looping structure in the template to be the same whether
* there are groups or not.
*/ */
if (groupCount == 0) { if (groupCount == 0) {
log.warn("groupList has no groups on entering addPropertiesToGroups(); will create a new group"); log.warn("groupList has no groups on entering addPropertiesToGroups(); will create a new group");
@ -260,11 +284,13 @@ public class GroupedPropertyList extends BaseTemplateModel {
} }
/* /*
* This group will hold properties that are not assigned to any groups. In case no real property groups are * This group will hold properties that are not assigned to any groups.
* populated, we end up with the dummy group case above, and we will change the name to null to signal to the * In case no real property groups are populated, we end up with the
* template that it shouldn't be treated like a group. * dummy group case above, and we will change the name to null to signal
* to the template that it shouldn't be treated like a group.
*/ */
PropertyGroup groupForUnassignedProperties = pgDao.createDummyPropertyGroup("", MAX_GROUP_DISPLAY_RANK); PropertyGroup groupForUnassignedProperties = pgDao
.createDummyPropertyGroup("", MAX_GROUP_DISPLAY_RANK);
if (groupCount > 1) { if (groupCount > 1) {
try { try {
@ -274,24 +300,29 @@ public class GroupedPropertyList extends BaseTemplateModel {
} }
} }
populateGroupListWithProperties(groupList, groupForUnassignedProperties, propertyList); populateGroupListWithProperties(groupList,
groupForUnassignedProperties, propertyList);
// Remove unpopulated groups // Remove unpopulated groups
try { try {
int removedCount = pgDao.removeUnpopulatedGroups(groupList); int removedCount = pgDao.removeUnpopulatedGroups(groupList);
if (removedCount == 0) { if (removedCount == 0) {
log.warn("Of "+groupCount+" groups, none removed by removeUnpopulatedGroups"); log.warn("Of " + groupCount
+ " groups, none removed by removeUnpopulatedGroups");
} }
groupCount -= removedCount; groupCount -= removedCount;
} catch (Exception ex) { } catch (Exception ex) {
log.error("Exception on trying to prune groups list with properties: "+ex.getMessage()); log.error("Exception on trying to prune groups list with properties: "
+ ex.getMessage());
} }
// If the group for unassigned properties is populated, add it to the group list. // If the group for unassigned properties is populated, add it to the
// group list.
if (groupForUnassignedProperties.getPropertyList().size() > 0) { if (groupForUnassignedProperties.getPropertyList().size() > 0) {
groupList.add(groupForUnassignedProperties); groupList.add(groupForUnassignedProperties);
// If no real property groups are populated, the groupForUnassignedProperties moves from case 2 to case 1 above, so change // If no real property groups are populated, the groupForUnassignedProperties
// the name to null to signal to the templates that there are no real groups. // moves from case 2 to case 1 above, so change the name to null
// to signal to the templates that there are no real groups.
if (groupCount == 0) { if (groupCount == 0) {
groupForUnassignedProperties.setName(null); groupForUnassignedProperties.setName(null);
} }
@ -301,11 +332,12 @@ public class GroupedPropertyList extends BaseTemplateModel {
} }
private void populateGroupListWithProperties(List<PropertyGroup> groupList, private void populateGroupListWithProperties(List<PropertyGroup> groupList,
PropertyGroup groupForUnassignedProperties, List<Property> propertyList) { PropertyGroup groupForUnassignedProperties,
List<Property> propertyList) {
// Clear out the property lists on the groups // Clear out the property lists on the groups
for (PropertyGroup pg : groupList) { for (PropertyGroup pg : groupList) {
if (pg.getPropertyList().size()>0) { if (pg.getPropertyList().size() > 0) {
pg.getPropertyList().clear(); pg.getPropertyList().clear();
} }
} }
@ -314,7 +346,8 @@ public class GroupedPropertyList extends BaseTemplateModel {
for (Property p : propertyList) { for (Property p : propertyList) {
if (p.getURI() == null) { if (p.getURI() == null) {
log.error("Property p has null URI in populateGroupListWithProperties()"); log.error("Property p has null URI in populateGroupListWithProperties()");
// If the property is not assigned to any group, add it to the group for unassigned properties // If the property is not assigned to any group, add it to the
// group for unassigned properties
} else { } else {
String groupUriForProperty = p.getGroupURI(); String groupUriForProperty = p.getGroupURI();
boolean assignedToGroup = false; boolean assignedToGroup = false;
@ -332,10 +365,11 @@ public class GroupedPropertyList extends BaseTemplateModel {
// Either the property is not assigned to a group, or it is assigned to a group // Either the property is not assigned to a group, or it is assigned to a group
// not in the list (i.e., a non-existent group). // not in the list (i.e., a non-existent group).
if (! assignedToGroup) { if (!assignedToGroup) {
if (groupForUnassignedProperties!=null) { if (groupForUnassignedProperties != null) {
groupForUnassignedProperties.getPropertyList().add(p); groupForUnassignedProperties.getPropertyList().add(p);
log.debug("adding property " + getLabel(p) + " to group for unassigned properties"); log.debug("adding property " + getLabel(p)
+ " to group for unassigned properties");
} }
} }
} }
@ -355,7 +389,7 @@ public class GroupedPropertyList extends BaseTemplateModel {
public int compare(Property p1, Property p2) { public int compare(Property p1, Property p2) {
int diff = determineDisplayRank(p1) - determineDisplayRank(p2); int diff = determineDisplayRank(p1) - determineDisplayRank(p2);
if (diff==0) { if (diff == 0) {
return getLabel(p1).compareTo(getLabel(p2)); return getLabel(p1).compareTo(getLabel(p2));
} else { } else {
return diff; return diff;
@ -364,15 +398,16 @@ public class GroupedPropertyList extends BaseTemplateModel {
private int determineDisplayRank(Property p) { private int determineDisplayRank(Property p) {
if (p instanceof DataProperty) { if (p instanceof DataProperty) {
DataProperty dp = (DataProperty)p; DataProperty dp = (DataProperty) p;
return dp.getDisplayTier(); return dp.getDisplayTier();
} else if (p instanceof ObjectProperty) { } else if (p instanceof ObjectProperty) {
ObjectProperty op = (ObjectProperty)p; ObjectProperty op = (ObjectProperty) p;
String tierStr = op.getDomainDisplayTier(); String tierStr = op.getDomainDisplayTier();
try { try {
return Integer.parseInt(tierStr); return Integer.parseInt(tierStr);
} catch (NumberFormatException ex) { } catch (NumberFormatException ex) {
log.error("Cannot decode object property display tier value "+tierStr+" as an integer"); log.error("Cannot decode object property display tier value "
+ tierStr + " as an integer");
} }
} else { } else {
log.error("Property is of unknown class in PropertyRanker()"); log.error("Property is of unknown class in PropertyRanker()");
@ -381,8 +416,8 @@ public class GroupedPropertyList extends BaseTemplateModel {
} }
} }
// Since we're now including some vitro properties in the property list, which don't have labels, // Since we're now including some vitro properties in the property list,
// use their local name instead. // which don't have labels, use their local name instead.
private String getLabel(Property property) { private String getLabel(Property property) {
String label = property.getLabel(); String label = property.getLabel();
if (label == null) { if (label == null) {
@ -417,8 +452,8 @@ public class GroupedPropertyList extends BaseTemplateModel {
for (PropertyTemplateModel ptm : properties) { for (PropertyTemplateModel ptm : properties) {
if (propertyUri.equals(ptm.getUri())) { if (propertyUri.equals(ptm.getUri())) {
// Remove the property from the group. // Remove the property from the group.
// NB Works with a for-each loop instead of an iterator, since // NB Works with a for-each loop instead of an iterator,
// iteration doesn't continue after the remove. // since iteration doesn't continue after the remove.
properties.remove(ptm); properties.remove(ptm);
// If this is the only property in the group, remove the group as well. // If this is the only property in the group, remove the group as well.
// NB Works with a for-each loop instead of an iterator, since // NB Works with a for-each loop instead of an iterator, since
@ -433,4 +468,3 @@ public class GroupedPropertyList extends BaseTemplateModel {
return null; return null;
} }
} }