]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/range/GetSetObjectAccessor.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.objmap2 / src / org / simantics / objmap / graph / rules / range / GetSetObjectAccessor.java
1 /*******************************************************************************
2  * Copyright (c) 2012, 2013 Association for Decentralized Information Management in
3  * Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.objmap.graph.rules.range;
13
14 import java.lang.reflect.InvocationTargetException;
15 import java.lang.reflect.Method;
16
17 import org.simantics.objmap.exceptions.MappingException;
18
19
20 /**
21  * Accessor for mapped objects. Uses two methods:
22  * - Getter: returns the current object.
23  * - Setter: sets the current object. The object may be null.
24  * 
25  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
26  *
27  * @param <T>
28  */
29 public class GetSetObjectAccessor<Range,T>  implements IRangeAccessor<Range,T> {
30         
31         private Method getter;
32         private Method setter;
33         
34         
35         public GetSetObjectAccessor(Method getter, Method setter) {
36                 this.getter = getter;
37                 this.setter = setter;
38                 
39         }
40         
41         @SuppressWarnings("unchecked")
42         public T get(Range element) throws MappingException {
43                 try {
44                         return (T) getter.invoke(element);
45                 } catch (IllegalArgumentException e) {
46                         throw new MappingException(e);
47                 } catch (IllegalAccessException e) {
48                         throw new MappingException(e);
49                 } catch (InvocationTargetException e) {
50                         throw new MappingException(e.getCause());
51                 }
52         };
53
54         @Override
55         public boolean set(Range element, T value)
56                         throws MappingException {       
57                 try {
58                         setter.invoke(element, value);
59                 } catch (IllegalArgumentException e) {
60                         throw new MappingException(e);
61                 } catch (IllegalAccessException e) {
62                         throw new MappingException(e);
63                 } catch (InvocationTargetException e) {
64                         throw new MappingException(e.getCause());
65                 }
66                 return true;
67                 
68         }
69 }