OSDN Git Service

dmg作成バージョンの取得方法の修正
[charactermanaj/CharacterManaJ.git] / src / main / java / charactermanaj / model / PartsManageData.java
1 package charactermanaj.model;\r
2 \r
3 import java.sql.Timestamp;\r
4 import java.util.AbstractCollection;\r
5 import java.util.ArrayList;\r
6 import java.util.Collection;\r
7 import java.util.Collections;\r
8 import java.util.HashMap;\r
9 import java.util.Iterator;\r
10 import java.util.Map;\r
11 \r
12 /**\r
13  * パーツ管理情報.<br>\r
14  * パーツ識別子のかわりに、パーツキーを用いる.<br>\r
15  * パーツキーは、CategoryIdがnullであることを許可している.<br>\r
16  * カテゴリを省略し、パーツ名だけでパーツ管理情報を検索できるようにするためのもの.<br>\r
17  * \r
18  * @author seraphy\r
19  */\r
20 public class PartsManageData extends AbstractCollection<PartsManageData.PartsKey> {\r
21 \r
22         /**\r
23          * パーツキー.<br>\r
24          * パーツ識別子 {@link PartsIdentifier} とほぼ同等であるが、カテゴリがnullであることを許可している点が異なる.<br>\r
25          * \r
26          * @author seraphy\r
27          */\r
28         public static final class PartsKey implements Comparable<PartsKey> {\r
29                 \r
30                 private final String partsName;\r
31                 \r
32                 private final String categoryId;\r
33                 \r
34                 public PartsKey(String partsName) {\r
35                         this(partsName, null);\r
36                 }\r
37                 \r
38                 public PartsKey(String partsName, String categoryId) {\r
39                         if (partsName == null || partsName.length() == 0) {\r
40                                 throw new IllegalArgumentException();\r
41                         }\r
42                         if (categoryId != null && categoryId.trim().length() == 0) {\r
43                                 categoryId = null;\r
44                         }\r
45                         this.partsName = partsName;\r
46                         this.categoryId = categoryId;\r
47                 }\r
48                 \r
49                 public PartsKey(PartsIdentifier partsIdentifier) {\r
50                         if (partsIdentifier == null) {\r
51                                 throw new IllegalArgumentException();\r
52                         }\r
53                         this.partsName = partsIdentifier.getPartsName();\r
54                         this.categoryId = partsIdentifier.getPartsCategory().getCategoryId();\r
55                 }\r
56                 \r
57                 public int compareTo(PartsKey o) {\r
58                         int ret = partsName.compareTo(o.partsName);\r
59                         if (ret == 0) {\r
60                                 if (categoryId == null || o.categoryId == null) {\r
61                                         ret = (categoryId == o.categoryId) ? 0 : (categoryId == null ? -1 : 1); \r
62                                 }\r
63                         }\r
64                         return ret;\r
65                 }\r
66                 \r
67                 public String getCategoryId() {\r
68                         return categoryId;\r
69                 }\r
70                 \r
71                 public String getPartsName() {\r
72                         return partsName;\r
73                 }\r
74                 \r
75                 @Override\r
76                 public int hashCode() {\r
77                         return partsName.hashCode();\r
78                 }\r
79                 \r
80                 @Override\r
81                 public boolean equals(Object obj) {\r
82                         if (obj == this) {\r
83                                 return true;\r
84                         }\r
85                         if (obj != null && obj instanceof PartsKey) {\r
86                                 PartsKey o = (PartsKey) obj;\r
87                                 if (partsName.equals(o.partsName)) {\r
88                                         return categoryId == null ? (o.categoryId == null)\r
89                                                         : categoryId.equals(o.categoryId);\r
90                                 }\r
91                         }\r
92                         return false;\r
93                 }\r
94         }\r
95 \r
96         /**\r
97          * パーツごとのバージョンとダウンロードURL情報を保持するホルダークラス.<br>\r
98          * \r
99          * @author seraphy\r
100          */\r
101         public static final class PartsVersionInfo {\r
102                 \r
103                 private double version;\r
104                 \r
105                 private String downloadURL;\r
106                 \r
107                 private Timestamp lastModified;\r
108 \r
109                 public PartsVersionInfo() {\r
110                         super();\r
111                 }\r
112                 \r
113                 public PartsVersionInfo(double version, String downloadURL) {\r
114                         this(version, downloadURL, null);\r
115                 }\r
116                 \r
117                 public PartsVersionInfo(double version, String downloadURL,\r
118                                 Timestamp lastModified) {\r
119                         this.version = version;\r
120                         this.downloadURL = downloadURL;\r
121                         this.lastModified = lastModified;\r
122                 }\r
123 \r
124                 public double getVersion() {\r
125                         return version;\r
126                 }\r
127                 \r
128                 public String getDownloadURL() {\r
129                         return downloadURL;\r
130                 }\r
131                 \r
132                 public void setVersion(double version) {\r
133                         this.version = version;\r
134                 }\r
135                 \r
136                 public void setDownloadURL(String downloadURL) {\r
137                         this.downloadURL = downloadURL;\r
138                 }\r
139 \r
140                 public Timestamp getLastModified() {\r
141                         return lastModified;\r
142                 }\r
143 \r
144                 public void setLastModified(Timestamp lastModified) {\r
145                         this.lastModified = lastModified;\r
146                 }\r
147         }\r
148 \r
149         \r
150         /**\r
151          * パーツキーと、それに対する作者情報\r
152          */\r
153         private HashMap<PartsKey, PartsAuthorInfo> partsAuthorInfoMap = new HashMap<PartsKey, PartsAuthorInfo>();\r
154         \r
155         /**\r
156          * パーツキーと、それに対するローカライズ名\r
157          */\r
158         private HashMap<PartsKey, String> partsLocalizedNameMap = new HashMap<PartsKey, String>();\r
159 \r
160         /**\r
161          * パーツキーと、それに対するバージョン情報\r
162          */\r
163         private HashMap<PartsKey, PartsVersionInfo> partsVersionInfoMap = new HashMap<PartsKey, PartsVersionInfo>();\r
164 \r
165 \r
166         /**\r
167          * すべてクリアする.<br>\r
168          */\r
169         @Override\r
170         public void clear() {\r
171                 partsAuthorInfoMap.clear();\r
172                 partsLocalizedNameMap.clear();\r
173                 partsVersionInfoMap.clear();\r
174         }\r
175         \r
176         /**\r
177          * パーツキーに結びつく、各種情報を登録する.<br>\r
178          * \r
179          * @param partsKey\r
180          *            パーツキー\r
181          * @param localizedName\r
182          *            ローカライズ名(なければnull)\r
183          * @param partsAuthorInfo\r
184          *            作者情報 (なければnull)\r
185          * @param versionInfo\r
186          *            バージョン情報 (なければnull)\r
187          */\r
188         public void putPartsInfo(PartsKey partsKey, String localizedName, PartsAuthorInfo partsAuthorInfo, PartsVersionInfo versionInfo) {\r
189                 if (partsKey == null) {\r
190                         throw new IllegalArgumentException();\r
191                 }\r
192                 partsAuthorInfoMap.put(partsKey, partsAuthorInfo);\r
193                 partsLocalizedNameMap.put(partsKey, localizedName);\r
194                 partsVersionInfoMap.put(partsKey, versionInfo);\r
195         }\r
196         \r
197         /**\r
198          * パーツキーを指定して該当する作者情報を取得する.<br>\r
199          * 完全に一致する作者情報がない場合は、カテゴリを無視して、パーツキーのパーツ名(ID)の一致する、いずれかの作者情報を返す.<br>\r
200          * \r
201          * @param partsKey\r
202          *            パーツキー\r
203          * @return 作者情報、完全に一致するものがなく、且つ、パーツ名(ID)に一致する情報もない場合はnull\r
204          */\r
205         public PartsAuthorInfo getPartsAuthorInfo(PartsKey partsKey) {\r
206                 if (partsKey == null) {\r
207                         return null;\r
208                 }\r
209                 PartsAuthorInfo authorInfo = partsAuthorInfoMap.get(partsKey);\r
210                 if (authorInfo == null) {\r
211                         for (Map.Entry<PartsKey, PartsAuthorInfo> entry : partsAuthorInfoMap.entrySet()) {\r
212                                 PartsKey key = entry.getKey();\r
213                                 if (key.getPartsName().equals(partsKey.getPartsName())) {\r
214                                         authorInfo = entry.getValue();\r
215                                         break;\r
216                                 }\r
217                         }\r
218                 }\r
219                 return authorInfo;\r
220         }\r
221 \r
222         /**\r
223          * パーツキーと完全に一致する作者情報を取得する.<br>\r
224          * 存在しない場合はnullを返す.<br>\r
225          * \r
226          * @param partsKey\r
227          *            パーツキー\r
228          * @return 作者情報、もしくはnull\r
229          */\r
230         public PartsAuthorInfo getPartsAuthorInfoStrict(PartsKey partsKey) {\r
231                 if (partsKey == null) {\r
232                         return null;\r
233                 }\r
234                 return partsAuthorInfoMap.get(partsKey);\r
235         }\r
236         \r
237         /**\r
238          * パーツキーを指定して該当するバージョン情報を取得する.<br>\r
239          * 完全に一致するバージョン情報がない場合は、カテゴリを無視して、パーツキーのパーツ名(ID)の一致する、いずれかのバージョン情報を返す.<br>\r
240          * \r
241          * @param partsKey\r
242          *            パーツキー\r
243          * @return バージョン情報、完全に一致するものがなく、且つ、パーツ名(ID)に一致する情報もない場合はnull\r
244          */\r
245         public PartsVersionInfo getVersion(PartsKey partsKey) {\r
246                 if (partsKey == null) {\r
247                         return null;\r
248                 }\r
249                 PartsVersionInfo versionInfo = partsVersionInfoMap.get(partsKey);\r
250                 if (versionInfo == null) {\r
251                         for (Map.Entry<PartsKey, PartsVersionInfo> entry : partsVersionInfoMap.entrySet()) {\r
252                                 PartsKey key = entry.getKey();\r
253                                 if (key.getPartsName().equals(partsKey.getPartsName())) {\r
254                                         versionInfo = entry.getValue();\r
255                                         break;\r
256                                 }\r
257                         }\r
258                 }\r
259                 return versionInfo;\r
260         }\r
261         \r
262         /**\r
263          * パーツキーを指定して該当するローカライズ名を取得する.<br>\r
264          * 完全に一致するバージョン情報がない場合は、カテゴリを無視して、パーツキーのパーツ名(ID)の一致する、いずれかのローカライズ名を返す.<br>\r
265          * \r
266          * @param partsKey\r
267          *            パーツキー\r
268          * @return バージョン情報、完全に一致するものがなく、且つ、パーツ名(ID)に一致する情報もない場合はnull\r
269          */\r
270         public String getLocalizedName(PartsKey partsKey) {\r
271                 if (partsKey == null) {\r
272                         return null;\r
273                 }\r
274                 String localizedName = partsLocalizedNameMap.get(partsKey);\r
275                 if (localizedName == null) {\r
276                         for (Map.Entry<PartsKey, String> entry : partsLocalizedNameMap.entrySet()) {\r
277                                 PartsKey key = entry.getKey();\r
278                                 if (key.getPartsName().equals(partsKey.getPartsName())) {\r
279                                         localizedName = entry.getValue();\r
280                                         break;\r
281                                 }\r
282                         }\r
283                 }\r
284                 return localizedName;\r
285         }\r
286 \r
287         /**\r
288          * パーツキーと完全に一致するバージョン情報を取得する.<br>\r
289          * \r
290          * @param partsKey\r
291          *            パーツキー\r
292          * @return パーツキーに完全に一致するバージョン情報、該当がなければnull\r
293          */\r
294         public PartsVersionInfo getVersionStrict(PartsKey partsKey) {\r
295                 if (partsKey == null) {\r
296                         return null;\r
297                 }\r
298                 return partsVersionInfoMap.get(partsKey);\r
299         }\r
300         \r
301         /**\r
302          * パーツキーと完全に一致するローカライズ名を取得する.<br>\r
303          * \r
304          * @param partsKey\r
305          *            パーツキー\r
306          * @return パーツキーに完全に一致するローカライズ名、該当がなければnull\r
307          */\r
308         public String getLocalizedNameStrict(PartsKey partsKey) {\r
309                 if (partsKey == null) {\r
310                         return null;\r
311                 }\r
312                 return partsLocalizedNameMap.get(partsKey);\r
313         }\r
314 \r
315         /**\r
316          * すべての作者情報を返す.<br>\r
317          * \r
318          * @return 作者情報のコレクション\r
319          */\r
320         public Collection<PartsAuthorInfo> getAuthorInfos() {\r
321                 HashMap<String, PartsAuthorInfo> authorInfos = new HashMap<String, PartsAuthorInfo>();\r
322                 for (PartsAuthorInfo authorInfo : partsAuthorInfoMap.values()) {\r
323                         if (authorInfo != null) {\r
324                                 String author = authorInfo.getAuthor();\r
325                                 if (author != null && author.length() > 0) {\r
326                                         authorInfos.put(author, authorInfo);\r
327                                 }\r
328                         }\r
329                 }\r
330                 return authorInfos.values();\r
331         }\r
332 \r
333         /**\r
334          * 指定した作者に該当する登録されているパーツキーの一覧を返す.<Br>\r
335          * \r
336          * @param author\r
337          *            作者\r
338          * @return 作者に該当するパーツキー\r
339          */\r
340         public Collection<PartsKey> getPartsKeysByAuthor(String author) {\r
341                 if (author == null) {\r
342                         return Collections.emptyList();\r
343                 }\r
344                 ArrayList<PartsKey> partsKeys = new ArrayList<PartsKey>();\r
345                 for (Map.Entry<PartsKey, PartsAuthorInfo> entry : partsAuthorInfoMap.entrySet()) {\r
346                         PartsKey partsKey = entry.getKey();\r
347                         PartsAuthorInfo partsAuthorInfo = entry.getValue();\r
348                         if (partsAuthorInfo != null) {\r
349                                 String author2 = partsAuthorInfo.getAuthor();\r
350                                 if (author2 == null) {\r
351                                         author2 = "";\r
352                                 }\r
353                                 if (author2.equals(author)) {\r
354                                         partsKeys.add(partsKey);\r
355                                 }\r
356                         }\r
357                 }\r
358                 return partsKeys;\r
359         }\r
360         \r
361         @Override\r
362         public Iterator<PartsKey> iterator() {\r
363                 return partsAuthorInfoMap.keySet().iterator();\r
364         }\r
365         \r
366         @Override\r
367         public int size() {\r
368                 return partsAuthorInfoMap.size();\r
369         }\r
370 }\r