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