• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.unicode.cldr.util;
2 
3 /**
4  * Generate URLs to parts of CLDR and the SurveyTool.
5  * You can change the urls used with for example,  -DCLDR_SURVEY_BASE=http://st.unicode.org/smoketest
6  *
7  * @author srl
8  *
9  */
10 public abstract class CLDRURLS {
11     public static final String DEFAULT_HOST = "st.unicode.org";
12     public static final String DEFAULT_PATH = "/cldr-apps";
13     public static final String DEFAULT_BASE = "http://" + DEFAULT_HOST + DEFAULT_PATH;
14     public static final String CLDR_NEWTICKET_URL = "http://unicode.org/cldr/trac/newticket";
15     /**
16      * Override this property if you want to change the absolute URL to the SurveyTool base from DEFAULT_BASE
17      */
18     public static final String CLDR_SURVEY_BASE = "CLDR_SURVEY_BASE";
19     /**
20      * Override this property if you want to change the relative URL to the SurveyTool base from DEFAULT_PATH (within SurveyTool only)
21      */
22     public static final String CLDR_SURVEY_PATH = "CLDR_SURVEY_PATH";
23 
24     /**
25      *  "special" pages
26      * @author srl
27      *
28      */
29     public enum Special {
30         /**
31          * The 'main' view
32          */
33         Survey(""),
34         /**
35          * The list of locales
36          */
37         Locales,
38         /**
39          * The vetting viewer (i.e. Dashboard)
40          */
41         Vetting("r_vetting_json"),
42         /**
43          * Forums.  use "id" for the numeric post id
44          */
45         Forum;
46 
Special(String s)47         Special(String s) {
48             this.id = s;
49         }
50 
51         /**
52          * Convenience - just lowercases
53          */
Special()54         Special() {
55             this.id = this.name().toLowerCase();
56         }
57 
58         private final String id;
59     }
60 
61     protected static String VPATH = "/v#";
62 
63     /**
64      * Get the relative base URL for the SurveyTool.
65      * This may be "/cldr-apps", for example.
66      * @return example, "/cldr-apps"
67      */
base()68     public abstract String base();
69 
70     /**
71      * please use CLDRLocale instead
72      * @param locale
73      * @param xpath
74      * @return
75      */
forXpath(String locale, String xpath)76     public String forXpath(String locale, String xpath) {
77         return forXpath(CLDRLocale.getInstance(locale), xpath);
78     }
79 
80     /**
81      * Get a link to a specific xpath and locale.
82      * @param locale locale to view
83      * @param xpath the xpath to view
84      */
forXpath(CLDRLocale locale, String xpath)85     public final String forXpath(CLDRLocale locale, String xpath) {
86         assertIsXpath(xpath);
87         final String hexid = (xpath == null) ? null : StringId.getHexId(xpath);
88         return forXpathHexId(locale, hexid);
89     }
90 
91     /**
92      * please use CLDRLocale instead
93      * @param locale
94      * @param hexid
95      * @return
96      */
forXpathHexId(String locale, String hexid)97     public final String forXpathHexId(String locale, String hexid) {
98         return forXpathHexId(CLDRLocale.getInstance(locale), hexid);
99     }
100 
101     /**
102      * Get a link to a specific xpath hex ID and locale.
103      * @param locale
104      * @param hexid
105      * @return
106      */
forXpathHexId(CLDRLocale locale, String hexid)107     public final String forXpathHexId(CLDRLocale locale, String hexid) {
108         assertIsHexId(hexid);
109         return forSpecial(Special.Survey, locale, (String) null, hexid);
110     }
111 
112     /**
113      * please use CLDRLocale instead
114      * @param locale
115      * @param hexid
116      * @return
117      */
forXpathHexId(String locale, PathHeader.PageId page, String hexid)118     public final String forXpathHexId(String locale, PathHeader.PageId page, String hexid) {
119         return forXpathHexId(CLDRLocale.getInstance(locale), page, hexid);
120     }
121 
122     /**
123      * Get a link to a specific xpath hex ID and locale.
124      * @param locale
125      * @param hexid
126      * @return
127      */
forXpathHexId(CLDRLocale locale, PathHeader.PageId page, String hexid)128     public final String forXpathHexId(CLDRLocale locale, PathHeader.PageId page, String hexid) {
129         assertIsHexId(hexid);
130         return forSpecial(Special.Survey, locale, page, hexid);
131     }
132 
133     /**
134      * please use CLDRLocale instead
135      * @param locale
136      * @param page
137      * @return
138      */
forPage(String locale, PathHeader.PageId page)139     public final String forPage(String locale, PathHeader.PageId page) {
140         return forPage(CLDRLocale.getInstance(locale), page);
141     }
142 
forPage(CLDRLocale locale, PathHeader.PageId page)143     public final String forPage(CLDRLocale locale, PathHeader.PageId page) {
144         return forSpecial(Special.Survey, locale, page.name(), null);
145     }
146 
147     /**
148      * Get a link to a specific locale in the SurveyTool.
149      * @param locale
150      * @return
151      */
forLocale(CLDRLocale locale)152     public final String forLocale(CLDRLocale locale) {
153         return forXpath(locale, null);
154     }
155 
forSpecial(Special special, CLDRLocale locale, PathHeader.PageId page, String hexid)156     public final String forSpecial(Special special, CLDRLocale locale, PathHeader.PageId page, String hexid) {
157         return forSpecial(special, locale, page.name(), hexid);
158     }
159 
forSpecial(Special special)160     public final String forSpecial(Special special) {
161         return forSpecial(special, (CLDRLocale) null, (String) null, null);
162     }
163 
forSpecial(Special special, CLDRLocale locale)164     public final String forSpecial(Special special, CLDRLocale locale) {
165         return forSpecial(special, locale, (String) null, null);
166     }
167 
168     /**
169      * Get a link from all of the parts.
170      * @param special
171      * @param locale
172      * @param page
173      * @param xpath
174      * @return
175      */
forSpecial(Special special, CLDRLocale locale, String page, String hexid)176     public String forSpecial(Special special, CLDRLocale locale, String page, String hexid) {
177         StringBuilder sb = new StringBuilder(base());
178         sb.append(VPATH);
179         if (special != null) {
180             sb.append(special.id);
181         }
182         sb.append('/');
183         if (locale != null) {
184             sb.append(locale.getBaseName());
185         }
186         sb.append('/');
187         if (page != null) {
188             sb.append(page);
189         }
190         sb.append('/');
191         if (hexid != null) {
192             sb.append(hexid);
193         }
194         return sb.toString();
195     }
196 
197     /**
198      * @param hexid
199      * @throws IllegalArgumentException
200      */
assertIsHexId(String hexid)201     final public void assertIsHexId(String hexid) throws IllegalArgumentException {
202         if (hexid != null && hexid.startsWith("/")) {
203             throw new IllegalArgumentException("This function takes a hex StringID: perhaps you meant to use forXpath() instead.");
204         }
205     }
206 
207     /**
208      * @param xpath
209      * @throws IllegalArgumentException
210      */
assertIsXpath(String xpath)211     final public void assertIsXpath(String xpath) throws IllegalArgumentException {
212         if (xpath != null && !xpath.startsWith("/")) {
213             throw new IllegalArgumentException("This function takes an XPath: perhaps you meant to use forXpathHexId() instead.");
214         }
215     }
216 
217     /**
218      * please use CLDRLocale instead
219      * @param vetting
220      * @param localeID
221      * @return
222      */
forSpecial(Special special, String localeID)223     public final String forSpecial(Special special, String localeID) {
224         return forSpecial(special, CLDRLocale.getInstance(localeID));
225     }
226 
forPathHeader(String locale, PathHeader pathHeader)227     public final String forPathHeader(String locale, PathHeader pathHeader) {
228         return forPathHeader(CLDRLocale.getInstance(locale), pathHeader);
229     }
230 
231     /**
232      * This is the preferred function for jumping to an item relatively. It will reduce blinkage.
233      * @param locale
234      * @param pathHeader
235      * @return
236      */
forPathHeader(CLDRLocale locale, PathHeader pathHeader)237     public final String forPathHeader(CLDRLocale locale, PathHeader pathHeader) {
238         return forSpecial(Special.Survey, locale, pathHeader.getPageId(), StringId.getHexId(pathHeader.getOriginalPath()));
239     }
240 }
241