protected List parsePathSegments()

in persistence-commons/persistence-commons-reporting-parent/persistence-commons-reporting-api/src/main/java/org/kie/kogito/persistence/reporting/database/BaseDatabaseManagerImpl.java [172:202]


    protected List<PathSegment> parsePathSegments(final List<M> mappings) {
        final int[] groupCount = { 0 };
        final List<PathSegment> mappingPaths = new ArrayList<>();
        mappings.forEach(mapping -> {
            final String srcPath = mapping.getSourceJsonPath();
            final String[] pathParts = srcPath.split("\\.");
            List<PathSegment> paths = mappingPaths;
            PathSegment parent = null;
            for (int idx = 0; idx < pathParts.length; idx++) {
                PathSegment sibling;
                final String pathPart = pathParts[idx];
                final Optional<PathSegment> path = paths.stream().filter(p -> Objects.equals(p.getSegment(), pathPart)).findFirst();
                if (path.isEmpty()) {
                    if (idx == pathParts.length - 1) {
                        sibling = buildTerminalPathSegment(pathPart, parent, mapping);
                    } else if (pathPart.endsWith("[]")) {
                        sibling = new JoinPathSegment(pathPart, parent, "g" + groupCount[0]++);
                    } else {
                        sibling = new PathSegment(pathPart, parent);
                    }
                    paths.add(sibling);
                    parent = sibling;
                    paths = sibling.getChildren();
                } else {
                    parent = path.get();
                    paths = path.get().getChildren();
                }
            }
        });
        return mappingPaths;
    }