2 * internationalization name alias
4 * License : The MIT License
5 * Copyright(c) 2011 MikuToga Partners
8 package jp.sfjp.mikutoga.typical;
10 import java.io.IOException;
11 import java.io.InputStream;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.Comparator;
15 import java.util.LinkedList;
16 import java.util.List;
17 import javax.xml.parsers.DocumentBuilder;
18 import javax.xml.parsers.DocumentBuilderFactory;
19 import javax.xml.parsers.ParserConfigurationException;
20 import org.w3c.dom.Document;
21 import org.w3c.dom.Element;
22 import org.xml.sax.SAXException;
25 * 国際化&別名管理オブジェクトの実装基板。
28 * プライマリ名の不変リストとグローバル名の不変リストを持つ。
29 * <p>国産モデルではプライマリ名に日本語名が収められることが多い。
30 * プライマリ名は必ず一つ以上なければならない。
31 * <p>国産モデルではグローバル名に英語名が収められることが多いが、
32 * プライマリ名と同一の日本語名が収められている場合も多い。
34 * インスタンス間での順序を定義するためのオーダー番号を持つ。
38 /** オーダ番号によるコンパレータ。 */
39 public static final Comparator<I18nAlias> ORDER_COMPARATOR =
40 new OrderComparator();
45 private final List<String> primaryNameList;
46 private final List<String> globalNameList;
48 private final List<String> umodPrimaryNameList;
49 private final List<String> umodGlobalNameList;
55 * 状況に応じて伸長する連結リストが用意される。
56 * @param primaryNum プライマリ名初期数。
57 * @param globalNum グローバル名初期数。
59 protected I18nAlias(int primaryNum, int globalNum){
63 this.primaryNameList = new LinkedList<String>();
65 this.primaryNameList = new ArrayList<String>(primaryNum);
69 this.globalNameList = new LinkedList<String>();
71 this.globalNameList = new ArrayList<String>(globalNum);
74 this.umodPrimaryNameList =
75 Collections.unmodifiableList(this.primaryNameList);
76 this.umodGlobalNameList =
77 Collections.unmodifiableList(this.globalNameList);
85 * 状況に応じて伸長する連結リストが用意される。
87 protected I18nAlias(){
97 * @throws ParserConfigurationException XMLの構成が変
98 * @throws SAXException XMLの内容が変
99 * @throws IOException 入力エラー
101 protected static Element loadXml(InputStream is)
102 throws ParserConfigurationException, SAXException, IOException {
103 DocumentBuilderFactory factory;
104 factory = DocumentBuilderFactory.newInstance();
106 DocumentBuilder builder = factory.newDocumentBuilder();
107 Document doc = builder.parse(is);
109 Element top = doc.getDocumentElement();
119 protected int getOrderNo(){
125 * @param orderNo オーダー番号
127 protected void setOrderNo(int orderNo){
128 this.orderNo = orderNo;
137 public String getTopPrimaryName(){
138 String result = this.primaryNameList.get(0);
144 * @return 最初のグローバル名。ひとつもなければnull
146 public String getTopGlobalName(){
147 if(this.globalNameList.isEmpty()) return null;
149 String result = this.globalNameList.get(0);
156 * @return 全別名リスト。(不可変)
158 public List<String> getPrimaryNameList(){
159 return this.umodPrimaryNameList;
164 * @param primaryName プライマリ名
166 protected void addPrimaryName(String primaryName){
167 this.primaryNameList.add(primaryName);
173 * @return 全別名リスト。(不可変)
175 public List<String> getGlobalNameList(){
176 return this.umodGlobalNameList;
181 * @param globalName グローバル名
183 protected void addGlobalName(String globalName){
184 this.globalNameList.add(globalName);
191 @SuppressWarnings("serial")
192 private static class OrderComparator
193 implements Comparator<I18nAlias> {
205 * @param o1 {@inheritDoc}
206 * @param o2 {@inheritDoc}
207 * @return {@inheritDoc}
210 public int compare(I18nAlias o1, I18nAlias o2){
211 int result = o1.getOrderNo() - o2.getOrderNo();