]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/modifiers/Enumeration.java
Merge commit '876ede6'
[simantics/platform.git] / bundles / org.simantics.browsing.ui.common / src / org / simantics / browsing / ui / common / modifiers / Enumeration.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.browsing.ui.common.modifiers;\r
13 \r
14 import java.util.Arrays;\r
15 import java.util.List;\r
16 \r
17 /**\r
18  * @author Tuukka Lehtonen\r
19  * \r
20  * @param <T>\r
21  */\r
22 public class Enumeration<T> {\r
23 \r
24     private final List<EnumeratedValue<T>> values;\r
25     private final transient int hash;\r
26 \r
27     public static <T> Enumeration<T> make(List<EnumeratedValue<T>> values) {\r
28         return new Enumeration<T>(values);\r
29     }\r
30 \r
31     @SafeVarargs\r
32     public static <T> Enumeration<T> make(EnumeratedValue<T>... values) {\r
33         return new Enumeration<T>(Arrays.asList(values));\r
34     }\r
35 \r
36     public Enumeration(List<EnumeratedValue<T>> values) {\r
37         assert values != null;\r
38         this.values = values;\r
39         hash = values.hashCode();\r
40     }\r
41 \r
42     public List<EnumeratedValue<T>> values() {\r
43         return values;\r
44     }\r
45 \r
46     public boolean contains(EnumeratedValue<T> value) {\r
47         return values.contains(value);\r
48     }\r
49 \r
50     public int indexOf(EnumeratedValue<T> value) {\r
51         return values.indexOf(value);\r
52     }\r
53 \r
54     public int size() {\r
55         return values.size();\r
56     }\r
57 \r
58     /**\r
59      * @param object\r
60      * @return the enumerated value matching the specified object\r
61      * @throws IllegalArgumentException if matching EnumeratedValue not found\r
62      * @throws NullPointerException if null object is specified\r
63      */\r
64     public EnumeratedValue<T> get(T object) {\r
65         if (object == null)\r
66             throw new NullPointerException("null object");\r
67         for (EnumeratedValue<T> value : values)\r
68             if (object.equals(value.getObject()))\r
69                 return value;\r
70         throw new IllegalArgumentException("object '" + object + "' not found among enumeration " + values);\r
71     }\r
72 \r
73     /**\r
74      * Find an EnumeratedValue<T> matching the specified name.\r
75      * \r
76      * @param name\r
77      * @return <code>null</code> if corresponding EnumeratedValue not found\r
78      */\r
79     public EnumeratedValue<T> findByName(String name) {\r
80         if (name == null)\r
81             return null;\r
82         for (EnumeratedValue<T> value : values)\r
83             if (name.equals(value.getName()))\r
84                 return value;\r
85         return null;\r
86     }\r
87 \r
88     /**\r
89      * Find an EnumeratedValue<T> matching the specified name.\r
90      * \r
91      * @param name\r
92      * @return <code>null</code> if corresponding EnumeratedValue not found\r
93      */\r
94     public EnumeratedValue<T> findByNameStartsWith(String name) {\r
95         if (name == null)\r
96             return null;\r
97         for (EnumeratedValue<T> value : values)\r
98             if (value.getName().startsWith(name))\r
99                 return value;\r
100         return null;\r
101     }\r
102 \r
103     /**\r
104      * Find an EnumeratedValue<T> matching the specified object.\r
105      * \r
106      * @param object\r
107      * @return <code>null</code> if corresponding EnumeratedValue not found\r
108      */\r
109     public EnumeratedValue<T> find(T object) {\r
110         if (object == null)\r
111             return null;\r
112         for (EnumeratedValue<T> value : values)\r
113             if (object.equals(value.getObject()))\r
114                 return value;\r
115         return null;\r
116     }\r
117 \r
118     @Override\r
119     public String toString() {\r
120         return values.toString();\r
121     }\r
122 \r
123     @Override\r
124     public int hashCode() {\r
125         return hash;\r
126     }\r
127 \r
128     @Override\r
129     public boolean equals(Object obj) {\r
130         if (this == obj)\r
131             return true;\r
132         if (obj == null)\r
133             return false;\r
134         if (getClass() != obj.getClass())\r
135             return false;\r
136         Enumeration<?> other = (Enumeration<?>) obj;\r
137         return values.equals(other.values);\r
138     }\r
139 \r
140 }\r