/** * @param lane * @param absY * @param level */ private void correctLaneElements(BPMNElement lane, double absY, int level) { List<BPMNElement> childs = lane2LaneChilds.get(lane); double height = 0; for (BPMNElement child : childs) { correctLaneElements(child, absY + height, level + 1); height += child.getGeometry().getHeight(); } int xTrans = level * -LANE_HEAD_WIDTH; for (LayoutingElement content : diagram.getChildElementsOf(lane)) { if (!BPMNType.isASwimlane(content.getType())) { LayoutingBounds geom = content.getGeometry(); content.setGeometry( new LayoutingBoundsImpl( geom.getX() + xTrans, geom.getY() - absY, geom.getWidth(), geom.getHeight())); ((BPMNElement) content).updateDataModel(); } } }