OSDN Git Service

dmg作成バージョンの取得方法の修正
[charactermanaj/CharacterManaJ.git] / src / charactermanaj / model / PartsCategory.java
1 package charactermanaj.model;\r
2 \r
3 import java.io.Serializable;\r
4 import java.util.Arrays;\r
5 import java.util.Collections;\r
6 import java.util.List;\r
7 \r
8 /**\r
9  * パーツカテゴリ.<br> \r
10  * 同値であるかはカテゴリIDが一致するかによってのみ判定します.<br>\r
11  * それ以外の情報は無視されます.<br>\r
12  * @author seraphy\r
13  */\r
14 public final class PartsCategory implements Comparable<PartsCategory>, Serializable {\r
15 \r
16         /**\r
17          * シリアライズバージョンID.\r
18          */\r
19         private static final long serialVersionUID = -8652242530280056201L;\r
20 \r
21         /**\r
22          * 順序\r
23          */\r
24         private final int order;\r
25         \r
26         /**\r
27          * カテゴリ識別名\r
28          */\r
29         private final String categoryId;\r
30         \r
31         /**\r
32          * カテゴリ表示名\r
33          */\r
34         private final String localizedCategoryName;\r
35 \r
36         /**\r
37          * 複数選択可能?\r
38          */\r
39         private final boolean multipleSelectable;\r
40         \r
41         /**\r
42          * 表示行数\r
43          */\r
44         private final int visibleRows;\r
45         \r
46         /**\r
47          * レイヤー情報\r
48          */\r
49         private final List<Layer> layers;\r
50         \r
51         /**\r
52          * カテゴリを構築する.<br>\r
53          * @param order 順序\r
54          * @param categoryId カテゴリ識別名\r
55          * @param localizedCategoryName カテゴリ表示名\r
56          * @param multipleSelectable 複数選択可能?\r
57          * @param visibleRows 表示行数\r
58          * @param layers レイヤー情報の配列、nullの場合は空とみなす\r
59          */\r
60         public PartsCategory(final int order, final String categoryId, String localizedCategoryName,\r
61                         boolean multipleSelectable, int visibleRows, Layer[] layers) {\r
62                 if (categoryId == null || categoryId.trim().length() == 0) {\r
63                         throw new IllegalArgumentException();\r
64                 }\r
65                 if (layers == null) {\r
66                         layers = new Layer[0];\r
67                 }\r
68                 if (localizedCategoryName == null || localizedCategoryName.trim().length() == 0) {\r
69                         localizedCategoryName = categoryId;\r
70                 }\r
71                 this.order = order;\r
72                 this.categoryId = categoryId.trim();\r
73                 this.localizedCategoryName = localizedCategoryName.trim();\r
74                 this.multipleSelectable = multipleSelectable;\r
75                 this.layers = Collections.unmodifiableList(Arrays.asList(layers.clone()));\r
76                 this.visibleRows = visibleRows;\r
77         }\r
78         \r
79         /**\r
80          * カテゴリの順序を比較して返す.<br>\r
81          * 順序で比較し、同一順序であれば表示名で比較し、それでも同一であれば識別子で比較します.<br>\r
82          * @param o 比較対象.\r
83          * @return 順序\r
84          */\r
85         public int compareTo(PartsCategory o) {\r
86                 if (o == this) {\r
87                         return 0;\r
88                 }\r
89                 int ret = order - o.order;\r
90                 if (ret == 0) {\r
91                         ret = localizedCategoryName.compareTo(o.localizedCategoryName);\r
92                 }\r
93                 if (ret == 0) {\r
94                         ret = categoryId.compareTo(o.categoryId);\r
95                 }\r
96                 return ret;\r
97         }\r
98         \r
99         @Override\r
100         public int hashCode() {\r
101                 return this.categoryId.hashCode();\r
102         }\r
103         \r
104         @Override\r
105         public boolean equals(Object obj) {\r
106                 if (obj == this) {\r
107                         return true;\r
108                 }\r
109                 if (obj != null && obj instanceof PartsCategory) {\r
110                         // IDが等しいか?\r
111                         PartsCategory o = (PartsCategory) obj;\r
112                         if (categoryId.equals(o.getCategoryId())) {\r
113                                 // それ以外の情報も等しいか?\r
114                                 // (用法的に、異なるインスタンスで同じIDをもつことは希であり、\r
115                                 // その上、IDが同一で、それ以外の内容が一致しないことは更に希である。)\r
116                                 if (order == o.order\r
117                                                 && localizedCategoryName\r
118                                                                 .equals(o.localizedCategoryName)\r
119                                                 && multipleSelectable == o.multipleSelectable\r
120                                                 && visibleRows == o.visibleRows\r
121                                                 && layers.equals(o.layers)) {\r
122                                         return true;\r
123                                 }\r
124                         }\r
125                 }\r
126                 return false;\r
127         }\r
128         \r
129         /**\r
130          * 同一カテゴリであるか判定します.<br>\r
131          * nullの場合は常にfalseを返します.<br>\r
132          * @param obj パーツカテゴリ、またはnull\r
133          * @return 同一のパーツカテゴリIDであればtrue、そうでなければfalse\r
134          */\r
135         public boolean isSameCategoryID(PartsCategory obj) {\r
136                 if (obj == this) {\r
137                         return true;\r
138                 }\r
139                 if (obj != null) {\r
140                         return categoryId.equals(obj.categoryId);\r
141                 }\r
142                 return false;\r
143         }\r
144         \r
145         public static boolean equals(PartsCategory o1, PartsCategory o2) {\r
146                 if (o1 == o2) {\r
147                         return true;\r
148                 }\r
149                 if (o1 == null || o2 == null) {\r
150                         return false;\r
151                 }\r
152                 return o1.equals(o2);\r
153         }\r
154         \r
155         /**\r
156          * 定義順を取得する\r
157          * @return 定義順\r
158          */\r
159         public int getOrder() {\r
160                 return order;\r
161         }\r
162 \r
163         /**\r
164          * 複数選択可能であるか?\r
165          * @return 複数選択可能であるか?\r
166          */\r
167         public boolean isMultipleSelectable() {\r
168                 return multipleSelectable;\r
169         }\r
170 \r
171         /**\r
172          * 表示行数を取得する.\r
173          * @return 表示行数\r
174          */\r
175         public int getVisibleRows() {\r
176                 return visibleRows;\r
177         }\r
178 \r
179         /**\r
180          * このカテゴリに指定したレイヤーが含まれるか検証する.\r
181          * @param layer レイヤー\r
182          * @return 含まれる場合はtrue、含まれない場合はfalse\r
183          */\r
184         public boolean hasLayer(Layer layer) {\r
185                 if (layer == null) {\r
186                         return false;\r
187                 }\r
188                 for (Layer memberLayer : layers) {\r
189                         if (Layer.equals(memberLayer, layer)) {\r
190                                 return true;\r
191                         }\r
192                 }\r
193                 return false;\r
194         }\r
195         \r
196         /**\r
197          * レイヤー情報\r
198          * @return レイヤー情報\r
199          */\r
200         public List<Layer> getLayers() {\r
201                 return layers;\r
202         }\r
203         \r
204         /**\r
205          * レイヤーを取得する.<br>\r
206          * 該当するレイヤーがなければnull\r
207          * @param layerId レイヤー名\r
208          * @return レイヤーもしくはnull\r
209          */\r
210         public Layer getLayer(String layerId) {\r
211                 if (layerId == null) {\r
212                         return null;\r
213                 }\r
214                 for (Layer layer : layers) {\r
215                         if (layer.getId().equals(layerId)) {\r
216                                 return layer;\r
217                         }\r
218                 }\r
219                 return null;\r
220         }\r
221         \r
222         /**\r
223          * カテゴリ識別名を取得する.\r
224          * @return カテゴリ識別名\r
225          */\r
226         public String getCategoryId() {\r
227                 return categoryId;\r
228         }\r
229         \r
230         /**\r
231          * カテゴリ表示名を取得する.\r
232          * @return カテゴリ表示名\r
233          */\r
234         public String getLocalizedCategoryName() {\r
235                 return this.localizedCategoryName;\r
236         }\r
237 \r
238         @Override\r
239         public String toString() {\r
240                 return getLocalizedCategoryName();\r
241         }\r
242 }\r