1 /*******************************************************************************
2 * Copyright (c) 2012, 2013 Association for Decentralized Information Management in
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
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
12 package org.simantics.objmap.graph.rules.range;
14 import java.lang.reflect.InvocationTargetException;
15 import java.lang.reflect.Method;
17 import org.simantics.objmap.exceptions.MappingException;
21 * Accessor for mapped value. Uses two methods:
22 * - Getter: returns the current value.
23 * - Setter: sets the current value. The value may be null. (if setter parameter is primitive, null value is not mapped).
25 * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
29 public class GetSetValueAccessor<Range,T> implements IRangeAccessor<Range,T> {
31 private Method getter;
32 private Method setter;
33 private boolean primitive;
35 public GetSetValueAccessor(Method getter, Method setter) {
38 this.primitive = setter.getParameterTypes()[0].isPrimitive();
41 @SuppressWarnings("unchecked")
42 public T get(Range element) throws MappingException {
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());
55 public boolean set(Range element, T value)
56 throws MappingException {
57 if (value == null && primitive)
59 if (equal(get(element),value))
62 setter.invoke(element, value);
63 } catch (IllegalArgumentException e) {
64 throw new MappingException(e);
65 } catch (IllegalAccessException e) {
66 throw new MappingException(e);
67 } catch (InvocationTargetException e) {
68 throw new MappingException(e.getCause());
74 private boolean equal(Object v1, Object v2) {
79 } else if (v2 == null) {