/** * Resolve variables in the feature. * Variables are allowed in the values of framework properties and in the values of * configuration properties. * @param feature The feature * @param additionalVariables Optional additional variables */ public static void resolveVariables(final Feature feature, final Map<String,String> additionalVariables) { for(final Configuration cfg : feature.getConfigurations()) { final Set<String> keys = new HashSet<>(Collections.list(cfg.getProperties().keys())); for(final String key : keys) { final Object value = cfg.getProperties().get(key); cfg.getProperties().put(key, replaceVariables(value, additionalVariables, feature)); } } for(final Map.Entry<String, String> entry : feature.getFrameworkProperties().entrySet()) { // the value is always a string entry.setValue((String)replaceVariables(entry.getValue(), additionalVariables, feature)); } }
public static void convert(File inputFile, File outputFile, FeatureProvider fp, File ... additionalInputFiles) throws UncheckedIOException { if (outputFile.exists()) { if (outputFile.lastModified() > inputFile.lastModified()) { LOGGER.debug("Skipping the generation of {} as this file already exists and is newer.", outputFile); return; } } org.apache.sling.feature.Feature feature = getFeature(inputFile); if (feature.getPrototype() != null) { feature = handlePrototype(feature, additionalInputFiles, fp); } Object featureNameVar = feature.getVariables().remove(PROVISIONING_MODEL_NAME_VARIABLE); String featureName; if (featureNameVar instanceof String) { featureName = (String) featureNameVar; } else { featureName = feature.getId().getArtifactId(); } String runMode = feature.getVariables().remove(PROVISIONING_RUNMODES); String[] runModes = null; if (runMode != null) { runModes = runMode.split(","); } Feature newFeature = new Feature(featureName); convert(newFeature, feature.getVariables(), feature.getBundles(), feature.getConfigurations(), feature.getFrameworkProperties(), feature.getExtensions(), outputFile.getAbsolutePath(), runModes); }
private static List<org.apache.sling.feature.Feature> buildFeatures(Model model, String bareFileName, Map<String, Object> options) { final List<org.apache.sling.feature.Feature> features = new ArrayList<>(); String groupId = getOption(options, "groupId", "generated"); String version = getOption(options, "version", "1.0.0"); for(final Feature feature : model.getFeatures() ) { final String idString; String name = feature.getName(); if ( name != null ) { name = name.replaceAll("[:]", ""); if (!name.equals(bareFileName)) { name = bareFileName + "_" + name; } if ( feature.getVersion() != null ) { idString = groupId + "/" + name + "/" + feature.getVersion(); } else { idString = groupId + "/" + name + "/" + version; } } else { idString = groupId + "/feature/" + version; } final org.apache.sling.feature.Feature f = new org.apache.sling.feature.Feature(ArtifactId.parse(idString)); features.add(f); buildFromFeature(feature, f.getVariables(), f.getBundles(), f.getConfigurations(), f.getExtensions(), f.getFrameworkProperties()); if (!f.getId().getArtifactId().equals(feature.getName())) { f.getVariables().put(FeatureToProvisioning.PROVISIONING_MODEL_NAME_VARIABLE, feature.getName()); } } return features; }
private static void merge(final Feature target, final Feature source, final BuilderContext context, final List<String> artifactOverrides, final String originKey) { BuilderUtil.mergeVariables(target.getVariables(), source.getVariables(), context); BuilderUtil.mergeBundles(target.getBundles(), source.getBundles(), source, artifactOverrides, originKey); BuilderUtil.mergeConfigurations(target.getConfigurations(), source.getConfigurations()); BuilderUtil.mergeFrameworkProperties(target.getFrameworkProperties(), source.getFrameworkProperties(), context); BuilderUtil.mergeRequirements(target.getRequirements(), source.getRequirements()); BuilderUtil.mergeCapabilities(target.getCapabilities(), source.getCapabilities()); BuilderUtil.mergeExtensions(target, source, context, artifactOverrides, originKey); }
+ " as it is not part of that feature."); final Iterator<Configuration> iter = feature.getConfigurations().iterator(); while ( iter.hasNext() ) { final Configuration cfg = iter.next(); final String attr = (attrPos == -1 ? null : c.substring(attrPos + 1)); final Configuration found = feature.getConfigurations().getConfiguration(pid); if ( found != null ) { if ( attr == null ) { feature.getConfigurations().remove(found); } else { found.getProperties().remove(attr);
result.getBundles().clear(); result.getFrameworkProperties().clear(); result.getConfigurations().clear(); result.getRequirements().clear(); result.getCapabilities().clear();
for(final Configuration cfg : this.getConfigurations()) { result.getConfigurations().add(cfg.copy(cfg.getPid()));