static void mergeExtensions()

in src/main/java/org/apache/sling/feature/builder/BuilderUtil.java [602:652]


    static void mergeExtensions(final Extension target,
            final Extension source,
            final Feature sourceFeature,
            final List<ArtifactId> artifactOverrides,
            final String originKey) {
        switch ( target.getType() ) {
            case TEXT : // simply append
                target.setText((target.getText() != null && !target.getText().trim().isEmpty() ? (target.getText() + "\n") : "") + source.getText());
                break;
            case JSON : JsonStructure struct1;
                if (target.getJSON() != null) {
                    try (final StringReader reader = new StringReader(target.getJSON())) {
                        struct1 = Json.createReader(reader).read();
                    }
                    JsonStructure struct2;
                    try (final StringReader reader = new StringReader(source.getJSON())) {
                        struct2 = Json.createReader(reader).read();
                    }

                    if (struct1.getValueType() != struct2.getValueType()) {
                        throw new IllegalStateException("Found different JSON types for extension " + target.getName()
                                + " : " + struct1.getValueType() + " and " + struct2.getValueType());
                    }
                    if (struct1.getValueType() == ValueType.ARRAY) {
                        final JsonArrayBuilder builder = Json.createArrayBuilder();

                        Stream.concat(
                                ((JsonArray) struct1).stream(),
                                ((JsonArray) struct2).stream()
                        ).forEachOrdered(builder::add);

                        struct1 = builder.build();
                    } else {
                        // object is merge
                        struct1 = merge((JsonObject) struct1, (JsonObject) struct2);
                    }
                    StringWriter buffer = new StringWriter();
                    try (JsonWriter writer = Json.createWriter(buffer)) {
                        writer.write(struct1);
                    }
                    target.setJSON(buffer.toString());
                } else {
                    target.setJSON(source.getJSON());
                }
                break;

        case ARTIFACTS:
            mergeArtifacts(target.getArtifacts(), source.getArtifacts(), sourceFeature, artifactOverrides, originKey);
            break;
        }
    }