package org.simantics.diagram.adapter;
import java.awt.geom.AffineTransform;
+import java.util.Map;
-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.common.procedure.adapter.ProcedureAdapter;
+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);
- }
+ 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 void readParameters(AsyncReadGraph graph, final Resource resource, final IElement e) {
+ graph.asyncRequest(new ElementParameterRequest(resource), new ProcedureAdapter<Map<String,Object>>() {
@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);
+ public void execute(Map<String, Object> result) {
+ ElementUtils.setParameters(e, result);
}
});
}