1 /**
2  * Copyright (C) 2011-2012 IBM Corporation and Others. All Rights Reserved.
3  *
4  */
5 package org.unicode.cldr.web;
6 
7 import java.util.Comparator;
8 
9 import org.unicode.cldr.web.DataSection.DataRow;
10 
11 /**
12  * @author srl
13  *
14  */
15 public class CalendarSortMode extends SortMode {
16     public static String name = SurveyMain.PREF_SORTMODE_CODE_CALENDAR;
17 
18     /*
19      * (non-Javadoc)
20      *
21      * @see org.unicode.cldr.web.SortMode#getName()
22      */
23     @Override
getName()24     String getName() {
25         return name;
26     }
27 
28     private static final Partition.Membership memberships[] = { new Partition.Membership("Date Formats") {
29         @Override
30         public boolean isMember(DataRow p) {
31             String pp = p.getPrettyPath();
32             return (pp != null && pp.matches("calendar-.*\\|pattern\\|date-.*"));
33         }
34     }, new Partition.Membership("Time Formats") {
35         @Override
36         public boolean isMember(DataRow p) {
37             String pp = p.getPrettyPath();
38             return (pp != null && pp.matches("calendar-.*\\|pattern\\|time-.*"));
39         }
40     }, new Partition.Membership("Date/Time Combination Formats") {
41         @Override
42         public boolean isMember(DataRow p) {
43             String pp = p.getPrettyPath();
44             return (pp != null && pp.matches("calendar-.*\\|pattern\\|datetime-.*"));
45         }
46     }, new Partition.Membership("Wide Month Names") {
47         @Override
48         public boolean isMember(DataRow p) {
49             String pp = p.getPrettyPath();
50             return (pp != null && pp.matches("calendar-.*\\|month\\|.*-format-wide"));
51         }
52     }, new Partition.Membership("Abbreviated Month Names") {
53         @Override
54         public boolean isMember(DataRow p) {
55             String pp = p.getPrettyPath();
56             return (pp != null && pp.matches("calendar-.*\\|month\\|.*-format-abbreviated"));
57         }
58     }, new Partition.Membership("Narrow Month Names") {
59         @Override
60         public boolean isMember(DataRow p) {
61             String pp = p.getPrettyPath();
62             return (pp != null && pp.matches("calendar-.*\\|month\\|.*-stand-alone-narrow"));
63         }
64     }, new Partition.Membership("Wide Month Names (Stand Alone Context)") {
65         @Override
66         public boolean isMember(DataRow p) {
67             String pp = p.getPrettyPath();
68             return (pp != null && pp.matches("calendar-.*\\|month\\|.*-stand-alone-wide"));
69         }
70     }, new Partition.Membership("Abbreviated Month Names (Stand Alone Context)") {
71         @Override
72         public boolean isMember(DataRow p) {
73             String pp = p.getPrettyPath();
74             return (pp != null && pp.matches("calendar-.*\\|month\\|.*-stand-alone-abbreviated"));
75         }
76     }, new Partition.Membership("Narrow Month Names (Format Context)") {
77         @Override
78         public boolean isMember(DataRow p) {
79             String pp = p.getPrettyPath();
80             return (pp != null && pp.matches("calendar-.*\\|month\\|.*-format-narrow"));
81         }
82     }, new Partition.Membership("Wide Day Names") {
83         @Override
84         public boolean isMember(DataRow p) {
85             String pp = p.getPrettyPath();
86             return (pp != null && pp.matches("calendar-.*\\|day\\|.*:format-wide"));
87         }
88     }, new Partition.Membership("Abbreviated Day Names") {
89         @Override
90         public boolean isMember(DataRow p) {
91             String pp = p.getPrettyPath();
92             return (pp != null && pp.matches("calendar-.*\\|day\\|.*:format-abbreviated"));
93         }
94     }, new Partition.Membership("Short Day Names") {
95         @Override
96         public boolean isMember(DataRow p) {
97             String pp = p.getPrettyPath();
98             return (pp != null && pp.matches("calendar-.*\\|day\\|.*:format-short"));
99         }
100     }, new Partition.Membership("Narrow Day Names") {
101         @Override
102         public boolean isMember(DataRow p) {
103             String pp = p.getPrettyPath();
104             return (pp != null && pp.matches("calendar-.*\\|day\\|.*:stand-alone-narrow"));
105         }
106     }, new Partition.Membership("Wide Day Names (Stand Alone Context)") {
107         @Override
108         public boolean isMember(DataRow p) {
109             String pp = p.getPrettyPath();
110             return (pp != null && pp.matches("calendar-.*\\|day\\|.*:stand-alone-wide"));
111         }
112     }, new Partition.Membership("Abbreviated Day Names (Stand Alone Context)") {
113         @Override
114         public boolean isMember(DataRow p) {
115             String pp = p.getPrettyPath();
116             return (pp != null && pp.matches("calendar-.*\\|day\\|.*:stand-alone-abbreviated"));
117         }
118     }, new Partition.Membership("Short Day Names (Stand Alone Context)") {
119         @Override
120         public boolean isMember(DataRow p) {
121             String pp = p.getPrettyPath();
122             return (pp != null && pp.matches("calendar-.*\\|day\\|.*:stand-alone-short"));
123         }
124     }, new Partition.Membership("Narrow Day Names (Format Context)") {
125         @Override
126         public boolean isMember(DataRow p) {
127             String pp = p.getPrettyPath();
128             return (pp != null && pp.matches("calendar-.*\\|day\\|.*:format-narrow"));
129         }
130     }, new Partition.Membership("Wide Quarter Names") {
131         @Override
132         public boolean isMember(DataRow p) {
133             String pp = p.getPrettyPath();
134             return (pp != null && pp.matches("calendar-.*\\|quarter\\|.*-format-wide"));
135         }
136     }, new Partition.Membership("Abbreviated Quarter Names") {
137         @Override
138         public boolean isMember(DataRow p) {
139             String pp = p.getPrettyPath();
140             return (pp != null && pp.matches("calendar-.*\\|quarter\\|.*-format-abbreviated"));
141         }
142     }, new Partition.Membership("Narrow Quarter Names") {
143         @Override
144         public boolean isMember(DataRow p) {
145             String pp = p.getPrettyPath();
146             return (pp != null && pp.matches("calendar-.*\\|quarter\\|.*-stand-alone-narrow"));
147         }
148     }, new Partition.Membership("Wide Quarter Names (Stand Alone Context)") {
149         @Override
150         public boolean isMember(DataRow p) {
151             String pp = p.getPrettyPath();
152             return (pp != null && pp.matches("calendar-.*\\|quarter\\|.*-stand-alone-wide"));
153         }
154     }, new Partition.Membership("Abbreviated Quarter Names (Stand Alone Context)") {
155         @Override
156         public boolean isMember(DataRow p) {
157             String pp = p.getPrettyPath();
158             return (pp != null && pp.matches("calendar-.*\\|quarter\\|.*-stand-alone-abbreviated"));
159         }
160     }, new Partition.Membership("Narrow Quarter Names (Format Context)") {
161         @Override
162         public boolean isMember(DataRow p) {
163             String pp = p.getPrettyPath();
164             return (pp != null && pp.matches("calendar-.*\\|quarter\\|.*-format-narrow"));
165         }
166     }, new Partition.Membership("Day Periods") {
167         @Override
168         public boolean isMember(DataRow p) {
169             String pp = p.getPrettyPath();
170             return (pp != null && pp.matches("calendar-.*\\|dayPeriod.*"));
171         }
172     }, new Partition.Membership("Wide Eras") {
173         @Override
174         public boolean isMember(DataRow p) {
175             String pp = p.getPrettyPath();
176             return (pp != null && pp.matches("calendar-.*\\|era\\|.*-Names"));
177         }
178     }, new Partition.Membership("Eras") {
179         @Override
180         public boolean isMember(DataRow p) {
181             String pp = p.getPrettyPath();
182             return (pp != null && pp.matches("calendar-.*\\|era\\|.*-Abbr"));
183         }
184     }, new Partition.Membership("Narrow Eras") {
185         @Override
186         public boolean isMember(DataRow p) {
187             String pp = p.getPrettyPath();
188             return (pp != null && pp.matches("calendar-.*\\|era\\|.*-Narrow"));
189         }
190     }, new Partition.Membership("Relative Field Names") {
191         @Override
192         public boolean isMember(DataRow p) {
193             String pp = p.getPrettyPath();
194             return (pp != null && pp.matches("calendar-.*\\|fields\\|.*"));
195         }
196     }, new Partition.Membership("Calendar Field Labels") {
197         @Override
198         public boolean isMember(DataRow p) {
199             String pp = p.getPrettyPath();
200             return (pp != null && pp.matches("calendar-.*\\|field-label\\|.*"));
201         }
202     }, new Partition.Membership("Flexible Date/Time Formats") {
203         @Override
204         public boolean isMember(DataRow p) {
205             int xpint = p.getXpathId();
206             String xp = p.getXpath();
207             return (xpint == -1 || (xp != null && xp.indexOf("availableFormats") > -1));
208         }
209     }, new Partition.Membership("Interval Formats") {
210         @Override
211         public boolean isMember(DataRow p) {
212             String xp = p.getXpath();
213             return (xp != null && xp.indexOf("intervalFormats") > -1);
214         }
215     } };
216 
217     @Override
memberships()218     Partition.Membership[] memberships() {
219         return memberships;
220     }
221 
222     @Override
createComparator()223     Comparator<DataRow> createComparator() {
224         return comparator();
225     }
226 
comparator()227     public static Comparator<DataRow> comparator() {
228         final int ourKey = SortMode.SortKeyType.SORTKEY_CALENDAR.ordinal();
229         final Comparator<DataRow> codeComparator = CodeSortMode.comparator();
230         return new Comparator<DataRow>() {
231             @Override
232             public int compare(DataRow p1, DataRow p2) {
233                 if (p1 == p2) {
234                     return 0;
235                 }
236 
237                 int rv = 0; // neg: a < b. pos: a> b
238 
239                 rv = compareMembers(p1, p2, memberships, ourKey);
240                 if (rv != 0) {
241                     return rv;
242                 }
243 
244                 return codeComparator.compare(p1, p2); // fall back to code
245 
246             }
247         };
248     }
249 
250     @Override
251     String getDisplayName() {
252         return "Type";
253     }
254 
255 }
256