]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/ElementFactoryUtil.java
Support for dynamic transforms for both elements and terminals
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / adapter / ElementFactoryUtil.java
index f747de0b0ee5f8bf740a2c84e64637381cc36956..89ee666bb21b92e75519a3df2724a674dad938a9 100644 (file)
@@ -13,12 +13,13 @@ package org.simantics.diagram.adapter;
 
 import java.awt.geom.AffineTransform;
 
-import org.simantics.databoard.Bindings;
 import org.simantics.db.AsyncReadGraph;
+import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.common.procedure.adapter.AsyncProcedureAdapter;
+import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.procedure.AsyncProcedure;
-import org.simantics.diagram.stubs.G2DResource;
+import org.simantics.diagram.stubs.DiagramResource;
 import org.simantics.diagram.synchronization.ErrorHandler;
 import org.simantics.diagram.synchronization.ISynchronizationContext;
 import org.simantics.diagram.synchronization.SynchronizationHints;
@@ -31,35 +32,31 @@ import org.simantics.g2d.element.ElementUtils;
 import org.simantics.g2d.element.IElement;
 import org.simantics.g2d.layers.ILayersEditor;
 import org.simantics.utils.datastructures.hints.IHintContext.Key;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ElementFactoryUtil {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(ElementFactoryUtil.class);
+
     public static void readTransform(AsyncReadGraph graph, final Resource resource, final IElement e) {
         readTransform(graph, resource, e, new AsyncProcedureAdapter<IElement>() {
             @Override
             public void exception(AsyncReadGraph graph, Throwable t) {
-                // Nowhere to log properly.
-                t.printStackTrace();
+                LOGGER.error("Error reading transform from " + resource + " into element " + e, t);
             }
         });
     }
 
     public static void readTransform(AsyncReadGraph graph, final Resource resource, final IElement e, final AsyncProcedure<IElement> procedure) {
-        G2DResource G2D = graph.getService(G2DResource.class);
-        graph.forPossibleRelatedValue(resource, G2D.HasTransform, Bindings.DOUBLE_ARRAY, new AsyncProcedure<double[]>() {
-            @Override
-            public void exception(AsyncReadGraph graph, Throwable throwable) {
-                procedure.exception(graph, throwable);
-            }
-
-            @Override
-            public void execute(AsyncReadGraph graph, double[] mat) {
-                mat = DiagramGraphUtil.validateAffineTransform(resource, mat);
-                AffineTransform tr = mat != null ? new AffineTransform(mat) : new AffineTransform();
-                ElementUtils.setTransform(e, tr);
-                procedure.execute(graph, e);
-            }
-        });
+        DiagramResource DIA = graph.getService(DiagramResource.class);
+        try {
+            AffineTransform tr = DiagramGraphUtil.getDynamicAffineTransform((ReadGraph)graph, null, resource, DIA.HasDynamicTransform, true);
+            ElementUtils.setTransform(e, tr);
+        } catch (DatabaseException e1) {
+            ElementUtils.setTransform(e, new AffineTransform());
+        }
+        procedure.execute(graph, e);
     }
 
     public static ISynchronizationContext getContext(IDiagram diagram) {