| package org.unicode.cldr.util; |
| |
| /** |
| * Generate URLs to parts of CLDR and the SurveyTool. |
| * You can change the urls used with for example, -DCLDR_SURVEY_BASE=http://st.unicode.org/smoketest |
| * |
| * @author srl |
| * |
| */ |
| public abstract class CLDRURLS { |
| public static final String DEFAULT_HOST = "st.unicode.org"; |
| public static final String DEFAULT_PATH = "/cldr-apps"; |
| public static final String DEFAULT_BASE = "http://" + DEFAULT_HOST + DEFAULT_PATH; |
| public static final String CLDR_NEWTICKET_URL = "http://unicode.org/cldr/trac/newticket"; |
| /** |
| * Override this property if you want to change the absolute URL to the SurveyTool base from DEFAULT_BASE |
| */ |
| public static final String CLDR_SURVEY_BASE = "CLDR_SURVEY_BASE"; |
| /** |
| * Override this property if you want to change the relative URL to the SurveyTool base from DEFAULT_PATH (within SurveyTool only) |
| */ |
| public static final String CLDR_SURVEY_PATH = "CLDR_SURVEY_PATH"; |
| |
| /** |
| * "special" pages |
| * @author srl |
| * |
| */ |
| public enum Special { |
| /** |
| * The 'main' view |
| */ |
| Survey(""), |
| /** |
| * The list of locales |
| */ |
| Locales, |
| /** |
| * The vetting viewer (i.e. Dashboard) |
| */ |
| Vetting("r_vetting_json"), |
| /** |
| * Forums. use "id" for the numeric post id |
| */ |
| Forum; |
| |
| Special(String s) { |
| this.id = s; |
| } |
| |
| /** |
| * Convenience - just lowercases |
| */ |
| Special() { |
| this.id = this.name().toLowerCase(); |
| } |
| |
| private final String id; |
| } |
| |
| protected static String VPATH = "/v#"; |
| |
| /** |
| * Get the relative base URL for the SurveyTool. |
| * This may be "/cldr-apps", for example. |
| * @return example, "/cldr-apps" |
| */ |
| public abstract String base(); |
| |
| /** |
| * please use CLDRLocale instead |
| * @param locale |
| * @param xpath |
| * @return |
| */ |
| public String forXpath(String locale, String xpath) { |
| return forXpath(CLDRLocale.getInstance(locale), xpath); |
| } |
| |
| /** |
| * Get a link to a specific xpath and locale. |
| * @param locale locale to view |
| * @param xpath the xpath to view |
| */ |
| public final String forXpath(CLDRLocale locale, String xpath) { |
| assertIsXpath(xpath); |
| final String hexid = (xpath == null) ? null : StringId.getHexId(xpath); |
| return forXpathHexId(locale, hexid); |
| } |
| |
| /** |
| * please use CLDRLocale instead |
| * @param locale |
| * @param hexid |
| * @return |
| */ |
| public final String forXpathHexId(String locale, String hexid) { |
| return forXpathHexId(CLDRLocale.getInstance(locale), hexid); |
| } |
| |
| /** |
| * Get a link to a specific xpath hex ID and locale. |
| * @param locale |
| * @param hexid |
| * @return |
| */ |
| public final String forXpathHexId(CLDRLocale locale, String hexid) { |
| assertIsHexId(hexid); |
| return forSpecial(Special.Survey, locale, (String) null, hexid); |
| } |
| |
| /** |
| * please use CLDRLocale instead |
| * @param locale |
| * @param hexid |
| * @return |
| */ |
| public final String forXpathHexId(String locale, PathHeader.PageId page, String hexid) { |
| return forXpathHexId(CLDRLocale.getInstance(locale), page, hexid); |
| } |
| |
| /** |
| * Get a link to a specific xpath hex ID and locale. |
| * @param locale |
| * @param hexid |
| * @return |
| */ |
| public final String forXpathHexId(CLDRLocale locale, PathHeader.PageId page, String hexid) { |
| assertIsHexId(hexid); |
| return forSpecial(Special.Survey, locale, page, hexid); |
| } |
| |
| /** |
| * please use CLDRLocale instead |
| * @param locale |
| * @param page |
| * @return |
| */ |
| public final String forPage(String locale, PathHeader.PageId page) { |
| return forPage(CLDRLocale.getInstance(locale), page); |
| } |
| |
| public final String forPage(CLDRLocale locale, PathHeader.PageId page) { |
| return forSpecial(Special.Survey, locale, page.name(), null); |
| } |
| |
| /** |
| * Get a link to a specific locale in the SurveyTool. |
| * @param locale |
| * @return |
| */ |
| public final String forLocale(CLDRLocale locale) { |
| return forXpath(locale, null); |
| } |
| |
| public final String forSpecial(Special special, CLDRLocale locale, PathHeader.PageId page, String hexid) { |
| return forSpecial(special, locale, page.name(), hexid); |
| } |
| |
| public final String forSpecial(Special special) { |
| return forSpecial(special, (CLDRLocale) null, (String) null, null); |
| } |
| |
| public final String forSpecial(Special special, CLDRLocale locale) { |
| return forSpecial(special, locale, (String) null, null); |
| } |
| |
| /** |
| * Get a link from all of the parts. |
| * @param special |
| * @param locale |
| * @param page |
| * @param xpath |
| * @return |
| */ |
| public String forSpecial(Special special, CLDRLocale locale, String page, String hexid) { |
| StringBuilder sb = new StringBuilder(base()); |
| sb.append(VPATH); |
| if (special != null) { |
| sb.append(special.id); |
| } |
| sb.append('/'); |
| if (locale != null) { |
| sb.append(locale.getBaseName()); |
| } |
| sb.append('/'); |
| if (page != null) { |
| sb.append(page); |
| } |
| sb.append('/'); |
| if (hexid != null) { |
| sb.append(hexid); |
| } |
| return sb.toString(); |
| } |
| |
| /** |
| * @param hexid |
| * @throws IllegalArgumentException |
| */ |
| final public void assertIsHexId(String hexid) throws IllegalArgumentException { |
| if (hexid != null && hexid.startsWith("/")) { |
| throw new IllegalArgumentException("This function takes a hex StringID: perhaps you meant to use forXpath() instead."); |
| } |
| } |
| |
| /** |
| * @param xpath |
| * @throws IllegalArgumentException |
| */ |
| final public void assertIsXpath(String xpath) throws IllegalArgumentException { |
| if (xpath != null && !xpath.startsWith("/")) { |
| throw new IllegalArgumentException("This function takes an XPath: perhaps you meant to use forXpathHexId() instead."); |
| } |
| } |
| |
| /** |
| * please use CLDRLocale instead |
| * @param vetting |
| * @param localeID |
| * @return |
| */ |
| public final String forSpecial(Special special, String localeID) { |
| return forSpecial(special, CLDRLocale.getInstance(localeID)); |
| } |
| |
| public final String forPathHeader(String locale, PathHeader pathHeader) { |
| return forPathHeader(CLDRLocale.getInstance(locale), pathHeader); |
| } |
| |
| /** |
| * This is the preferred function for jumping to an item relatively. It will reduce blinkage. |
| * @param locale |
| * @param pathHeader |
| * @return |
| */ |
| public final String forPathHeader(CLDRLocale locale, PathHeader pathHeader) { |
| return forSpecial(Special.Survey, locale, pathHeader.getPageId(), StringId.getHexId(pathHeader.getOriginalPath())); |
| } |
| } |