class ProcessConverterDelegate {

    Result<Map<String, BpmnNode>> convertChildNodes(
            BpmnNode firstNode,
            List<FlowElement> flowElements,
            List<LaneSet> laneSets) {

        // Fixes id and name for Data Objects
        for (FlowElement element : flowElements) {
            element.setId(revertIllegalCharsAttribute(element.getId()));
            element.setName(revertIllegalCharsAttribute(element.getName()));
        }

        final Result<Map<String, BpmnNode>> flowElementsResult = convertFlowElements(flowElements);
        final Map<String, BpmnNode> freeFloatingNodes = flowElementsResult.value();

        freeFloatingNodes
                .values()
                .forEach(n -> n.setParent(firstNode));

        final Result<BpmnNode>[] laneSetsResult = convertLaneSets(laneSets, freeFloatingNodes, firstNode);

        final Map<String, BpmnNode> lanesMap = Stream.of(laneSetsResult)
                .filter(Objects::nonNull).map(v -> v.value())
                .collect(Collectors.toMap(n -> n.value().getUUID(), n -> n));
        freeFloatingNodes.putAll(lanesMap);

        return ResultComposer.compose(freeFloatingNodes, flowElementsResult, ResultComposer.compose(laneSets, laneSetsResult));
    }

      ProcessConverterDelegate(
            TypedFactoryManager typedFactoryManager,
            PropertyReaderFactory propertyReaderFactory,
            DefinitionResolver definitionResolver,
            BaseConverterFactory factory);

}