2 * pre-defined avatar info
\r
4 * License : The MIT License
\r
5 * Copyright(c) 2009 olyutorskii
\r
8 package jp.sourceforge.jindolf.corelib;
\r
10 import java.io.IOException;
\r
11 import java.io.InputStream;
\r
12 import java.util.ArrayList;
\r
13 import java.util.Collections;
\r
14 import java.util.List;
\r
15 import javax.xml.parsers.DocumentBuilder;
\r
16 import org.w3c.dom.Document;
\r
17 import org.w3c.dom.Element;
\r
18 import org.w3c.dom.Node;
\r
19 import org.w3c.dom.NodeList;
\r
20 import org.xml.sax.SAXException;
\r
23 * プリセット済みAvatarに関する情報。
\r
26 public final class PreDefAvatar{
\r
28 private final String avatarId;
\r
29 private final String fullName;
\r
30 private final String jobTitle;
\r
31 private final String shortName;
\r
32 private final int serialNo;
\r
37 * @param avatarId Avatar識別子
\r
38 * @param fullName フルネーム
\r
39 * @param jobTitle 職業名
\r
40 * @param shortName 省略名
\r
41 * @param serialNo 通し番号
\r
43 private PreDefAvatar(String avatarId,
\r
50 if( avatarId == null
\r
53 || shortName == null ){
\r
54 throw new NullPointerException();
\r
57 if( avatarId.length() <= 0
\r
58 || fullName.length() <= 0
\r
60 throw new IllegalArgumentException();
\r
63 this.avatarId = avatarId.intern();
\r
64 this.fullName = fullName.intern();
\r
65 this.jobTitle = jobTitle.intern();
\r
66 this.shortName = shortName.intern();
\r
67 this.serialNo = serialNo;
\r
74 * プリセット済みAvatar一覧リストを生成する。
\r
75 * @param builder DOMビルダ
\r
76 * @return プリセット済みAvatar一覧リスト
\r
77 * @throws IOException IOエラー
\r
78 * @throws SAXException パースエラー
\r
80 public static List<PreDefAvatar> buildPreDefAvatarList(
\r
81 DocumentBuilder builder)
\r
84 Element list = loadAvatarList(builder);
\r
85 List<PreDefAvatar> result;
\r
86 result = elemToAvatarList(list);
\r
87 result = Collections.unmodifiableList(result);
\r
92 * プリセットAvatarに関する定義をロードする。
\r
93 * @see XmlResource#I_URL_AVATARDEF ロード対象となるXMLリソースのURL
\r
94 * @param builder DOMビルダ
\r
95 * @return Avatar定義情報のルート要素
\r
96 * @throws IOException IOエラー
\r
97 * @throws SAXException パースエラー
\r
99 private static Element loadAvatarList(DocumentBuilder builder)
\r
100 throws IOException,
\r
102 InputStream istream = XmlResource.I_URL_AVATARDEF.openStream();
\r
105 document = builder.parse(istream);
\r
110 Element root = document.getDocumentElement();
\r
111 String tagName = root.getTagName();
\r
112 if( ! "preDefinedAvatarList".equals(tagName) ){
\r
113 throw new SAXException("illegal root " + tagName);
\r
120 * 要素内部を探索し、プリセットAvatarを登録する。
\r
121 * @param list ルート要素
\r
122 * @return プリセットAvatarが登録されたList
\r
123 * @throws SAXException パースエラー
\r
125 private static List<PreDefAvatar> elemToAvatarList(Element list)
\r
126 throws SAXException {
\r
127 NodeList elems = list.getElementsByTagName("preDefinedAvatar");
\r
128 int avatarNum = elems.getLength();
\r
129 if(avatarNum <= 0){
\r
130 throw new SAXException("there is no <preDefinedAvatar>");
\r
132 List<PreDefAvatar> avatarList =
\r
133 new ArrayList<PreDefAvatar>(avatarNum);
\r
135 for(int index = 0; index < avatarNum; index++){
\r
136 Node node = elems.item(index);
\r
137 Element elem = (Element) node;
\r
138 PreDefAvatar avatar = buildAvatar(elem);
\r
139 avatarList.add(avatar);
\r
146 * 個々のプリセットAvatar定義をオブジェクトに変換する。
\r
147 * @param avatarDef プリセットAvatar定義要素
\r
148 * @return プリセットAvatar定義オブジェクト
\r
149 * @throws SAXException パースエラー
\r
151 private static PreDefAvatar buildAvatar(Element avatarDef)
\r
152 throws SAXException {
\r
153 String avatarId = avatarDef.getAttribute("avatarId");
\r
154 String jobTitle = avatarDef.getAttribute("jobTitle");
\r
155 String shortName = avatarDef.getAttribute("shortName");
\r
156 String serialNum = avatarDef.getAttribute("serialNum");
\r
158 String fullName = jobTitle + "\u0020" + shortName;
\r
162 serialNo = Integer.parseInt(serialNum);
\r
163 }catch(NumberFormatException e){
\r
164 throw new SAXException("illegal number form", e);
\r
167 PreDefAvatar avatar = new PreDefAvatar(avatarId,
\r
179 * @return Avatar識別子
\r
181 public String getAvatarId(){
\r
182 return this.avatarId;
\r
189 public String getFullName(){
\r
190 return this.fullName;
\r
197 public String getJobTitle(){
\r
198 return this.jobTitle;
\r
205 public String getShortName(){
\r
206 return this.shortName;
\r
213 public int getSerialNo(){
\r
214 return this.serialNo;
\r