X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Futils%2FP3DUtil.java;h=0d656b054de0e724e72d4592597fa46aa52b4a17;hb=d00bd5522f6a92bbfeb2a72a7d28ba25c3f36fed;hp=b34f4f0739e817230b784009349433e09c5646f0;hpb=22bb24d2a7e26c70b0dd4c57080f2c25ac3d40a8;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/utils/P3DUtil.java b/org.simantics.plant3d/src/org/simantics/plant3d/utils/P3DUtil.java index b34f4f07..0d656b05 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/utils/P3DUtil.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/utils/P3DUtil.java @@ -1,6 +1,8 @@ package org.simantics.plant3d.utils; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import org.simantics.Simantics; @@ -9,20 +11,30 @@ import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.exception.DatabaseException; import org.simantics.db.request.Read; +import org.simantics.g3d.scenegraph.base.INode; import org.simantics.layer0.Layer0; import org.simantics.plant3d.ontology.Plant3D; +import org.simantics.plant3d.scenegraph.Equipment; +import org.simantics.plant3d.scenegraph.P3DRootNode; +import org.simantics.plant3d.scenegraph.PipeRun; +import org.simantics.plant3d.scenegraph.PipelineComponent; +import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint; +import org.simantics.plant3d.scenegraph.controlpoint.PipingRules; import org.simantics.plant3d.utils.Item.Type; -import org.simantics.ui.SimanticsUI; public class P3DUtil { + + public static List getEquipments() throws DatabaseException { + return getEquipments(Plant3D.URIs.Builtin); + } - public static List getEquipments() throws DatabaseException { + public static List getEquipments(final String libUri) throws DatabaseException { return Simantics.getSession().syncRequest(new Read>() { @Override public List perform(ReadGraph graph) throws DatabaseException { Plant3D p3d = Plant3D.getInstance(graph); Resource project = Simantics.getProject().get(); - Resource builtins = graph.getResource(Plant3D.URIs.Builtin); + Resource builtins = graph.getResource(libUri); List actions = getItems(graph, project,p3d.Equipment); actions.addAll(getItems(graph, builtins,p3d.Equipment)); return actions; @@ -37,26 +49,43 @@ public class P3DUtil { @Override public List perform(ReadGraph graph) throws DatabaseException { Plant3D p3d = Plant3D.getInstance(graph); - ItemQuery query = new ItemQuery(p3d.Nozzle); + ItemQuery query = new ItemQuery(p3d.Nozzle, Plant3D.URIs.Builtin); return graph.syncRequest(query); } }); } - private static class ItemQuery implements Read> { + public static class ItemQuery implements Read> { private Resource type; - public ItemQuery(Resource type) { + private String libUri; + public ItemQuery(Resource type, String libUri) { this.type = type; + this.libUri = libUri; } @Override public List perform(ReadGraph graph) throws DatabaseException { Resource project = Simantics.getProject().get(); - Resource builtins = graph.getResource(Plant3D.URIs.Builtin); + Resource builtins = graph.getResource(libUri); List actions = getItems(graph, project,type); actions.addAll(getItems(graph, builtins,type)); return actions; } + + @Override + public boolean equals(Object obj) { + if (obj.getClass() != this.getClass()) + return false; + ItemQuery other = (ItemQuery)obj; + if (!type.equals(other.type)) + return false; + return libUri.equals(other.libUri); + } + + @Override + public int hashCode() { + return type.hashCode() + libUri.hashCode(); + } } public static List getEnds() throws DatabaseException { @@ -64,7 +93,7 @@ public class P3DUtil { @Override public List perform(ReadGraph graph) throws DatabaseException { Plant3D p3d = Plant3D.getInstance(graph); - ItemQuery query = new ItemQuery(p3d.EndComponent); + ItemQuery query = new ItemQuery(p3d.EndComponent, Plant3D.URIs.Builtin); return graph.syncRequest(query); } }); @@ -75,7 +104,7 @@ public class P3DUtil { @Override public List perform(ReadGraph graph) throws DatabaseException { Plant3D p3d = Plant3D.getInstance(graph); - ItemQuery query = new ItemQuery(p3d.TurnComponent); + ItemQuery query = new ItemQuery(p3d.TurnComponent, Plant3D.URIs.Builtin); return graph.syncRequest(query); } }); @@ -86,12 +115,21 @@ public class P3DUtil { @Override public List perform(ReadGraph graph) throws DatabaseException { Plant3D p3d = Plant3D.getInstance(graph); - ItemQuery query = new ItemQuery(p3d.InlineComponent); + ItemQuery query = new ItemQuery(p3d.InlineComponent, Plant3D.URIs.Builtin); return graph.syncRequest(query); } }); } + public static List filterUserComponents(List items) { + List result = new ArrayList(items.size()); + for (Item i : items) { + if (!i.isCode()) + result.add(i); + } + return result; + } + private static List getItems(ReadGraph graph, Resource lib, Resource type) throws DatabaseException{ Plant3D p3d = Plant3D.getInstance(graph); Layer0 l0 = Layer0.getInstance(graph); @@ -117,10 +155,16 @@ public class P3DUtil { } } } + Collections.sort(result, new Comparator() { + @Override + public int compare(Item o1, Item o2) { + return o1.getName().compareTo(o2.getName()); + } + }); return result; } - private static Item createItem(ReadGraph graph, Resource r) throws DatabaseException { + public static Item createItem(ReadGraph graph, Resource r) throws DatabaseException { Layer0 l0 = Layer0.getInstance(graph); Plant3D p3d = Plant3D.getInstance(graph); String name = graph.getRelatedValue(r, l0.HasName); @@ -158,5 +202,40 @@ public class P3DUtil { return model; } + + public static void finalizeDBLoad(P3DRootNode rootNode) throws Exception{ + for (INode node : rootNode.getChild()) { + if (node instanceof PipeRun) { + for (PipelineComponent pc : ((PipeRun) node).getChild()) + pc.sync(); + } else if (node instanceof Equipment) { + for (PipelineComponent pc : ((Equipment) node).getChild()) + pc.sync(); + } + } + + for (INode node : rootNode.getChild()) { + if (node instanceof PipeRun) { + for (PipelineComponent pc : ((PipeRun) node).getChild()) + pc.sync2(); + } else if (node instanceof Equipment) { + for (PipelineComponent pc : ((Equipment) node).getChild()) + pc.sync2(); + } + } + for (INode node : rootNode.getChild()) { + if (node instanceof PipeRun) { + PipingRules.validate((PipeRun)node); + } + } + PipingRules.setEnabled(true); + for (INode node : rootNode.getChild()) { + if (node instanceof PipeRun) { + PipeRun run = (PipeRun)node; + for (PipeControlPoint pcp : run.getControlPoints()) + PipingRules.positionUpdate(pcp); + } + } + } }