public static String replaceMavenVars()

in src/main/java/org/apache/sling/feature/maven/Substitution.java [38:91]


    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);
        }
    }