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 * 国際化&別名管理オブジェクトの実装基板。
29 * プライマリ名の不変リストとグローバル名の不変リストを持つ。
31 * <p>国産モデルではプライマリ名に日本語名が収められることが多い。
32 * プライマリ名は必ず一つ以上なければならない。
34 * <p>国産モデルではグローバル名に英語名が収められることが多いが、
35 * プライマリ名と同一の日本語名が収められている場合も多い。
38 * インスタンス間での順序を定義するためのオーダー番号を持つ。
42 /** オーダ番号によるコンパレータ。 */
43 public static final Comparator<I18nAlias> ORDER_COMPARATOR =
44 new OrderComparator();
49 private final List<String> primaryNameList;
50 private final List<String> globalNameList;
52 private final List<String> umodPrimaryNameList;
53 private final List<String> umodGlobalNameList;
60 * 状況に応じて伸長する連結リストが用意される。
62 * @param primaryNum プライマリ名初期数。
63 * @param globalNum グローバル名初期数。
65 protected I18nAlias(int primaryNum, int globalNum){
69 this.primaryNameList = new LinkedList<String>();
71 this.primaryNameList = new ArrayList<String>(primaryNum);
75 this.globalNameList = new LinkedList<String>();
77 this.globalNameList = new ArrayList<String>(globalNum);
80 this.umodPrimaryNameList =
81 Collections.unmodifiableList(this.primaryNameList);
82 this.umodGlobalNameList =
83 Collections.unmodifiableList(this.globalNameList);
92 * 状況に応じて伸長する連結リストが用意される。
94 protected I18nAlias(){
104 * @throws ParserConfigurationException XMLの構成が変
105 * @throws SAXException XMLの内容が変
106 * @throws IOException 入力エラー
108 protected static Element loadXml(InputStream is)
109 throws ParserConfigurationException, SAXException, IOException {
110 DocumentBuilderFactory factory;
111 factory = DocumentBuilderFactory.newInstance();
113 DocumentBuilder builder = factory.newDocumentBuilder();
114 Document doc = builder.parse(is);
116 Element top = doc.getDocumentElement();
126 protected int getOrderNo(){
132 * @param orderNo オーダー番号
134 protected void setOrderNo(int orderNo){
135 this.orderNo = orderNo;
146 public String getTopPrimaryName(){
147 String result = this.primaryNameList.get(0);
153 * @return 最初のグローバル名。ひとつもなければnull
155 public String getTopGlobalName(){
156 if(this.globalNameList.isEmpty()) return null;
158 String result = this.globalNameList.get(0);
165 * @return 全別名リスト。(不可変)
167 public List<String> getPrimaryNameList(){
168 return this.umodPrimaryNameList;
173 * @param primaryName プライマリ名
175 protected void addPrimaryName(String primaryName){
176 this.primaryNameList.add(primaryName);
182 * @return 全別名リスト。(不可変)
184 public List<String> getGlobalNameList(){
185 return this.umodGlobalNameList;
190 * @param globalName グローバル名
192 protected void addGlobalName(String globalName){
193 this.globalNameList.add(globalName);
200 @SuppressWarnings("serial")
201 private static class OrderComparator
202 implements Comparator<I18nAlias> {
214 * @param o1 {@inheritDoc}
215 * @param o2 {@inheritDoc}
216 * @return {@inheritDoc}
219 public int compare(I18nAlias o1, I18nAlias o2){
220 int result = o1.getOrderNo() - o2.getOrderNo();