]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/property/ValueUtil.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / property / ValueUtil.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.modeling.ui.property;\r
13 \r
14 import java.lang.reflect.Array;\r
15 import java.util.Arrays;\r
16 \r
17 import org.simantics.db.layer0.util.PrimitiveValueParser;\r
18 import org.simantics.utils.datastructures.slice.ValueRange;\r
19 \r
20 /**\r
21  * @author Tuukka Lehtonen\r
22  */\r
23 public class ValueUtil {\r
24 \r
25     /**\r
26      * @param object\r
27      * @param range\r
28      * @return\r
29      * @throws ArrayIndexOutOfBoundsException if the specified index range is\r
30      *         out of bounds for the specified object if it is an array.\r
31      * @throws IllegalArgumentException if the specified value is not an array\r
32      */\r
33     public static String arrayValueToString(Object object, ValueRange range) {\r
34         if (object == null)\r
35             return "";\r
36 \r
37         Class<?> clazz = object.getClass();\r
38         if (!clazz.isArray())\r
39             throw new IllegalArgumentException("object is not an array: " + clazz.getCanonicalName());\r
40 \r
41         int length = Array.getLength(object);\r
42         assert range != null;\r
43         if (range.start() >= length || range.end() > length)\r
44             throw new ArrayIndexOutOfBoundsException(range + " out of array bounds [0," + length + "]");\r
45 \r
46         StringBuilder b = new StringBuilder();\r
47 \r
48         boolean first = true;\r
49         for (int i = range.start(); i < range.end(); ++i) {\r
50             if (!first) {\r
51                 b.append(",");\r
52             }\r
53             first = false;\r
54             b.append(Array.get(object, i));\r
55         }\r
56         return b.toString();\r
57     }\r
58 \r
59     public static String valueToString(Object object) {\r
60         if (object == null)\r
61             return "";\r
62 \r
63         if (object instanceof String[]) {\r
64             String[] value = (String[]) object;\r
65             if (value.length == 1)\r
66                 return value[0];\r
67             else\r
68                 return Arrays.toString(value);\r
69         } else if (object instanceof int[]) {\r
70             int[] value = (int[]) object;\r
71             if (value.length == 1)\r
72                 return String.valueOf(value[0]);\r
73             else {\r
74                 StringBuffer buffer = new StringBuffer();\r
75                 if (value.length > 0) {\r
76                     buffer.append(value[0]);\r
77                     for (int i = 1; i < value.length; ++i) {\r
78                         buffer.append(", ");\r
79                         buffer.append(value[i]);\r
80                     }\r
81                 }\r
82                 return buffer.toString();\r
83             }\r
84         } else if (object instanceof boolean[]) {\r
85             boolean[] value = (boolean[]) object;\r
86             if (value.length == 1)\r
87                 return String.valueOf(value[0]);\r
88             else\r
89                 return Arrays.toString(value);\r
90         } else if (object instanceof double[]) {\r
91             double[] value = (double[]) object;\r
92             if (value.length == 1)\r
93                 return String.valueOf(value[0]);\r
94             else {\r
95                 StringBuffer buffer = new StringBuffer();\r
96                 if(value.length > 0) {\r
97                     buffer.append(value[0]);\r
98                     for(int i=1;i<value.length;++i) {\r
99                         buffer.append(", ");\r
100                         buffer.append(value[i]);\r
101                     }\r
102                 }\r
103                 return buffer.toString();\r
104             }\r
105         } else if (object instanceof float[]) {\r
106             float[] value = (float[]) object;\r
107             if (value.length == 1)\r
108                 return String.valueOf(value[0]);\r
109             else {\r
110                 StringBuffer buffer = new StringBuffer();\r
111                 if(value.length > 0) {\r
112                     buffer.append(value[0]);\r
113                     for(int i=1;i<value.length;++i) {\r
114                         buffer.append(", ");\r
115                         buffer.append(value[i]);\r
116                     }\r
117                 }\r
118                 return buffer.toString();\r
119             }\r
120         } else if (object instanceof long[]) {\r
121             long[] value = (long[]) object;\r
122             if (value.length == 1)\r
123                 return String.valueOf(value[0]);\r
124             else\r
125                 return Arrays.toString(value);\r
126         } else if (object instanceof byte[]) {\r
127             byte[] value = (byte[]) object;\r
128             if (value.length == 1)\r
129                 return String.valueOf(value[0]);\r
130             else\r
131                 return Arrays.toString(value);\r
132         }\r
133         return object.toString();\r
134     }\r
135 \r
136     /**\r
137      * @param valueClass\r
138      * @param label\r
139      * @return\r
140      * @throws IllegalArgumentException if parsing of the specified label into\r
141      *         the specified Class fails\r
142      */\r
143     public static Object parseLabelToObject(Class<?> valueClass, String label) {\r
144         if (valueClass == boolean[].class) {\r
145             return PrimitiveValueParser.parseBooleanArray(label);\r
146         } else if (valueClass == int[].class) {\r
147             return PrimitiveValueParser.parseIntArray(label);\r
148         } else if (valueClass == long[].class) {\r
149             return PrimitiveValueParser.parseLongArray(label);\r
150         } else if (valueClass == float[].class) {\r
151             return PrimitiveValueParser.parseFloatArray(label);\r
152         } else if (valueClass == double[].class) {\r
153             return PrimitiveValueParser.parseDoubleArray(label);\r
154         } else if (valueClass == String[].class) {\r
155             return new String[] { label };\r
156         } else if (valueClass == boolean.class || valueClass == Boolean.class) {\r
157             return PrimitiveValueParser.parseBoolean(label);\r
158         } else if (valueClass == int.class || valueClass == Integer.class) {\r
159             return PrimitiveValueParser.parseInt(label);\r
160         } else if (valueClass == long.class || valueClass == Long.class) {\r
161             return PrimitiveValueParser.parseLong(label);\r
162         } else if (valueClass == float.class || valueClass == Float.class) {\r
163             return PrimitiveValueParser.parseFloat(label);\r
164         } else if (valueClass == double.class || valueClass == Double.class) {\r
165             return PrimitiveValueParser.parseDouble(label);\r
166         } else if (valueClass == Byte.class || valueClass == Byte.class) {\r
167             return PrimitiveValueParser.parseByte(label);\r
168         } else if (valueClass == String.class) {\r
169             return label;\r
170         }\r
171         return null;\r
172     }\r
173 \r
174 }\r