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;
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) {