Class DexpiTopologyResolver
java.lang.Object
neqsim.process.processmodel.dexpi.DexpiTopologyResolver
Resolves the topology (stream connectivity) of a DEXPI P&ID XML document.
This class parses <Nozzle> elements on equipment, <Connection> elements inside
piping network segments, and piping components to build a directed graph of equipment-level
connections. The graph is then topologically sorted so that equipment can be instantiated in
correct upstream-to-downstream order.
DEXPI topology model:
- Each equipment element contains one or more
<Nozzle>children with unique IDs <PipingNetworkSegment>elements contain<Connection>elements linking nozzles and piping components viaFromID/ToIDattributes- Piping components (valves, reducers, tees) appear inline in segments and also participate in connections
- Version:
- 1.0
- Author:
- NeqSim
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classThe resolved topology of a DEXPI document, containing equipment IDs in topological order and the edges (connections) between them.static classRepresents a directed edge between two DEXPI elements in the process topology. -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static List<DexpiTopologyResolver.TopologyEdge> collapseToEquipmentEdges(List<DexpiTopologyResolver.TopologyEdge> rawEdges, Set<String> equipmentIds, Set<String> pipingComponentIds) Collapses raw edges that pass through intermediate piping components into direct equipment-to-equipment edges.private static voidcollectEquipmentAndNozzles(Document document, Map<String, String> nozzleToEquipment, Map<String, Element> equipmentElements) Collects all equipment elements and their nozzle-to-equipment mappings from the document.private static voidRecursively collects Nozzle elements from an equipment element and its sub-components.private static voidcollectPipingComponentIds(Document document, Set<String> pipingComponentIds) Collects all piping component IDs from PipingComponent wrapper elements.private static booleanisSubComponent(String componentClass) Checks whether a DEXPI ComponentClass is a sub-component of equipment (e.g.private static List<DexpiTopologyResolver.TopologyEdge> parseConnections(Document document, Map<String, String> nozzleToEquipment, Set<String> pipingComponentIds) Parses all Connection elements from PipingNetworkSegments into raw edges.Resolves the topology of a DEXPI XML document.private static StringresolveToEquipment(String id, Map<String, String> nozzleToEquipment) Resolves an ID (nozzle or equipment) to an equipment ID.topologicalSort(Set<String> equipmentIds, List<DexpiTopologyResolver.TopologyEdge> edges) Performs a topological sort (Kahn's algorithm) on the equipment graph.
-
Field Details
-
logger
private static final org.apache.logging.log4j.Logger logger
-
-
Constructor Details
-
DexpiTopologyResolver
private DexpiTopologyResolver()
-
-
Method Details
-
resolve
Resolves the topology of a DEXPI XML document.- Parameters:
document- the parsed DEXPI XML document- Returns:
- the resolved topology with equipment in topological order
-
collectEquipmentAndNozzles
private static void collectEquipmentAndNozzles(Document document, Map<String, String> nozzleToEquipment, Map<String, Element> equipmentElements) Collects all equipment elements and their nozzle-to-equipment mappings from the document.- Parameters:
document- the XML documentnozzleToEquipment- map to populate with nozzle ID to equipment IDequipmentElements- map to populate with equipment ID to XML element
-
collectNozzlesFrom
private static void collectNozzlesFrom(Element element, String equipId, Map<String, String> nozzleToEquipment) Recursively collects Nozzle elements from an equipment element and its sub-components.- Parameters:
element- the parent elementequipId- the owning equipment IDnozzleToEquipment- map to populate
-
collectPipingComponentIds
-
parseConnections
private static List<DexpiTopologyResolver.TopologyEdge> parseConnections(Document document, Map<String, String> nozzleToEquipment, Set<String> pipingComponentIds) Parses all Connection elements from PipingNetworkSegments into raw edges.- Parameters:
document- the XML documentnozzleToEquipment- nozzle to equipment mappingpipingComponentIds- known piping component IDs- Returns:
- list of raw edges (may reference nozzles, piping components, or off-page connectors)
-
resolveToEquipment
-
collapseToEquipmentEdges
private static List<DexpiTopologyResolver.TopologyEdge> collapseToEquipmentEdges(List<DexpiTopologyResolver.TopologyEdge> rawEdges, Set<String> equipmentIds, Set<String> pipingComponentIds) Collapses raw edges that pass through intermediate piping components into direct equipment-to-equipment edges. For example, Equipment-A > Valve-1 > Equipment-B becomes Equipment-A > Equipment-B.- Parameters:
rawEdges- the raw edges from Connection elementsequipmentIds- the set of actual equipment IDspipingComponentIds- the set of piping component IDs- Returns:
- list of equipment-level edges
-
topologicalSort
private static List<String> topologicalSort(Set<String> equipmentIds, List<DexpiTopologyResolver.TopologyEdge> edges) Performs a topological sort (Kahn's algorithm) on the equipment graph.- Parameters:
equipmentIds- all equipment IDsedges- directed edges between equipment- Returns:
- equipment IDs in topological order
-
isSubComponent
Checks whether a DEXPI ComponentClass is a sub-component of equipment (e.g. Chamber, TubeBundle, Impeller) rather than a top-level equipment item.- Parameters:
componentClass- the DEXPI component class name- Returns:
- true if it is a sub-component
-