--- /dev/null
+package org.simantics.modeling.tests.traits;
+
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.uri.UnescapedChildMapOfResource;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.modeling.ModelingResources;
+
+public class DiagramElementTrait extends AbstractSingleResourceTrait {
+
+ public SingleResourceTrait diagram;
+ public String name;
+
+ public DiagramElementTrait(SingleResourceTrait diagram, String name) {
+ this.diagram = diagram;
+ this.name = name;
+ }
+
+ @Override
+ public Resource getResource(ReadGraph graph) throws DatabaseException {
+ ModelingResources MOD = ModelingResources.getInstance(graph);
+ Resource composite = graph.getSingleObject(diagram.getResource(), MOD.DiagramToComposite);
+ Resource child = graph.sync(new UnescapedChildMapOfResource(composite)).get(name);
+ if(child == null) throw new DatabaseException("No child " + child + " for " + NameUtils.getSafeName(graph, composite));
+ return graph.getSingleObject(child, MOD.ComponentToElement);
+ }
+
+}