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