class CaseManagementShapeView extends SVGShapeViewImpl implements HasSize<SVGShapeViewImpl> {

    public void addShape(final WiresShape shape, final int targetIndex) {

        if (shape == null || (targetIndex < 0 || targetIndex > getChildShapes().size())) {
            return;
        }

        final List<WiresShape> childShapes = getChildShapes().toList();
        childShapes.forEach(WiresShape::removeFromParent);

        // exclude the shape and its ghost
        final List<WiresShape> existingChildShapes = childShapes.stream()
                .filter(s -> !((WiresShapeView) s).getUUID().equals(((WiresShapeView) shape).getUUID()))
                .collect(Collectors.toList());

        existingChildShapes.add(targetIndex, shape);

        //call to add(..) causes ILayoutHandler to be invoked
        existingChildShapes.forEach(this::add);
    }

    public  CaseManagementShapeView(final String name,
                                   final SVGPrimitiveShape svgPrimitive,
                                   final double width,
                                   final double height,
                                   final boolean resizable);
    public  CaseManagementShapeView(final String name,
                                   final SVGPrimitiveShape svgPrimitive,
                                   final double width,
                                   final double height,
                                   final boolean resizable,
                                   final Optional<MultiPath> optDropZone);

}