yFiles for Java 2.x Release Notes

yFiles for Java version 2.16 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.15 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.16 - Changes Since 2.15

Hide Description
Open in yEd LiveDownload
yFiles for Java 2.16 Release Notes
New support for bus-like arrangement in hierarchic layouts
yFiles for Java 2.16 Release Notes
New integrated edge label placement in EdgeRouter class
yFiles for Java 2.16 Release Notes
New support for orthogonal bus routing and port grouping of edges at source and/or target node in EdgeRouter class

New Features

Layout

Improvements

Layout

Bugfixes

Layout

  • IncrementalHierarchicLayouter: Fixed a bug that could cause intersections between edges and elements of a sub-component (see SUB_COMPONENT_ID_DPKEY). Note that this fix may sometimes cause less compact results within a layer.
  • IncrementalHierarchicLayouter now produces shorter, more direct edge routes for edges connecting at a group node and leaving on the the left/right group side. This only affects cases where the relevant group node also contains direct-content edges (see setDirectGroupContentEdgeRoutingEnabled).
  • IncrementalHierarchicLayouter: Fixed a possible NullPointerException if the IncrementalHierarchicLayouter is wrapped by an instance of RecursiveGroupLayouter and the input graph contains layering constraints between elements of different groups.
  • IncrementalHierarchicLayouter: Fixed a bug that sometimes caused groups with too large insets for inputs with nested group nodes.
  • IncrementalHierarchicLayouter: Fixed a very rare bug that lead to an IllegalArgumentException in incremental layout mode.
  • SmartOrganicLayouter: Fixed a possible IllegalArgumentException that may appear if all nodes are located at position (0,0) and the algorithm handles substructures in a special way (see setChainSubstructureStyle, setStarSubstructureStyle, setCycleSubstructureStyle, and setParallelSubstructureStyle).
  • OrthogonalLayouter and DirectedOrthogonalLayouter: Fixed a rare infinite looping issue for input graphs that are tree structures and have mixed edge directedness (see EDGE_DIRECTEDNESS_DPKEY). In addition, the problem only occurs if property getTreeStyle is not set to TREE_STYLE_NONE.
  • OrthogonalLayouter and DirectedOrthogonalLayouter: Fixed a rare bug that caused an ArrayIndexOutOfBoundsException if property setUseFaceMaximization is enabled.
  • TreeMapLayouter: Fixed a bug that may lead to results with elements placed at infinite coordinates.
  • SeriesParallelLayouter: Fixed WrongGraphStructure exception for input graphs with groups that only contain disconnected nodes.
  • PartialLayouter does no longer reduce the size of fixed group nodes if option setFixedGroupResizingEnabled is disabled.
  • PortCandidateAssignmentStage: Fixed a bug that destroyed the grouping information for the core layout algorithm.
  • TreeMapLayoutModule: Fixed a possible ArrayIndexOutOfBoundsException that may appear for some input graphs with empty group nodes.
  • SALabeling and GreedyMISLabeling: Fixed a rare bug that caused an IllegalArgumentException if there were labels on edges with zero length.
  • SALabeling and GreedyMISLabeling: Fixed bug which caused that the preferred distance to the edge (getDistanceToEdge of an edge label was violated even though it would have been possible to keep it. The issue affected edge labels with a PreferredPlacementDescriptor and multiple side preferences (e.g. left of edge or on the edge).
  • SALabeling and GreedyMISLabeling: Fixed a wrong label profit calculation with respect to edge labels with a PreferredPlacementDescriptor.
  • SALabeling and GreedyMISLabeling: Fixed an issue that caused bad positions for labels of direct content edges (edges that directly connect a group node with a descendant, without leaving the group) with a free edge label model.
  • SimpleNodePlacer: Fixed an issue that sometimes caused very long horizontal distances between subtrees.
  • CompactNodePlacer: Fixed a possible IllegalStateException for input graphs with specified strategy mementos (see STRATEGY_MEMENTO_DPKEY).
  • EdgeRouter: Fixed a rare bug that caused an IndexOutOfBoundsException.
  • EdgeRouter: Fixed a bug that caused that edges mapped to equal group ids with different object ids were not grouped.
  • EdgeRouter: The routing algorithm now avoids unnecessary bends in cases that contain PortCandidates with fixed offsets (or strong PortConstraints) where the fixed port locations have a very similar x- or y-coordinate such that the path must consist of three segments with a single, very short middle segment. Previously, five segments in total were generated.
  • EdgeRouter: Fixed a rare bug that sometimes caused weird routes of direct content edges with strong port constraints at the group nodes.
  • EdgeRouter: Fixed a bug that sometimes caused an exception if the input graph contained edges with external ports.
  • EdgeRouter: Fixed bug that sometimes caused a non-deterministic behavior.
  • EdgeRouter: Fixed bug that caused intersections between edges and labels of fixed edges even though property setConsiderEdgeLabelsEnabled was enabled.
  • EdgeRouter: Fixed a rare NullPointerException for inputs containing fixed, grouped edges and when using polyline routing style.
  • EdgeRouter: Fixed an issue that the algorithm considered the NodeHalo associated with the source (instead of the target) node when handling the minimum last segment length setting. This could lead to unnecessarily long or too short last segments.
  • EdgeRouter: Fixed very rare NullPointerException that could be triggered during routing in cases where the source/target node is covered by obstacles (i.e. other nodes, labels).
  • EdgeRouter: Fixed two issues resulting in a violation of a PortCandidate with fixed offsets (or a strong PortConstraint). The first was only triggered for constraints at the target side and only when the target node was additionally partly or fully covered by other obstacles (e.g. node labels). The second issue appeared in cases with the source and target node fully overlapping (e.g. an edge from group to child).
  • EdgeRouter: Fixed a bug that caused that intermediate routing points were in some cases not correctly part of the final path when polyline routing was enabled (see isPolylineRoutingEnabled).
  • EdgeRouter: Fixed a rare NullPointerException that was triggered in cases where the input contained grouped edges.
  • EdgeRouter: Fixed a rare NullPointerException that occurred for inputs with a grid (see Grid).
  • PolylineLayoutStage: Fixed a bug that sometimes caused node-edge-overlaps due to sloped, polyline segments created by the stage.

Algorithms

Base

  • YList: Fixed method addAll that previously inserted the first element of the given collection at position index + 1 instead of index.

Incompatible Changes

Behavior Changes

API Changes

  • The following changes regarding the expert-API related to EdgeRouter were made:
    • AbstractSegmentInfo: Changed the first parameter of the constructors from type Edge to type java.lang.Object. It should be of type PathRequest for routed edges and Edge for fixed ones. The method getEdge has been removed as the info is not necessarily associated with an edge.
    • EdgeCellInfo: Changed the first parameter of the constructor from type Edge to type java.lang.Object. It should be of type PathRequest for routed edges and Edge for fixed ones. Removed method getEdge and replaced it with getItem.
    • EdgeInfo: Changed the constructor signature from y.layout.router.polyline.EdgeInfo(y.layout.router.polyline.Path, y.layout.router.polyline.PathSearchConfiguration) to PathSearchConfiguration).
    • Path: Removed the parameter of type Edge from the constructor and removed method y.layout.router.polyline.Path#getEdge(). A path is now not necessarily associated with an edge but only with the newly introduced PathRequest.
    • PathSearchResult: Removed method getEdgeInfo.