public static String replaceMavenVars()

in src/main/java/org/apache/sling/feature/maven/Substitution.java [39:92]


    public static String replaceMavenVars(
            MavenProject project,
            boolean legacyReplace,
            boolean replaceProjectProps,
            String[] additionalProperties,
            String s) {
        RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
        final RecursionInterceptor recursionInterceptor;
        if (legacyReplace) {
            project.getProperties().setProperty("project.osgiVersion", getOSGiVersion(project.getVersion()));
            interpolator.addValueSource(new PropertiesBasedValueSource(System.getProperties()));
            interpolator.addValueSource(new PropertiesBasedValueSource(project.getProperties()));

            List<String> synonymPrefixes = Collections.singletonList("project.");

            PrefixedValueSourceWrapper modelWrapper =
                    new PrefixedValueSourceWrapper(new ObjectBasedValueSource(project), synonymPrefixes, true);
            interpolator.addValueSource(modelWrapper);

            recursionInterceptor = new PrefixAwareRecursionInterceptor(synonymPrefixes, true);

        } else {
            final Properties props = new Properties();
            if (replaceProjectProps) {
                props.setProperty("project.groupId", project.getGroupId());
                props.setProperty("project.artifactId", project.getArtifactId());
                props.setProperty("project.version", project.getVersion());
                props.setProperty("project.osgiVersion", getOSGiVersion(project.getVersion()));
            }
            if (additionalProperties != null) {
                for (String p : additionalProperties) {
                    p = p.trim();
                    // check for a system property that overwrites the project property
                    String value = System.getProperty(p);
                    if (value == null && project.getProperties().containsKey(p)) {
                        // no system property, so try the project property
                        value = project.getProperties().getProperty(p);
                    }
                    if (value != null) {
                        // found a value
                        props.setProperty(p, value);
                    }
                }
            }
            interpolator.addValueSource(new PropertiesBasedValueSource(props));

            recursionInterceptor = new SimpleRecursionInterceptor();
        }
        try {
            return interpolator.interpolate(s, recursionInterceptor);
        } catch (InterpolationException e) {
            throw new RuntimeException("An error occurred while interpolating variables to JSON:\n" + s, e);
        }
    }