X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fobjmap%2Frules%2Frange%2FGetSetObjectAccessor.java;fp=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fobjmap%2Frules%2Frange%2FGetSetObjectAccessor.java;h=8ceda89dbca4b9a29a8f66ffef05ea31078334df;hb=87b3241ec277ba3d8e414b26186a032c9cdcaeed;hp=0000000000000000000000000000000000000000;hpb=1f0bcd66274375f2278d2e6c486cb28257a5f7b2;p=simantics%2F3d.git diff --git a/org.simantics.g3d/src/org/simantics/g3d/objmap/rules/range/GetSetObjectAccessor.java b/org.simantics.g3d/src/org/simantics/g3d/objmap/rules/range/GetSetObjectAccessor.java new file mode 100644 index 00000000..8ceda89d --- /dev/null +++ b/org.simantics.g3d/src/org/simantics/g3d/objmap/rules/range/GetSetObjectAccessor.java @@ -0,0 +1,58 @@ +package org.simantics.g3d.objmap.rules.range; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import org.simantics.objmap.MappingException; +import org.simantics.objmap.rules.range.IRangeAccessor; + +/** + * Accessor for mapped objects. Uses two methods: + * - Getter: returns the current object. + * - Setter: sets the current object. The object may be null. + * + * @author Marko Luukkainen + * + * @param + */ +public class GetSetObjectAccessor implements IRangeAccessor { + + private Method getter; + private Method setter; + + + public GetSetObjectAccessor(Method getter, Method setter) { + this.getter = getter; + this.setter = setter; + + } + + @SuppressWarnings("unchecked") + public T get(Object element) throws org.simantics.objmap.MappingException { + try { + return (T) getter.invoke(element); + } catch (IllegalArgumentException e) { + throw new MappingException(e); + } catch (IllegalAccessException e) { + throw new MappingException(e); + } catch (InvocationTargetException e) { + throw new MappingException(e); + } + }; + + @Override + public boolean set(Object element, T value) + throws MappingException { + try { + setter.invoke(element, value); + } catch (IllegalArgumentException e) { + throw new MappingException(e); + } catch (IllegalAccessException e) { + throw new MappingException(e); + } catch (InvocationTargetException e) { + throw new MappingException(e); + } + return true; + + } +}