X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.g2d%2Fsrc%2Forg%2Fsimantics%2Fg2d%2Fcanvas%2Fimpl%2FSGNodeReflection.java;fp=bundles%2Forg.simantics.g2d%2Fsrc%2Forg%2Fsimantics%2Fg2d%2Fcanvas%2Fimpl%2FSGNodeReflection.java;h=7624eff4e872c189a43114f7c4501800141c1e9f;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=0dc2d9d7ece65ca096a94613317b6bb945722413;hpb=24e2b34260f219f0d1644ca7a138894980e25b14;p=simantics%2Fplatform.git
diff --git a/bundles/org.simantics.g2d/src/org/simantics/g2d/canvas/impl/SGNodeReflection.java b/bundles/org.simantics.g2d/src/org/simantics/g2d/canvas/impl/SGNodeReflection.java
index 0dc2d9d7e..7624eff4e 100644
--- a/bundles/org.simantics.g2d/src/org/simantics/g2d/canvas/impl/SGNodeReflection.java
+++ b/bundles/org.simantics.g2d/src/org/simantics/g2d/canvas/impl/SGNodeReflection.java
@@ -1,180 +1,180 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management
- * in Industry THTH ry.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * VTT Technical Research Centre of Finland - initial API and implementation
- *******************************************************************************/
-/*
- *
- * @author Toni Kalajainen
- */
-package org.simantics.g2d.canvas.impl;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.simantics.g2d.canvas.SGDesignation;
-import org.simantics.scenegraph.g2d.G2DParentNode;
-
-
-public class SGNodeReflection {
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.METHOD)
- public static @interface SGInit {
- SGDesignation designation() default SGDesignation.CANVAS;
- }
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.METHOD)
- public static @interface SGCleanup {
- }
-
- /**
- * Scans an object with reflection for all painter methods and returns
- * an array of ICanvasPainters and priorities.
- *
- * The corresponding class of obj must contain methods that meet the following
- * criteria:
- * 1) no return value
- * 2) 1 argument, which is Graphics2D
- * 3) has annotation Painter
- * 4) may not throw any Exception
- * 5) method must be accessible
- *
- * Example:
- *
- * @Painter(priority = Integer.MIN_VALUE)
- * public void prePaint(GraphicsContext gc) {
- * }
- *
- * @param obj object to scan
- * @return an array of painters and their priorities
- */
- public static CanvasSGNodeDefinition[] getSGHandlers(final Object obj)
- {
- List result = new ArrayList();
- Class> clazz = obj.getClass();
-
- for (final Method m : clazz.getMethods()) {
- SGInit initAnno = m.getAnnotation(SGInit.class);
- if (initAnno==null) continue;
-
- SGDesignation initDesignation = initAnno.designation();
-
- Class> returnType = m.getReturnType();
- if (!returnType.equals(void.class))
- throw new RuntimeException(clazz.getName()+"."+m.getName()+" return type is invalid");
-
- @SuppressWarnings("rawtypes")
- Class[] argTypes = m.getParameterTypes();
- if (argTypes.length!=1 || !argTypes[0].equals(G2DParentNode.class))
- throw new RuntimeException(clazz.getName()+"."+m.getName()+" invalid arguments");
-
- @SuppressWarnings("rawtypes")
- Class[] exceptionTypes = m.getExceptionTypes();
- if (exceptionTypes.length!=0)
- throw new RuntimeException(clazz.getName()+"."+m.getName()+" invalid exceptions");
-
- try {
- m.setAccessible(true);
- } catch (Throwable t)
- {
- t.printStackTrace();
- throw new Error(t);
- }
-
- CanvasSGNodeDefinition def = new CanvasSGNodeDefinition(m, initDesignation, null, obj);
- result.add(def);
- }
-
- for (final Method m : clazz.getMethods()) {
- SGCleanup cleanupAnno = m.getAnnotation(SGCleanup.class);
- if (cleanupAnno==null) continue;
-
- Class> returnType = m.getReturnType();
- if (!returnType.equals(void.class))
- throw new RuntimeException(clazz.getName()+"."+m.getName()+" return type is invalid");
-
- @SuppressWarnings("rawtypes")
- Class[] argTypes = m.getParameterTypes();
- if (argTypes.length!=0)
- throw new RuntimeException(clazz.getName()+"."+m.getName()+" invalid arguments");
-
- @SuppressWarnings("rawtypes")
- Class[] exceptionTypes = m.getExceptionTypes();
- if (exceptionTypes.length!=0)
- throw new RuntimeException(clazz.getName()+"."+m.getName()+" invalid exceptions");
-
- try {
- m.setAccessible(true);
- } catch (Throwable t)
- {
- t.printStackTrace();
- throw new Error(t);
- }
-
- CanvasSGNodeDefinition def = new CanvasSGNodeDefinition(null, null, m, obj);
- result.add(def);
- }
-
- return result.toArray(new CanvasSGNodeDefinition[0]);
- }
-
- public static class CanvasSGNodeDefinition { // FIXME: own classes for init and cleanup
- public final Method initMethod;
- public final SGDesignation initDesignation;
- public final Method cleanupMethod;
- public final Object obj;
-
- public void init(G2DParentNode parent) {
- if(initMethod == null) return;
- try {
- initMethod.invoke(obj, parent);
- } catch (IllegalArgumentException e) {
- throw new Error(e);
- } catch (IllegalAccessException e) {
- throw new Error(e);
- } catch (InvocationTargetException e) {
- throw new RuntimeException(e.getCause());
- }
- }
- public void cleanup() {
- if(cleanupMethod == null) return;
- try {
- cleanupMethod.invoke(obj);
- } catch (IllegalArgumentException e) {
- throw new Error(e);
- } catch (IllegalAccessException e) {
- throw new Error(e);
- } catch (InvocationTargetException e) {
- throw new RuntimeException(e.getCause());
- }
- }
- public CanvasSGNodeDefinition(Method initMethod, SGDesignation initDesignation, Method cleanupMethod, Object obj) {
- this.initMethod = initMethod;
- this.initDesignation = initDesignation;
- this.cleanupMethod = cleanupMethod;
- this.obj = obj;
- }
- @Override
- public String toString() {
- return String.format("%s %s %s %s",
- obj.getClass().getSimpleName(),
- initMethod != null ? initMethod.getName() : "no init method",
- initDesignation != null ? initDesignation.toString() : "no init designation",
- cleanupMethod != null ? cleanupMethod.getName() : "no cleanup method");
- }
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+/*
+ *
+ * @author Toni Kalajainen
+ */
+package org.simantics.g2d.canvas.impl;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.simantics.g2d.canvas.SGDesignation;
+import org.simantics.scenegraph.g2d.G2DParentNode;
+
+
+public class SGNodeReflection {
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.METHOD)
+ public static @interface SGInit {
+ SGDesignation designation() default SGDesignation.CANVAS;
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.METHOD)
+ public static @interface SGCleanup {
+ }
+
+ /**
+ * Scans an object with reflection for all painter methods and returns
+ * an array of ICanvasPainters and priorities.
+ *
+ * The corresponding class of obj must contain methods that meet the following
+ * criteria:
+ * 1) no return value
+ * 2) 1 argument, which is Graphics2D
+ * 3) has annotation Painter
+ * 4) may not throw any Exception
+ * 5) method must be accessible
+ *
+ * Example:
+ *
+ * @Painter(priority = Integer.MIN_VALUE)
+ * public void prePaint(GraphicsContext gc) {
+ * }
+ *
+ * @param obj object to scan
+ * @return an array of painters and their priorities
+ */
+ public static CanvasSGNodeDefinition[] getSGHandlers(final Object obj)
+ {
+ List result = new ArrayList();
+ Class> clazz = obj.getClass();
+
+ for (final Method m : clazz.getMethods()) {
+ SGInit initAnno = m.getAnnotation(SGInit.class);
+ if (initAnno==null) continue;
+
+ SGDesignation initDesignation = initAnno.designation();
+
+ Class> returnType = m.getReturnType();
+ if (!returnType.equals(void.class))
+ throw new RuntimeException(clazz.getName()+"."+m.getName()+" return type is invalid");
+
+ @SuppressWarnings("rawtypes")
+ Class[] argTypes = m.getParameterTypes();
+ if (argTypes.length!=1 || !argTypes[0].equals(G2DParentNode.class))
+ throw new RuntimeException(clazz.getName()+"."+m.getName()+" invalid arguments");
+
+ @SuppressWarnings("rawtypes")
+ Class[] exceptionTypes = m.getExceptionTypes();
+ if (exceptionTypes.length!=0)
+ throw new RuntimeException(clazz.getName()+"."+m.getName()+" invalid exceptions");
+
+ try {
+ m.setAccessible(true);
+ } catch (Throwable t)
+ {
+ t.printStackTrace();
+ throw new Error(t);
+ }
+
+ CanvasSGNodeDefinition def = new CanvasSGNodeDefinition(m, initDesignation, null, obj);
+ result.add(def);
+ }
+
+ for (final Method m : clazz.getMethods()) {
+ SGCleanup cleanupAnno = m.getAnnotation(SGCleanup.class);
+ if (cleanupAnno==null) continue;
+
+ Class> returnType = m.getReturnType();
+ if (!returnType.equals(void.class))
+ throw new RuntimeException(clazz.getName()+"."+m.getName()+" return type is invalid");
+
+ @SuppressWarnings("rawtypes")
+ Class[] argTypes = m.getParameterTypes();
+ if (argTypes.length!=0)
+ throw new RuntimeException(clazz.getName()+"."+m.getName()+" invalid arguments");
+
+ @SuppressWarnings("rawtypes")
+ Class[] exceptionTypes = m.getExceptionTypes();
+ if (exceptionTypes.length!=0)
+ throw new RuntimeException(clazz.getName()+"."+m.getName()+" invalid exceptions");
+
+ try {
+ m.setAccessible(true);
+ } catch (Throwable t)
+ {
+ t.printStackTrace();
+ throw new Error(t);
+ }
+
+ CanvasSGNodeDefinition def = new CanvasSGNodeDefinition(null, null, m, obj);
+ result.add(def);
+ }
+
+ return result.toArray(new CanvasSGNodeDefinition[0]);
+ }
+
+ public static class CanvasSGNodeDefinition { // FIXME: own classes for init and cleanup
+ public final Method initMethod;
+ public final SGDesignation initDesignation;
+ public final Method cleanupMethod;
+ public final Object obj;
+
+ public void init(G2DParentNode parent) {
+ if(initMethod == null) return;
+ try {
+ initMethod.invoke(obj, parent);
+ } catch (IllegalArgumentException e) {
+ throw new Error(e);
+ } catch (IllegalAccessException e) {
+ throw new Error(e);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(e.getCause());
+ }
+ }
+ public void cleanup() {
+ if(cleanupMethod == null) return;
+ try {
+ cleanupMethod.invoke(obj);
+ } catch (IllegalArgumentException e) {
+ throw new Error(e);
+ } catch (IllegalAccessException e) {
+ throw new Error(e);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(e.getCause());
+ }
+ }
+ public CanvasSGNodeDefinition(Method initMethod, SGDesignation initDesignation, Method cleanupMethod, Object obj) {
+ this.initMethod = initMethod;
+ this.initDesignation = initDesignation;
+ this.cleanupMethod = cleanupMethod;
+ this.obj = obj;
+ }
+ @Override
+ public String toString() {
+ return String.format("%s %s %s %s",
+ obj.getClass().getSimpleName(),
+ initMethod != null ? initMethod.getName() : "no init method",
+ initDesignation != null ? initDesignation.toString() : "no init designation",
+ cleanupMethod != null ? cleanupMethod.getName() : "no cleanup method");
+ }
+ }
+}