]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d/src/org/simantics/g3d/objmap/rules/range/GetSetObjectAccessor.java
8ceda89dbca4b9a29a8f66ffef05ea31078334df
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / objmap / rules / range / GetSetObjectAccessor.java
1 package org.simantics.g3d.objmap.rules.range;\r
2 \r
3 import java.lang.reflect.InvocationTargetException;\r
4 import java.lang.reflect.Method;\r
5 \r
6 import org.simantics.objmap.MappingException;\r
7 import org.simantics.objmap.rules.range.IRangeAccessor;\r
8 \r
9 /**\r
10  * Accessor for mapped objects. Uses two methods:\r
11  * - Getter: returns the current object.\r
12  * - Setter: sets the current object. The object may be null.\r
13  * \r
14  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
15  *\r
16  * @param <T>\r
17  */\r
18 public class GetSetObjectAccessor<T>  implements IRangeAccessor<T> {\r
19         \r
20         private Method getter;\r
21         private Method setter;\r
22         \r
23         \r
24         public GetSetObjectAccessor(Method getter, Method setter) {\r
25                 this.getter = getter;\r
26                 this.setter = setter;\r
27                 \r
28         }\r
29         \r
30         @SuppressWarnings("unchecked")\r
31         public T get(Object element) throws org.simantics.objmap.MappingException {\r
32                 try {\r
33                         return (T) getter.invoke(element);\r
34                 } catch (IllegalArgumentException e) {\r
35                         throw new MappingException(e);\r
36                 } catch (IllegalAccessException e) {\r
37                         throw new MappingException(e);\r
38                 } catch (InvocationTargetException e) {\r
39                         throw new MappingException(e);\r
40                 }\r
41         };\r
42 \r
43         @Override\r
44         public boolean set(Object element, T value)\r
45                         throws MappingException {       \r
46                 try {\r
47                         setter.invoke(element, value);\r
48                 } catch (IllegalArgumentException e) {\r
49                         throw new MappingException(e);\r
50                 } catch (IllegalAccessException e) {\r
51                         throw new MappingException(e);\r
52                 } catch (InvocationTargetException e) {\r
53                         throw new MappingException(e);\r
54                 }\r
55                 return true;\r
56                 \r
57         }\r
58 }\r