1 package org.unicode.cldr.web; 2 3 import java.util.Collection; 4 import java.util.Comparator; 5 import java.util.LinkedList; 6 import java.util.List; 7 8 import org.unicode.cldr.util.PathHeader; 9 import org.unicode.cldr.web.DataSection.DataRow; 10 import org.unicode.cldr.web.Partition.Membership; 11 12 public class PathHeaderSort extends SortMode { 13 14 public static String name = "ph"; 15 16 @Override getName()17 String getName() { 18 return name; 19 } 20 21 @Override getDisplayName()22 String getDisplayName() { 23 return getName(); // dont care 24 } 25 26 @Override memberships()27 Membership[] memberships() { 28 return null; // not used 29 } 30 31 @Override createComparator()32 Comparator<DataRow> createComparator() { 33 return null; // not used 34 } 35 36 @Override createDisplaySet(XPathMatcher matcher, Collection<DataRow> values)37 public DataSection.DisplaySet createDisplaySet(XPathMatcher matcher, Collection<DataRow> values) { 38 // final Set<String> headings = new TreeSet<String>(); 39 DataRow rows[] = createSortedList(new Comparator<DataRow>() { 40 41 @Override 42 public int compare(DataRow ll, DataRow rr) { 43 PathHeader l = ll.getPathHeader(); 44 PathHeader r = rr.getPathHeader(); 45 // headings.add(l.getHeader()); 46 // headings.add(r.getHeader()); 47 return l.compareTo(r); 48 } 49 }, matcher, values); 50 51 List<Partition> thePartitions = new LinkedList<>(); 52 Partition last = null; 53 String headerLast = null; 54 for (int i = 0; i < rows.length; i++) { 55 String headerNext = rows[i].getPathHeader().getHeader(); 56 if (headerNext == headerLast || (headerNext.equals(headerLast))) { 57 last.limit = i + 1; 58 } else { 59 last = new Partition((headerLast = headerNext), i, i + 1); 60 if ("null".equals(headerLast)) { 61 last.name = ""; 62 } 63 thePartitions.add(last); 64 } 65 } 66 67 return new DataSection.DisplaySet(rows, this, thePartitions.toArray(new Partition[thePartitions.size()])); 68 } 69 70 } 71