Author: sseifert Date: Tue Jul 14 09:04:19 2015 New Revision: 1690878 URL: http://svn.apache.org/r1690878 Log: SLING-4879 refactor model processing logic from ModelUtility#getEffectiveModel into separate class to make it reusable
Added: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/EffectiveModelProcessor.java (with props) sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelProcessor.java (with props) sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java (with props) Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java?rev=1690878&r1=1690877&r2=1690878&view=diff ============================================================================== --- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java (original) +++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java Tue Jul 14 09:04:19 2015 @@ -148,10 +148,10 @@ public class DependencyLifecycleParticip // prepare resolver options ResolverOptions resolverOptions = new ResolverOptions(); - if (nodeBooleanValue(info.plugin, "usePomVariables", false) && info.project != null) { + if (nodeBooleanValue(info.plugin, "usePomVariables", false)) { resolverOptions.variableResolver(new PomVariableResolver(info.project)); } - if (nodeBooleanValue(info.plugin, "usePomDependencies", false) && info.project != null) { + if (nodeBooleanValue(info.plugin, "usePomDependencies", false)) { resolverOptions.artifactVersionResolver(new PomArtifactVersionResolver(info.project)); } Added: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/EffectiveModelProcessor.java URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/EffectiveModelProcessor.java?rev=1690878&view=auto ============================================================================== --- sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/EffectiveModelProcessor.java (added) +++ sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/EffectiveModelProcessor.java Tue Jul 14 09:04:19 2015 @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.provisioning.model; + +import java.util.Map.Entry; + +import org.apache.sling.provisioning.model.ModelUtility.ResolverOptions; +import org.apache.sling.provisioning.model.ModelUtility.VariableResolver; + +class EffectiveModelProcessor extends ModelProcessor { + + private final ResolverOptions options; + + public EffectiveModelProcessor(ResolverOptions options) { + if (options == null) { + throw new IllegalArgumentException("Resolver options is null"); + } + this.options = options; + } + + @Override + protected Artifact processArtifact(Artifact artifact, Feature newFeature, RunMode newRunMode) { + final String groupId = ModelUtility.replace(newFeature, artifact.getGroupId(), options.getVariableResolver()); + final String artifactId = ModelUtility.replace(newFeature, artifact.getArtifactId(), options.getVariableResolver()); + final String version = ModelUtility.replace(newFeature, artifact.getVersion(), options.getVariableResolver()); + final String classifier = ModelUtility.replace(newFeature, artifact.getClassifier(), options.getVariableResolver()); + final String type = ModelUtility.replace(newFeature, artifact.getType(), options.getVariableResolver()); + final String resolvedVersion = ModelUtility.resolveArtifactVersion(groupId, artifactId, version, classifier, type, + options.getArtifactVersionResolver()); + return new Artifact(groupId, artifactId, resolvedVersion, classifier, type); + } + + @Override + protected Configuration processConfiguration(Configuration config, Feature newFeature, RunMode newRunMode) { + Configuration newConfig = new Configuration(config.getPid(), config.getFactoryPid()); + ModelUtility.getProcessedConfiguration(newFeature, newConfig, config, options.getVariableResolver()); + return newConfig; + } + + @Override + protected KeyValueMap<String> processSettings(KeyValueMap<String> settings, final Feature newFeature, final RunMode newRunMode) { + KeyValueMap<String> newSettings = new KeyValueMap<String>(); + for (final Entry<String, String> entry : settings) { + newSettings.put(entry.getKey(), ModelUtility.replace(newFeature, entry.getValue(), + new VariableResolver() { + @Override + public String resolve(final Feature feature, final String name) { + if ( "sling.home".equals(name) ) { + return "${sling.home}"; + } + if ( options.getVariableResolver() != null ) { + return options.getVariableResolver().resolve(newFeature, name); + } + return newFeature.getVariables().get(name); + } + })); + } + return newSettings; + } + +} Propchange: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/EffectiveModelProcessor.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/EffectiveModelProcessor.java ------------------------------------------------------------------------------ --- svn:keywords (added) +++ svn:keywords Tue Jul 14 09:04:19 2015 @@ -0,0 +1 @@ +LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author Propchange: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/EffectiveModelProcessor.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelProcessor.java URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelProcessor.java?rev=1690878&view=auto ============================================================================== --- sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelProcessor.java (added) +++ sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelProcessor.java Tue Jul 14 09:04:19 2015 @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.provisioning.model; + +import java.util.Enumeration; + +/** + * Allows to process a value. A new value is created and for each part in the model a process + * method is called. Subclasses can overwrite those methods to inject specific behavior. + * The processor itself does not change anything in the model. + */ +class ModelProcessor { + + /** + * Creates a copy of the model and calls a process method for each part found in the model. + * This allows to modify the parts content (e.g. replace variables), but not to add or remove parts. + * @param model The base model. + * @return The processed and copied model. + */ + public final Model process(final Model model) { + final Model result = new Model(); + result.setLocation(model.getLocation()); + + for(final Feature feature : model.getFeatures()) { + final Feature newFeature = result.getOrCreateFeature(feature.getName()); + newFeature.setComment(feature.getComment()); + newFeature.setLocation(feature.getLocation()); + + newFeature.getVariables().setComment(feature.getVariables().getComment()); + newFeature.getVariables().setLocation(feature.getVariables().getLocation()); + newFeature.getVariables().putAll(processVariables(feature.getVariables(), feature)); + + for(final RunMode runMode : feature.getRunModes()) { + final RunMode newRunMode = newFeature.getOrCreateRunMode(runMode.getNames()); + newRunMode.setLocation(runMode.getLocation()); + + for(final ArtifactGroup group : runMode.getArtifactGroups()) { + final ArtifactGroup newGroup = newRunMode.getOrCreateArtifactGroup(group.getStartLevel()); + newGroup.setComment(group.getComment()); + newGroup.setLocation(group.getLocation()); + + for(final Artifact artifact : group) { + final Artifact newArtifact = processArtifact(artifact, newFeature, newRunMode); + newArtifact.setComment(artifact.getComment()); + newArtifact.setLocation(artifact.getLocation()); + newGroup.add(newArtifact); + } + } + + newRunMode.getConfigurations().setComment(runMode.getConfigurations().getComment()); + newRunMode.getConfigurations().setLocation(runMode.getConfigurations().getLocation()); + for(final Configuration config : runMode.getConfigurations()) { + final Configuration processedConfig = processConfiguration(config, newFeature, newRunMode); + final Configuration newConfig = newRunMode.getOrCreateConfiguration(processedConfig.getPid(), processedConfig.getFactoryPid()); + newConfig.setLocation(config.getLocation()); + newConfig.setComment(config.getComment()); + final Enumeration<String> i = processedConfig.getProperties().keys(); + while ( i.hasMoreElements() ) { + final String key = i.nextElement(); + newConfig.getProperties().put(key, processedConfig.getProperties().get(key)); + } + } + + newRunMode.getSettings().setComment(runMode.getSettings().getComment()); + newRunMode.getSettings().setLocation(runMode.getSettings().getLocation()); + newRunMode.getSettings().putAll(processSettings(runMode.getSettings(), newFeature, newRunMode)); + } + + } + return result; + } + + protected KeyValueMap<String> processVariables(KeyValueMap<String> variables, Feature feature) { + return variables; + } + + protected Artifact processArtifact(Artifact artifact, Feature newFeature, RunMode newRunMode) { + return artifact; + } + + protected Configuration processConfiguration(Configuration config, Feature newFeature, RunMode newRunMode) { + return config; + } + + protected KeyValueMap<String> processSettings(KeyValueMap<String> settings, Feature newFeature, RunMode newRunMode) { + return settings; + } + +} Propchange: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelProcessor.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelProcessor.java ------------------------------------------------------------------------------ --- svn:keywords (added) +++ svn:keywords Tue Jul 14 09:04:19 2015 @@ -0,0 +1 @@ +LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author Propchange: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelProcessor.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java?rev=1690878&r1=1690877&r2=1690878&view=diff ============================================================================== --- sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java (original) +++ sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java Tue Jul 14 09:04:19 2015 @@ -314,24 +314,25 @@ public abstract class ModelUtility { /** * Replace all variables in the model and return a new model with the replaced values. * @param model The base model. + * @param resolver Optional variable resolver. * @return The model with replaced variables. * @throws IllegalArgumentException If a variable can't be replaced or configuration properties can't be parsed + * @deprecated Use {@link #getEffectiveModel(Model)} or {@link #getEffectiveModel(Model, ResolverOptions)} instead */ - public static Model getEffectiveModel(final Model model) { - return getEffectiveModel(model, new ResolverOptions()); + @Deprecated + public static Model getEffectiveModel(final Model model, final VariableResolver resolver) { + return getEffectiveModel(model, new ResolverOptions().variableResolver(resolver)); } /** * Replace all variables in the model and return a new model with the replaced values. * @param model The base model. - * @param resolver Optional variable resolver. * @return The model with replaced variables. * @throws IllegalArgumentException If a variable can't be replaced or configuration properties can't be parsed - * @deprecated Use {@link #getEffectiveModel(Model, ResolverOptions)} instead + * @since 1.3 */ - @Deprecated - public static Model getEffectiveModel(final Model model, final VariableResolver resolver) { - return getEffectiveModel(model, new ResolverOptions().variableResolver(resolver)); + public static Model getEffectiveModel(final Model model) { + return getEffectiveModel(model, new ResolverOptions()); } /** @@ -340,79 +341,11 @@ public abstract class ModelUtility { * @param options Resolver options. * @return The model with replaced variables. * @throws IllegalArgumentException If a variable can't be replaced or configuration properties can't be parsed + * @since 1.3 */ public static Model getEffectiveModel(final Model model, final ResolverOptions options) { - if (options == null) { - throw new IllegalArgumentException("Resolver options is null"); - } - - final Model result = new Model(); - result.setLocation(model.getLocation()); - - for(final Feature feature : model.getFeatures()) { - final Feature newFeature = result.getOrCreateFeature(feature.getName()); - newFeature.setComment(feature.getComment()); - newFeature.setLocation(feature.getLocation()); - - newFeature.getVariables().setComment(feature.getVariables().getComment()); - newFeature.getVariables().setLocation(feature.getVariables().getLocation()); - newFeature.getVariables().putAll(feature.getVariables()); - - for(final RunMode runMode : feature.getRunModes()) { - final RunMode newRunMode = newFeature.getOrCreateRunMode(runMode.getNames()); - newRunMode.setLocation(runMode.getLocation()); - - for(final ArtifactGroup group : runMode.getArtifactGroups()) { - final ArtifactGroup newGroup = newRunMode.getOrCreateArtifactGroup(group.getStartLevel()); - newGroup.setComment(group.getComment()); - newGroup.setLocation(group.getLocation()); - - for(final Artifact artifact : group) { - final String groupId = replace(newFeature, artifact.getGroupId(), options.getVariableResolver()); - final String artifactId = replace(newFeature, artifact.getArtifactId(), options.getVariableResolver()); - final String version = replace(newFeature, artifact.getVersion(), options.getVariableResolver()); - final String classifier = replace(newFeature, artifact.getClassifier(), options.getVariableResolver()); - final String type = replace(newFeature, artifact.getType(), options.getVariableResolver()); - final String resolvedVersion = resolveArtifactVersion(groupId, artifactId, version, classifier, type, - options.getArtifactVersionResolver()); - final Artifact newArtifact = new Artifact(groupId, artifactId, resolvedVersion, classifier, type); - newArtifact.setComment(artifact.getComment()); - newArtifact.setLocation(artifact.getLocation()); - - newGroup.add(newArtifact); - } - } - - newRunMode.getConfigurations().setComment(runMode.getConfigurations().getComment()); - newRunMode.getConfigurations().setLocation(runMode.getConfigurations().getLocation()); - for(final Configuration config : runMode.getConfigurations()) { - final Configuration newConfig = newRunMode.getOrCreateConfiguration(config.getPid(), config.getFactoryPid()); - - getProcessedConfiguration(newFeature, newConfig, config, options.getVariableResolver()); - } - - newRunMode.getSettings().setComment(runMode.getSettings().getComment()); - newRunMode.getSettings().setLocation(runMode.getSettings().getLocation()); - for(final Map.Entry<String, String> entry : runMode.getSettings() ) { - newRunMode.getSettings().put(entry.getKey(), replace(newFeature, entry.getValue(), - new VariableResolver() { - - @Override - public String resolve(final Feature feature, final String name) { - if ( "sling.home".equals(name) ) { - return "${sling.home}"; - } - if ( options.getVariableResolver() != null ) { - return options.getVariableResolver().resolve(newFeature, name); - } - return newFeature.getVariables().get(name); - } - })); - } - } - - } - return result; + ModelProcessor processor = new EffectiveModelProcessor(options); + return processor.process(model); } /** @@ -554,7 +487,7 @@ public abstract class ModelUtility { return errors; } - private static void getProcessedConfiguration( + static void getProcessedConfiguration( final Feature feature, final Configuration newConfig, final Configuration config, @@ -637,4 +570,5 @@ public abstract class ModelUtility { } } } + } Added: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java?rev=1690878&view=auto ============================================================================== --- sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java (added) +++ sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java Tue Jul 14 09:04:19 2015 @@ -0,0 +1,212 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.provisioning.model; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; + +import java.util.Enumeration; +import java.util.Iterator; +import java.util.Map.Entry; + +import org.junit.Before; +import org.junit.Test; + +public class ModelProcessorTest { + + private Model testModel; + private ModelProcessor underTest; + + @Before + public void setUp() { + testModel = new Model(); + testModel.setLocation("LocM1"); + + Feature feature1 = testModel.getOrCreateFeature("feature1"); + feature1.setLocation("LocF1"); + feature1.setComment("ComF1"); + feature1.getVariables().setLocation("LocFV1"); + feature1.getVariables().setComment("ComFV1"); + feature1.getVariables().put("k1", "v1"); + feature1.getVariables().put("k2", "v2"); + + RunMode runMode11 = feature1.getOrCreateRunMode(new String[] { "rm1", "rm2"}); + runMode11.setLocation("LocRM11"); + + RunMode runMode12 = feature1.getOrCreateRunMode(new String[] { "rm2"}); + ArtifactGroup group12 = runMode12.getOrCreateArtifactGroup(10); + group12.setLocation("LocRMG11"); + group12.setComment("ComRMG11"); + + group12.add(new Artifact("g1", "a1", "v1", "c1", "t1")); + group12.add(new Artifact("g2", "a2", "v2", null, null)); + + runMode12.getConfigurations().setLocation("LocConf12"); + runMode12.getConfigurations().setComment("ComConf12"); + + Configuration conf121 = runMode12.getOrCreateConfiguration("pid1", null); + conf121.setLocation("LocConf121"); + conf121.setComment("ComConf121"); + conf121.getProperties().put("conf1", "v1"); + conf121.getProperties().put("conf2", "v2"); + + Configuration conf122 = runMode12.getOrCreateConfiguration("pid2", "fac2"); + conf122.setLocation("LocConf122"); + conf122.setComment("ComConf122"); + conf122.getProperties().put("conf3", "v3"); + + runMode12.getSettings().setLocation("LocSet12"); + runMode12.getSettings().setComment("ComSet12"); + + runMode12.getSettings().put("set1", "v1"); + runMode12.getSettings().put("set2", "v2"); + + Feature feature2 = testModel.getOrCreateFeature("feature1"); + + RunMode runMode21 = feature2.getOrCreateRunMode(new String[0]); + ArtifactGroup group21 = runMode21.getOrCreateArtifactGroup(20); + group21.add(new Artifact("g3", "a3", null, null, null)); + + underTest = new TestModelProcessor(); + } + + @Test + public void testProcess() { + Model model = underTest.process(testModel); + + assertEquals("LocM1", model.getLocation()); + + Feature feature1 = model.getFeature("feature1"); + assertNotNull(feature1); + assertEquals("LocF1", feature1.getLocation()); + assertEquals("ComF1", feature1.getComment()); + assertEquals("LocFV1", feature1.getVariables().getLocation()); + assertEquals("ComFV1", feature1.getVariables().getComment()); + assertEquals("#v1", feature1.getVariables().get("k1")); + assertEquals("#v2", feature1.getVariables().get("k2")); + + RunMode runMode11 = feature1.getRunMode("rm1", "rm2"); + assertNotNull(runMode11); + assertEquals("LocRM11", runMode11.getLocation()); + + RunMode runMode12 = feature1.getRunMode(new String[] { "rm2"}); + assertNotNull(runMode12); + + ArtifactGroup group12 = runMode12.getArtifactGroup(10); + assertNotNull(group12); + assertEquals("LocRMG11", group12.getLocation()); + assertEquals("ComRMG11", group12.getComment()); + + Iterator<Artifact> artifacts = group12.iterator(); + Artifact artifact1 = artifacts.next(); + assertEquals("#g1", artifact1.getGroupId()); + assertEquals("#a1", artifact1.getArtifactId()); + assertEquals("#v1", artifact1.getVersion()); + assertEquals("#c1", artifact1.getClassifier()); + assertEquals("#t1", artifact1.getType()); + + Artifact artifact2 = artifacts.next(); + assertEquals("#g2", artifact2.getGroupId()); + assertEquals("#a2", artifact2.getArtifactId()); + assertEquals("#v2", artifact2.getVersion()); + + assertFalse(artifacts.hasNext()); + + assertEquals("LocConf12", runMode12.getConfigurations().getLocation()); + assertEquals("ComConf12", runMode12.getConfigurations().getComment()); + + Configuration conf121 = runMode12.getConfiguration("pid1", null); + assertEquals("LocConf121", conf121.getLocation()); + assertEquals("ComConf121", conf121.getComment()); + assertEquals("#v1", conf121.getProperties().get("conf1")); + assertEquals("#v2", conf121.getProperties().get("conf2")); + + Configuration conf122 = runMode12.getConfiguration("pid2", "fac2"); + assertEquals("LocConf122", conf122.getLocation()); + assertEquals("ComConf122", conf122.getComment()); + assertEquals("#v3", conf122.getProperties().get("conf3")); + + assertEquals("LocSet12", runMode12.getSettings().getLocation()); + assertEquals("ComSet12", runMode12.getSettings().getComment()); + assertEquals("#v1", runMode12.getSettings().get("set1")); + assertEquals("#v2", runMode12.getSettings().get("set2")); + + Feature feature2 = model.getFeature("feature1"); + assertNotNull(feature2); + + RunMode runMode21 = feature2.getRunMode(); + assertNotNull(runMode21); + + ArtifactGroup group21 = runMode21.getArtifactGroup(20); + assertNotNull(group21); + + artifacts = group21.iterator(); + Artifact artifact3 = artifacts.next(); + assertEquals("#g3", artifact3.getGroupId()); + assertEquals("#a3", artifact3.getArtifactId()); + assertFalse(artifacts.hasNext()); + } + + + static final class TestModelProcessor extends ModelProcessor { + + @Override + protected KeyValueMap<String> processVariables(KeyValueMap<String> variables, Feature feature) { + KeyValueMap<String> newVars = new KeyValueMap<String>(); + for (Entry<String, String> entry : variables) { + newVars.put(entry.getKey(), "#" + entry.getValue()); + } + return newVars; + } + + @Override + protected Artifact processArtifact(Artifact artifact, Feature feature, RunMode runMode) { + Artifact newArtifact = new Artifact( + "#" + artifact.getGroupId(), + "#" + artifact.getArtifactId(), + "#" + artifact.getVersion(), + "#" + artifact.getClassifier(), + "#" + artifact.getType()); + return newArtifact; + } + + @Override + protected Configuration processConfiguration(Configuration configuration, Feature feature, RunMode runMode) { + Configuration newConfig = new Configuration(configuration.getPid(), configuration.getFactoryPid()); + final Enumeration<String> i = configuration.getProperties().keys(); + while ( i.hasMoreElements() ) { + final String key = i.nextElement(); + newConfig.getProperties().put(key, "#" + configuration.getProperties().get(key)); + } + return newConfig; + } + + @Override + protected KeyValueMap<String> processSettings(KeyValueMap<String> settings, Feature feature, RunMode runMode) { + KeyValueMap<String> newSettings = new KeyValueMap<String>(); + for (Entry<String, String> entry : settings) { + newSettings.put(entry.getKey(), "#" + entry.getValue()); + } + return newSettings; + } + + } + +} Propchange: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java ------------------------------------------------------------------------------ --- svn:keywords (added) +++ svn:keywords Tue Jul 14 09:04:19 2015 @@ -0,0 +1 @@ +LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author Propchange: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain