private void repositionDecorations(Container parent) { DiagramView diagramView = (DiagramView) parent; DesignView designView = diagramView.getDesignView(); Iterator<Pattern> itr = diagramView.getPatterns(); while (itr.hasNext()) { Pattern pattern = itr.next(); Decoration decoration = designView.getDecoration(pattern); if ((decoration == null) || !decoration.hasComponents()) { continue; } double zoom = designView.getCorrectedZoom(); // group components by positioneer HashMap<Positioner, List<Component>> positionerComponents = new HashMap<Positioner, List<Component>>(); ComponentsDescriptor components = decoration.getComponents(); int componentsCount = components.getComponentCount(); for (int i = 0; i < componentsCount; i++) { Component c = components.getComponent(i); Positioner p = components.getPositioner(i); List<Component> list = positionerComponents.get(p); if (list == null) { list = new ArrayList<Component>(componentsCount); positionerComponents.put(p, list); } list.add(c); if (c instanceof ZoomableDecorationComponent) { // apply zoom ((ZoomableDecorationComponent) c).setZoom(zoom); } } // call positioners for each group for (Positioner p : positionerComponents.keySet()) { p.position(pattern, positionerComponents.get(p), zoom); } } }