1 package charactermanaj.model;
\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
10 * 同値であるかはカテゴリIDが一致するかによってのみ判定します.<br>
\r
11 * それ以外の情報は無視されます.<br>
\r
14 public final class PartsCategory implements Comparable<PartsCategory>, Serializable {
\r
19 private static final long serialVersionUID = -8652242530280056201L;
\r
24 private final int order;
\r
29 private final String categoryId;
\r
34 private final String localizedCategoryName;
\r
39 private final boolean multipleSelectable;
\r
44 private final int visibleRows;
\r
49 private final List<Layer> layers;
\r
54 * @param categoryId カテゴリ識別名
\r
55 * @param localizedCategoryName カテゴリ表示名
\r
56 * @param multipleSelectable 複数選択可能?
\r
57 * @param visibleRows 表示行数
\r
58 * @param layers レイヤー情報の配列、nullの場合は空とみなす
\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
65 if (layers == null) {
\r
66 layers = new Layer[0];
\r
68 if (localizedCategoryName == null || localizedCategoryName.trim().length() == 0) {
\r
69 localizedCategoryName = categoryId;
\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
80 * カテゴリの順序を比較して返す.<br>
\r
81 * 順序で比較し、同一順序であれば表示名で比較し、それでも同一であれば識別子で比較します.<br>
\r
85 public int compareTo(PartsCategory o) {
\r
89 int ret = order - o.order;
\r
91 ret = localizedCategoryName.compareTo(o.localizedCategoryName);
\r
94 ret = categoryId.compareTo(o.categoryId);
\r
100 public int hashCode() {
\r
101 return this.categoryId.hashCode();
\r
105 public boolean equals(Object obj) {
\r
109 if (obj != null && obj instanceof PartsCategory) {
\r
111 PartsCategory o = (PartsCategory) obj;
\r
112 if (categoryId.equals(o.getCategoryId())) {
\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
130 * 同一カテゴリであるか判定します.<br>
\r
131 * nullの場合は常にfalseを返します.<br>
\r
132 * @param obj パーツカテゴリ、またはnull
\r
133 * @return 同一のパーツカテゴリIDであればtrue、そうでなければfalse
\r
135 public boolean isSameCategoryID(PartsCategory obj) {
\r
140 return categoryId.equals(obj.categoryId);
\r
145 public static boolean equals(PartsCategory o1, PartsCategory o2) {
\r
149 if (o1 == null || o2 == null) {
\r
152 return o1.equals(o2);
\r
159 public int getOrder() {
\r
165 * @return 複数選択可能であるか?
\r
167 public boolean isMultipleSelectable() {
\r
168 return multipleSelectable;
\r
175 public int getVisibleRows() {
\r
176 return visibleRows;
\r
180 * このカテゴリに指定したレイヤーが含まれるか検証する.
\r
181 * @param layer レイヤー
\r
182 * @return 含まれる場合はtrue、含まれない場合はfalse
\r
184 public boolean hasLayer(Layer layer) {
\r
185 if (layer == null) {
\r
188 for (Layer memberLayer : layers) {
\r
189 if (Layer.equals(memberLayer, layer)) {
\r
200 public List<Layer> getLayers() {
\r
206 * 該当するレイヤーがなければnull
\r
207 * @param layerId レイヤー名
\r
208 * @return レイヤーもしくはnull
\r
210 public Layer getLayer(String layerId) {
\r
211 if (layerId == null) {
\r
214 for (Layer layer : layers) {
\r
215 if (layer.getId().equals(layerId)) {
\r
226 public String getCategoryId() {
\r
234 public String getLocalizedCategoryName() {
\r
235 return this.localizedCategoryName;
\r
239 public String toString() {
\r
240 return getLocalizedCategoryName();
\r