Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

SlotProcessorTested
Before phase 1

Compound Cycle Processor
Graph Transformer
Comment Preprocessor
Edge And Layer Constraint Edge Reverser

(error)
(error)
(error)
(tick)
Before phase 2Big Nodes Processor
Label Dummy Inserter
(error)
(error)
Before phase 3

Layer Constraint Processor
Hierarchical Port Constraint Processor
Compound Dummy Edge Remover
Long Edge Splitter
Port Side Processor
Label Dummy Switcher
Inverted Port Processor
Self Loop Processor
Port List Sorter
North South Port Preprocessor

(tick)
(error)
(error)
(tick)
(tick)
(error)
(tick)
(error)
(tick)
(error)
Before phase 4

Subgraph Ordering Processor
In Layer Constraint Processor
Hyperedge Dummy Merger
Label Side Selector
Label And Node Size Processor
Node Margin Calculator
Compound Side Processor

(error)
(error)
(error)
(error)(tick)*
(error)
(error)
(error)
Before phase 5

Layer Size and Graph Height Calculator
Hierarchical Port Dummy Size Processor
Hierarchical Port Position Processor

(error)
(error)
(error)
After phase 5

Comment Postprocessor
Hypernode Processor
Hierarchical Port Orthogonal Edge Router
Long Edge Joiner
North South Port Postprocessor
Label Dummy Remover
Reversed Edge Restorer
Compound Graph Restorer
Graph Transformer
End Label Processor

(error)
(error)
(error)
(error)(tick)
(error)(tick)*
(error)(tick)*
(error)(tick)
(error)
(error)
(error)

Contents

Table of Contents
maxLevel2

...

Preconditions
  • Comments have been processed by the Comment Preprocessor.
  • Nodes are organized in layers and have been placed with enough spacing to hold their connected comment boxes.
Postconditions
  • Comments that have been removed by pre-processing are reinserted properly in the graph.

SlotAfter phase 5.
Dependencies
  • None.
Remarks
  • This processor only makes sense if the CommentPreprocessor was used before.

Comment Preprocessor

Looks for comments that have exactly one connection to a normal node and removes them from the graph. Such comments are put either into the Properties.TOP_COMMENTS or the Properties.BOTTOM_COMMENTS list of the connected node and processed later by the Comment Postprocessor. Other comments are processed normally, i.e. they are treated as regular nodes, but their incident edges may be reversed.

...

Preconditions
  • Document
Postconditions
  • Document
SlotAfter phase 5.
Dependencies
  • Document
Remarks
  • Document
Tests
  • No node exists with type LABEL.
  • Only nodes of the type LABEL are deleted from the graph.

Label Dummy Switcher

TODO: Document.

...

Preconditions
  • Document
Postconditions
  • Document
SlotBefore phase 4.
Dependencies
  • HyperedgeDummyMerger
  • InLayerConstraintProcessor
  • SubgraphOrderingProcessor
Remarks
  • Document
Tests
  • All labels on ports and edges have an assigned LabelSide unequal to UNKNOWN.

Layer Constraint Processor

...

Preconditions
  • The graph is layered.
  • Nodes to be placed in the first layer only have outgoing edges.
  • Nodes to be placed in the last layer only have incoming edges.
Postconditions
  • Nodes with layer constraints have been placed in the appropriate layers.
SlotBefore phase 3.
Dependencies
  • ConstrainedHierarchicalPortProcessor
Remarks
  • Layerers should usually include a dependency on this processor, unless they already adhere to layer constraints themselves.
  • The LayerConstraintEdgeReverser ensures that this processor's preconditions are met. Thus, layerers should also include a dependency on that processor.
Tests
  • If FIRST_SEPARATE nodes exist, they must all be present in the first layer. In that case all FIRST nodes must be located in the next layer, otherwise in the first layer. Analog for LAST_SEPARATE and LAST.

Layer Size and Graph Height Calculator

...

Preconditions
  • The graph is layered.
  • Nodes are assigned x and y coordinates.
  • The bend points of all edges are set.
Postconditions
  • There are no long edge dummy nodes anymore.
  • The graph may not be properly layered anymore.
SlotAfter phase 5.
Dependencies
  • HierarchicalPortOrthogonalEdgeRouter
Remarks
  • Since there are multiple processors that generate long edge dummies, this processor doesn't only make sense if the LongEdgeSplitter was used before.
Tests
  • No node exists with type LONG_EDGE.
  • Only nodes of the type LONG_EDGE are deleted from the graph.

Long Edge Splitter

Turns a layered graph into a properly layered graph by inserting long edge dummies where appropriate..

...

Preconditions
  • The graph is layered.
  • Nodes are assigned y coordinates.
  • The bend points of all edges are set.
  • Port positions are fixed.
Postconditions
  • North / south port dummy nodes are removed, their edges being properly routed and connected.
SlotAfter phase 5.
DependenciesNone.
Remarks
  • This processor only makes sense if the NorthSouthPortPreprocessor was used before.
Tests
  • No node exists with type NORTH_SOUTH_PORT.
  • Only nodes of the type NORTH_SOUTH_PORT are deleted from the graph.

North South Port Preprocessor

...

Preconditions
  • The graph is layered.
Postconditions
  • All nodes have at least fixed port sides.
SlotBefore phase 3.
DependenciesNone.
RemarksNone.
Tests
  • No node has its PortConstraints set to FREE or UNDEFINED.
  • Every port has a specified PortSide.

...

Preconditions
  • The graph is layered.
Postconditions
  • Reversed edges are restored to their original direction.
SlotAfter phase 5.
DependenciesNone.
Remarks
  • Note that this processor doesn't have any dependencies. Let's take a long edge that was reversed during phase 1 and then split into multiple segments by the LongEdgeSplitter. All the edges generated by that processor inherit the REVERSED property of the original long edge. Thus, it doesn't make any difference if we reverse all those edges before joining them to the original long edge, or if we join them first and reverse the original long edge afterwards.
Tests
  • No edge exists with the REVERSED property set to true.

Self Loop Processor

Does some work that enables the other processors and phases to handle self-loops. To handle them well, the NorthSouthPortPreprocessor may be required.

...