]> gerrit.simantics Code Review - simantics/platform.git/blob
29ec0d89471fe59531c719bc24fd0eebfcf8354c
[simantics/platform.git] /
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     public static <T> Enumeration<T> make(EnumeratedValue<T>... values) {\r
32         return new Enumeration<T>(Arrays.asList(values));\r
33     }\r
34 \r
35     public Enumeration(List<EnumeratedValue<T>> values) {\r
36         assert values != null;\r
37         this.values = values;\r
38         hash = values.hashCode();\r
39     }\r
40 \r
41     public List<EnumeratedValue<T>> values() {\r
42         return values;\r
43     }\r
44 \r
45     public boolean contains(EnumeratedValue<T> value) {\r
46         return values.contains(value);\r
47     }\r
48 \r
49     public int indexOf(EnumeratedValue<T> value) {\r
50         return values.indexOf(value);\r
51     }\r
52 \r
53     public int size() {\r
54         return values.size();\r
55     }\r
56 \r
57     /**\r
58      * @param object\r
59      * @return the enumerated value matching the specified object\r
60      * @throws IllegalArgumentException if matching EnumeratedValue not found\r
61      * @throws NullPointerException if null object is specified\r
62      */\r
63     public EnumeratedValue<T> get(T object) {\r
64         if (object == null)\r
65             throw new NullPointerException("null object");\r
66         for (EnumeratedValue<T> value : values)\r
67             if (object.equals(value.getObject()))\r
68                 return value;\r
69         throw new IllegalArgumentException("object '" + object + "' not found among enumeration " + values);\r
70     }\r
71 \r
72     /**\r
73      * Find an EnumeratedValue<T> matching the specified name.\r
74      * \r
75      * @param name\r
76      * @return <code>null</code> if corresponding EnumeratedValue not found\r
77      */\r
78     public EnumeratedValue<T> findByName(String name) {\r
79         if (name == null)\r
80             return null;\r
81         for (EnumeratedValue<T> value : values)\r
82             if (name.equals(value.getName()))\r
83                 return value;\r
84         return null;\r
85     }\r
86 \r
87     /**\r
88      * Find an EnumeratedValue<T> matching the specified name.\r
89      * \r
90      * @param name\r
91      * @return <code>null</code> if corresponding EnumeratedValue not found\r
92      */\r
93     public EnumeratedValue<T> findByNameStartsWith(String name) {\r
94         if (name == null)\r
95             return null;\r
96         for (EnumeratedValue<T> value : values)\r
97             if (value.getName().startsWith(name))\r
98                 return value;\r
99         return null;\r
100     }\r
101 \r
102     /**\r
103      * Find an EnumeratedValue<T> matching the specified object.\r
104      * \r
105      * @param object\r
106      * @return <code>null</code> if corresponding EnumeratedValue not found\r
107      */\r
108     public EnumeratedValue<T> find(T object) {\r
109         if (object == null)\r
110             return null;\r
111         for (EnumeratedValue<T> value : values)\r
112             if (object.equals(value.getObject()))\r
113                 return value;\r
114         return null;\r
115     }\r
116 \r
117     @Override\r
118     public String toString() {\r
119         return values.toString();\r
120     }\r
121 \r
122     @Override\r
123     public int hashCode() {\r
124         return hash;\r
125     }\r
126 \r
127     @Override\r
128     public boolean equals(Object obj) {\r
129         if (this == obj)\r
130             return true;\r
131         if (obj == null)\r
132             return false;\r
133         if (getClass() != obj.getClass())\r
134             return false;\r
135         Enumeration<?> other = (Enumeration<?>) obj;\r
136         return values.equals(other.values);\r
137     }\r
138 \r
139 }\r