]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/src/org/simantics/databoard/binding/factory/JavaUtilBindingsProvider.java
Merge commit 'd186091'
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / binding / factory / JavaUtilBindingsProvider.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
3  * 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.databoard.binding.factory;\r
13 \r
14 import java.util.HashMap;\r
15 import java.util.HashSet;\r
16 import java.util.LinkedList;\r
17 import java.util.List;\r
18 import java.util.Map;\r
19 import java.util.PriorityQueue;\r
20 import java.util.Set;\r
21 import java.util.TreeMap;\r
22 import java.util.TreeSet;\r
23 import java.util.UUID;\r
24 \r
25 import org.simantics.databoard.Datatypes;\r
26 import org.simantics.databoard.binding.Binding;\r
27 import org.simantics.databoard.binding.error.BindingConstructionException;\r
28 import org.simantics.databoard.binding.impl.ArrayListBinding;\r
29 import org.simantics.databoard.binding.impl.BooleanArrayBinding;\r
30 import org.simantics.databoard.binding.impl.ByteArrayBinding;\r
31 import org.simantics.databoard.binding.impl.DefaultMapBinding;\r
32 import org.simantics.databoard.binding.impl.DefaultSetBinding;\r
33 import org.simantics.databoard.binding.impl.DoubleArrayBinding;\r
34 import org.simantics.databoard.binding.impl.FloatArrayBinding;\r
35 import org.simantics.databoard.binding.impl.HashMapBinding;\r
36 import org.simantics.databoard.binding.impl.HashSetBinding;\r
37 import org.simantics.databoard.binding.impl.IntArrayBinding;\r
38 import org.simantics.databoard.binding.impl.LinkedListBinding;\r
39 import org.simantics.databoard.binding.impl.LongArrayBinding;\r
40 import org.simantics.databoard.binding.impl.ObjectArrayBinding;\r
41 import org.simantics.databoard.binding.impl.PriorityQueueBinding;\r
42 import org.simantics.databoard.binding.impl.ThrowableBinding;\r
43 import org.simantics.databoard.binding.impl.TreeMapBinding;\r
44 import org.simantics.databoard.binding.impl.TreeSetBinding;\r
45 import org.simantics.databoard.binding.impl.UUIDBinding;\r
46 import org.simantics.databoard.binding.reflection.BindingProvider;\r
47 import org.simantics.databoard.binding.reflection.BindingRequest;\r
48 import org.simantics.databoard.binding.reflection.ClassBindingFactory;\r
49 import org.simantics.databoard.binding.reflection.GenericArrayBinding;\r
50 import org.simantics.databoard.type.ArrayType;\r
51 import org.simantics.databoard.type.MapType;\r
52 \r
53 /**\r
54  * This provider constructs Bindings for java.util classes.\r
55  * \r
56  * @author toni.kalajainen\r
57  */\r
58 public class JavaUtilBindingsProvider implements BindingProvider {\r
59 \r
60         @Override\r
61         public Binding provideBinding(ClassBindingFactory factory, BindingRequest request) throws BindingConstructionException {\r
62 \r
63                 if ( UUID.class.isAssignableFrom( request.getClazz() ) ) {\r
64                         return new UUIDBinding();\r
65                 }\r
66                 \r
67                 if ( Throwable.class.isAssignableFrom( request.getClazz() ) ) {\r
68                         @SuppressWarnings("unchecked")\r
69                         Binding b = new ThrowableBinding( (Class<Throwable>) request.getClazz() ); \r
70                         return b;\r
71                 }\r
72                 \r
73         if (request.getClazz().isArray()) {\r
74                 Class<?> c = request.getClazz();\r
75                 if (c.equals(boolean[].class)) return new BooleanArrayBinding(new ArrayType(), null);\r
76                 else if (c.equals(byte[].class)) return new ByteArrayBinding(new ArrayType(), null);\r
77                 else if (c.equals(double[].class)) return new DoubleArrayBinding(new ArrayType(), null);\r
78                 else if (c.equals(float[].class)) return new FloatArrayBinding(new ArrayType(), null);\r
79                 else if (c.equals(int[].class)) return new IntArrayBinding(new ArrayType(), null);\r
80                 else if (c.equals(long[].class)) return new LongArrayBinding(new ArrayType(), null);\r
81                 else if (c.equals(Object[].class)) return new ObjectArrayBinding(new ArrayType(), null);\r
82                 else return new GenericArrayBinding(request.getClazz(), new ArrayType(), null);\r
83         } else if (LinkedList.class.isAssignableFrom(request.getClazz())) {\r
84                         return new LinkedListBinding(new ArrayType(), null);\r
85         } else if (List.class.isAssignableFrom(request.getClazz())) {\r
86                         return new ArrayListBinding(new ArrayType(), null);\r
87         } else if (PriorityQueue.class.isAssignableFrom(request.getClazz())) {\r
88                 return new PriorityQueueBinding(new ArrayType(), null);\r
89         }\r
90 \r
91         if (TreeSet.class.isAssignableFrom(request.getClazz())) {\r
92             MapType type = new MapType();\r
93             type.valueType = Datatypes.VOID;\r
94                 return new TreeSetBinding(type, null);\r
95         }\r
96 \r
97         if (HashSet.class.isAssignableFrom(request.getClazz())) {\r
98             MapType type = new MapType();\r
99             type.valueType = Datatypes.VOID;\r
100                 return new HashSetBinding(type, null);\r
101         }\r
102         \r
103         if (Set.class.isAssignableFrom(request.getClazz())) {\r
104             MapType type = new MapType();\r
105             type.valueType = Datatypes.VOID;\r
106                 return new DefaultSetBinding(type, null);\r
107         }\r
108                 \r
109         if (TreeMap.class.isAssignableFrom(request.getClazz())) {\r
110                 return new TreeMapBinding(new MapType(), null, null);\r
111         } \r
112 \r
113         if (HashMap.class.isAssignableFrom(request.getClazz())) {\r
114                 return new HashMapBinding(new MapType(), null, null);\r
115         }\r
116 \r
117         if (Map.class.isAssignableFrom(request.getClazz())) {\r
118                 return new DefaultMapBinding(new MapType(), null, null);\r
119         }\r
120                         \r
121                 return null;\r
122         }\r
123 \r
124 }\r