From cab4c1edbd2b50aa5cabdb677a47dc26708718ef Mon Sep 17 00:00:00 2001 From: ryounes Date: Wed, 4 May 2011 01:18:34 +0000 Subject: [PATCH] NIHVIVO-2573 Merge r7935 from nihvivo-rel-1.2 branch: Improved the implementation of the solution in r7931/7932 --- .../CollatedObjectPropertyTemplateModel.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java index 4a4b4c9e4..1ea3756bb 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java @@ -124,9 +124,8 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM logData(statementData); } - // Compile a list of the statements with less specific subclasses, which should be removed - // from the statement data - List> statementsToRemove = new ArrayList>(); + // Compile a list of the statements with most specific subclasses; others will be removed + List> filteredList = new ArrayList>(); Set processedObjects = new HashSet(); for (Map outerMap : statementData) { String objectUri = outerMap.get(objectVariableName); @@ -142,16 +141,15 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM } // Sort the data for this object from most to least specific subclass, with nulls at end Collections.sort(dataForThisObject, new SubclassComparator(wdf)); - dataForThisObject.remove(0); // Keep only the first one (most specific subclass) - statementsToRemove.addAll(dataForThisObject); + filteredList.add(dataForThisObject.get(0)); } - // We remove statements from the original list, rather than returning a new list, - // in order to preserve the subclass orderings, since the collation depends on the - // statements being ordered first by subclass. - for (Map map : statementsToRemove) { - statementData.remove(map); - } + // Use retainAll() rather than clear() plus addAll() in order to retain the subclass ordering + // of statementData. Otherwise the list is now ordered by author, whereas collate() assumes + // the list is ordered by subclass. + //statementData.clear(); + //statementData.addAll(filteredList); + statementData.retainAll(filteredList); if (log.isDebugEnabled()) { log.debug("Data after subclass filtering");