yFiles for Java 2.x Release Notes

yFiles for Java version 2.14 is the newest major release available in the yFiles for Java 2.x technology line. It contains many exciting new features compared to older versions and is almost completely API compatible with the 2.13 series.(See also the entire yFiles for Java change log.)

Technical Requirements

Oracle J2SDK 1.4 or higher is needed for software development with yFiles.

Oracle J2RE 1.4 or higher is needed to execute programs using yFiles.

A browser to view the HTML documentation.

yFiles 2.14 - Changes Since 2.13

Features Added

Layout

Added support for Sankey diagrams which visualize flow quantity between entities like e.g., cost or energy flow. The new Sankey Demo shows how such diagrams can be generated by means of the IncrementalHierarchicLayouter.

IncrementalHierarchicLayouter now allows to specify the directedness of edges, see EDGE_DIRECTEDNESS_DPKEY. This new feature enables to, for example, support mixed graphs that contain both directed and undirected edges: While for directed edges the layering step tries to find a solution where the source of an edge is placed above the target (with respect to the main layout direction), for undirected edges the direction doesn't matter and the edge may also be inserted as same-layer edge. This feature also enables to force some edges to specifically point against the main layout direction.

IncrementalHierarchicLayouter: Improved support for PortCandidates at group nodes. Previously, they were only obeyed if there was just a single candidate defined, which also applied to the opposite node (not necessarily a group node). Now, out of the given candidates, one is selected and considered for the routing. Still, fixed candidates are treated like free ones and are not supported at the side of group nodes.

IncrementalHierarchicLayouter: Routing of grouped edges that connect to nodes of different groups now assures that the whole bus segment remains outside the different group nodes. This avoids that group nodes get unnecessarily large and potentially makes drawings more symmetric.

IncrementalHierarchicLayouter: Improved edge grouping such that it is now possible to group incoming/outgoing edges as well as same-layer/backloop edges with common edges.

MoveSnapContext: Added property bendToBendDistance that may be used to enable bend-to-bend snapping.

Documentation

The new interactive documentation viewer integrates the yFiles for Java API documentation and the yFiles for Java Developer's Guide. Its built-in optimized search capability makes it easy to quickly get a result list of both API references and related descriptions.

The Javadoc™ API documentation is additionally available in the doc/javadoc/ folder.

IncrementalHierarchicLayouter: Fixed rare bug that caused same-layer edge to cross through their source or target node, e.g., the port was at the top of the source node but the edge crossed through the source node to leave it at the bottom.

IncrementalHierarchicLayouter: Fixed bug that sometimes caused the route of back-loop edges with at least one endpoint incident to a group node to unnecessarily enter this group node.

IncrementalHierarchicLayouter: Improved compactness of layouts that feature group nodes with insets and (group) nodes with halos (NodeHalo). Previously, specifying halos could enlarge the insets of group nodes by an unnecessary large amount.

IncrementalHierarchicLayouter: Fixed bug that caused a violation of the specified minimum distance or edge overlaps in the case of same-layer edges.

IncrementalHierarchicLayouter: Improved result if compact label placement is enabled (which is the default), see setLabelCompactionEnabled. In previous versions the labels may have been placed in a stacked style even if this did not make the result more compact (e.g. if all labels are placed to the right of the edges).

IncrementalHierarchicLayouter: Fixed distance between vertical (in a top-to-bottom layout) segments of same-layer edges that connect to group nodes. This also applies to self-loops that connect to the top or bottom of a group node with both ends as well as same-layer parts of other edges like backloops.

IncrementalHierarchicLayouter: Fixed bug that caused the minimum edge-to-edge distance to be violated by edges with strong port constraints that cross each other.

CircularLayouter and RadialLayouter: Fixed bug that caused that always all edges are bundled if bundling is enabled for at least one single edge. More precisely, property isBundled wasn't considered correctly.

ParallelEdgeLayouter: Fixed bug that caused wrong (very large) edge port coordinates. These coordinates could have led to Exceptions later when processing the graph, for example, when calculating placements of edge labels belonging to the edges with bad coordinates using model SmartEdgeLabelModel.

GenericTreeLayouter: Fixed bug that caused edges which are reversed during the layout and have a port constraint only to one endpoint (e.g., source) to obtain the same port constraint also to the other endpoint (e.g., target).

OrthogonalEdgeRouter: Fixed IllegalArgumentException that appeared if there were node labels with zero height/width.

EdgeRouter: Fixed possible NullPointerException that appeared if grouped edges were assigned to different fixed port locations (either specified with PortCandidates or PortConstraints) at their grouped end.

EdgeRouter: Fixed possible NullPointerException that could have appeared if a specified PortCandidate had multiple directions.

EdgeRouter: Fixed bug that caused violations of minimum first/last segment lengths of grouped edges when using different edge layout descriptors and, second, made the layout algorithm remove a user-registered DataProvider with key EDGE_LAYOUT_DESCRIPTOR_DPKEY.

ChannelEdgeRouter: Fixed routing of self-loops that have both source and target end point at the same side of the node. Previously, when multiple such self-loops were present at the same node, the routing produced bad end points located outside of the node.

Incompatible Changes

Behavior Changes

IncrementalHierarchicLayouter may now place source/target labels in layers that contain common nodes. In previous versions such labels were always placed in separate layers which often led to less compact drawings with superfluous bends.

IncrementalHierarchicLayouter: The edge grouping now supports to group incoming and outgoing edges of a node. In previous versions incoming and outgoing edges always defined separate groups even though the user specified the same group IDs for such edges.

IncrementalHierarchicLayouter: Method isIntegratedEdgeLabelingEnabled now always returns false if the labeling algorithm is disabled (see isLabelLayouterEnabled). In previous versions it was only required that an appropriate labeling algorithm was specified, but it was not necessary that it was enabled. Therefore, the integrated labeling state queried from the property might not have corresponded to what the layout algorithm actually did. The same behavior change applies to the following methods:

SmartOrganicLayouter does no longer resize empty group nodes, possibly ignoring a minimum group node size for them (see MINIMUM_NODE_SIZE_DPKEY). The behavior with respect to empty group nodes is now in line with the behavior of other common layout algorithms. The same behavior change applies to OrganicLayouter with group policy setting IGNORE_GROUPS_POLICY, where previously empty groups were resized too.

Centrality: Method closenessCentrality now sets the closeness of a node to Infinity if the sum of the shortest path distances is 0. Before, it was set to NaN in such cases.

SingleCycleLayouter: Method setNodeSequencer now allows to specify null to return to the default sequencer. In previous versions, specifying null leads to an IllegalStateException.