17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2003-2010, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.text; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.Format; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * An abstract class that extends {@link java.text.Format} to provide 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * additional ICU protocol, specifically, the <tt>getLocale()</tt> 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * API. All ICU format classes are subclasses of this class. 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.ULocale 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author weiv 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author Alan Liu 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @draft ICU 2.8 (retain) 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @provisional This API might change or be removed in a future release. 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic abstract class UFormat extends Format { 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // jdk1.4.2 serialver 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final long serialVersionUID = -4964390515840164416L; 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @draft ICU 2.8 (retain) 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @provisional This API might change or be removed in a future release. 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public UFormat() {} 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // -------- BEGIN ULocale boilerplate -------- 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Return the locale that was used to create this object, or null. 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * This may may differ from the locale requested at the time of 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * this object's creation. For example, if an object is created 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * for locale <tt>en_US_CALIFORNIA</tt>, the actual data may be 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * drawn from <tt>en</tt> (the <i>actual</i> locale), and 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * <tt>en_US</tt> may be the most specific locale that exists (the 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * <i>valid</i> locale). 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * <p>Note: This method will be implemented in ICU 3.0; ICU 2.8 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * contains a partial preview implementation. The <i>actual</i> 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * locale is returned correctly, but the <i>valid</i> locale is 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * not, in most cases. 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param type type of information requested, either {@link 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * com.ibm.icu.util.ULocale#VALID_LOCALE} or {@link 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * com.ibm.icu.util.ULocale#ACTUAL_LOCALE}. 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @return the information specified by <i>type</i>, or null if 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * this object was not constructed from locale data. 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.ULocale 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.ULocale#VALID_LOCALE 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.ULocale#ACTUAL_LOCALE 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @draft ICU 2.8 (retain) 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @provisional This API might change or be removed in a future release. 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public final ULocale getLocale(ULocale.Type type) { 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return type == ULocale.ACTUAL_LOCALE ? 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.actualLocale : this.validLocale; 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Set information about the locales that were used to create this 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * object. If the object was not constructed from locale data, 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * both arguments should be set to null. Otherwise, neither 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * should be null. The actual locale must be at the same level or 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * less specific than the valid locale. This method is intended 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * for use by factories or other entities that create objects of 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * this class. 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param valid the most specific locale containing any resource 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * data, or null 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param actual the locale containing data used to construct this 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * object, or null 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.ULocale 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.ULocale#VALID_LOCALE 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.ULocale#ACTUAL_LOCALE 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final void setLocale(ULocale valid, ULocale actual) { 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Change the following to an assertion later 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if ((valid == null) != (actual == null)) { 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ///CLOVER:OFF 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert throw new IllegalArgumentException(); 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ///CLOVER:ON 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Another check we could do is that the actual locale is at 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // the same level or less specific than the valid locale. 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.validLocale = valid; 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.actualLocale = actual; 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The most specific locale containing any resource data, or null. 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.ULocale 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private ULocale validLocale; 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The locale containing data used to construct this object, or 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * null. 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.ULocale 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private ULocale actualLocale; 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // -------- END ULocale boilerplate -------- 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 109