You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2018/11/22 17:41:04 UTC
[sling-slingfeature-maven-plugin] branch master updated: SLING-8128
: Consistent ordering of sections when merging features
This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-slingfeature-maven-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new 35eb3f4 SLING-8128 : Consistent ordering of sections when merging features
35eb3f4 is described below
commit 35eb3f428b3c00dbd5f9395289bffb7aa619bbe9
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Nov 22 18:40:56 2018 +0100
SLING-8128 : Consistent ordering of sections when merging features
---
.../maven/mojos/AbstractIncludingFeatureMojo.java | 116 +++++++++------------
.../sling/feature/maven/mojos/Aggregate.java | 3 +-
.../maven/mojos/FeatureSelectionConfig.java | 47 +++++----
.../sling/feature/maven/mojos/Repository.java | 3 +-
.../org/apache/sling/feature/maven/mojos/Scan.java | 3 +-
5 files changed, 81 insertions(+), 91 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/AbstractIncludingFeatureMojo.java b/src/main/java/org/apache/sling/feature/maven/mojos/AbstractIncludingFeatureMojo.java
index 33ae4cd..2b59435 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/AbstractIncludingFeatureMojo.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/AbstractIncludingFeatureMojo.java
@@ -26,7 +26,6 @@ import java.util.TreeMap;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.model.Dependency;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Component;
import org.apache.sling.feature.ArtifactId;
@@ -44,15 +43,23 @@ public abstract class AbstractIncludingFeatureMojo extends AbstractFeatureMojo {
protected Map<String, Feature> getSelectedFeatures(final FeatureSelectionConfig config)
throws MojoExecutionException {
- final Map<String, Feature> selection = new LinkedHashMap<>();
-
- selectFeatureFiles(config, selection);
-
- selectFeatureClassifiers(config, selection);
-
- selectFeatureArtifacts(config, selection);
+ final Map<String, Feature> result = new LinkedHashMap<>();
+
+ for(final FeatureSelectionConfig.Selection selection : config.getSelections()) {
+ switch ( selection.type ) {
+ case FILE_INCLUDE:
+ selectFeatureFiles(selection.instruction, config.getFilesExcludes(), result);
+ break;
+ case AGGREGATE_CLASSIFIER:
+ selectFeatureClassifier(selection.instruction, result);
+ break;
+ case ARTIFACT:
+ selectFeatureArtifact(selection.instruction, result);
+ break;
+ }
+ }
- return selection;
+ return result;
}
protected Map<String, Feature> selectAllFeatureFiles() throws MojoExecutionException {
@@ -69,76 +76,57 @@ public abstract class AbstractIncludingFeatureMojo extends AbstractFeatureMojo {
return this.getSelectedFeatures(config);
}
- private void selectFeatureClassifiers(final FeatureSelectionConfig config, final Map<String, Feature> selection)
+ private void selectFeatureClassifier(final String selection, final Map<String, Feature> result)
throws MojoExecutionException {
final Map<String, Feature> projectFeatures = ProjectHelper.getAssembledFeatures(this.project);
- boolean includeAll = false;
- for (final String c : config.getIncludeClassifiers()) {
- if ("*".equals(c)) {
- includeAll = true;
- }
- }
- if (includeAll && config.getIncludeClassifiers().size() > 1) {
- throw new MojoExecutionException("Match all (*) and additional classifiers are specified.");
- }
+ boolean includeAll = "*".equals(selection);
for (final Map.Entry<String, Feature> entry : projectFeatures.entrySet()) {
if (ProjectHelper.isAggregate(entry.getKey())) {
final String classifier = entry.getValue().getId().getClassifier();
boolean include = includeAll;
if (!include) {
- for (final String c : config.getIncludeClassifiers()) {
- if (c.trim().length() == 0 && classifier == null) {
- include = true;
- } else if (c.equals(classifier)) {
- include = true;
- }
+ if (selection.trim().length() == 0 && classifier == null) {
+ include = true;
+ } else if (selection.equals(classifier)) {
+ include = true;
}
}
if (include) {
- selection.put(entry.getKey(), entry.getValue());
+ result.put(entry.getKey(), entry.getValue());
}
}
}
}
- private void selectFeatureFiles(final FeatureSelectionConfig config, final Map<String, Feature> selection)
+ private void selectFeatureFiles(final String include, final List<String> excludes,
+ final Map<String, Feature> result)
throws MojoExecutionException {
- // neither includes nor excludes - don't select any file
- if (config.getFilesIncludes().isEmpty() && config.getFilesExcludes().isEmpty()) {
- return;
- }
final Map<String, Feature> projectFeatures = ProjectHelper.getAssembledFeatures(this.project);
final String prefix = this.features.toPath().normalize().toFile().getAbsolutePath().concat(File.separator);
- if (config.getFilesIncludes().isEmpty()) {
- final FeatureScanner scanner = new FeatureScanner(projectFeatures, prefix);
- if (!config.getFilesExcludes().isEmpty()) {
- scanner.setExcludes(config.getFilesExcludes().toArray(new String[config.getFilesExcludes().size()]));
- }
- scanner.scan();
- selection.putAll(scanner.getIncluded());
- } else {
- for (final String include : config.getFilesIncludes()) {
- final FeatureScanner scanner = new FeatureScanner(projectFeatures, prefix);
- if (!config.getFilesExcludes().isEmpty()) {
- scanner.setExcludes(config.getFilesExcludes().toArray(new String[config.getFilesExcludes().size()]));
- }
- scanner.setIncludes(new String[] { include });
- scanner.scan();
+ final FeatureScanner scanner = new FeatureScanner(projectFeatures, prefix);
+ if (!excludes.isEmpty()) {
+ scanner.setExcludes(excludes.toArray(new String[excludes.size()]));
+ }
+ scanner.setIncludes(new String[] { include });
+ scanner.scan();
- if (!include.contains("*") && scanner.getIncluded().isEmpty()) {
- throw new MojoExecutionException("FeatureInclude " + include + " not found.");
- }
- selection.putAll(scanner.getIncluded());
+ if (!include.contains("*") && scanner.getIncluded().isEmpty()) {
+ throw new MojoExecutionException("FeatureInclude " + include + " not found.");
+ }
+ for (Map.Entry<String, Feature> entry : scanner.getIncluded().entrySet()) {
+ if (!result.containsKey(entry.getKey())) {
+ result.put(entry.getKey(), entry.getValue());
}
}
- if (!config.getFilesExcludes().isEmpty()) {
- for (final String exclude : config.getFilesExcludes()) {
+
+ if (!excludes.isEmpty()) {
+ for (final String exclude : excludes) {
if (!exclude.contains("*")) {
- final FeatureScanner scanner = new FeatureScanner(projectFeatures, prefix);
- scanner.setIncludes(new String[] { exclude });
- scanner.scan();
- if (scanner.getIncluded().isEmpty()) {
+ final FeatureScanner excludeScanner = new FeatureScanner(projectFeatures, prefix);
+ excludeScanner.setIncludes(new String[] { exclude });
+ excludeScanner.scan();
+ if (excludeScanner.getIncluded().isEmpty()) {
throw new MojoExecutionException("FeatureExclude " + exclude + " not found.");
}
}
@@ -146,18 +134,16 @@ public abstract class AbstractIncludingFeatureMojo extends AbstractFeatureMojo {
}
}
- private void selectFeatureArtifacts(final FeatureSelectionConfig config, final Map<String, Feature> selection)
+ private void selectFeatureArtifact(final String artifactId, final Map<String, Feature> result)
throws MojoExecutionException {
- for (final Dependency dep : config.getIncludeArtifacts()) {
- final ArtifactId id = ProjectHelper.toArtifactId(dep);
- if (ProjectHelper.isLocalProjectArtifact(this.project, id)) {
- throw new MojoExecutionException(
+ final ArtifactId id = ArtifactId.parse(artifactId);
+ if (ProjectHelper.isLocalProjectArtifact(this.project, id)) {
+ throw new MojoExecutionException(
"FeatureArtifact configuration is used to select a local feature: " + id.toMvnId());
- }
- final Feature feature = ProjectHelper.getOrResolveFeature(this.project, this.mavenSession,
- this.artifactHandlerManager, this.artifactResolver, id);
- selection.put(id.toMvnUrl(), feature);
}
+ final Feature feature = ProjectHelper.getOrResolveFeature(this.project, this.mavenSession,
+ this.artifactHandlerManager, this.artifactResolver, id);
+ result.put(id.toMvnUrl(), feature);
}
public static class FeatureScanner extends AbstractScanner {
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/Aggregate.java b/src/main/java/org/apache/sling/feature/maven/mojos/Aggregate.java
index 9fa2e0a..e012d24 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/Aggregate.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/Aggregate.java
@@ -60,8 +60,7 @@ public class Aggregate extends FeatureSelectionConfig {
@Override
public String toString() {
- return "Aggregate [filesIncludes=" + getFilesIncludes() + ", filesExcludes=" + getFilesExcludes()
- + ", includeArtifacts=" + getIncludeArtifacts() + ", includeClassifiers=" + getIncludeClassifiers()
+ return "Aggregate [selection=" + getSelections() + ", filesExcludes=" + getFilesExcludes()
+ ", classifier=" + classifier
+ ", markAsFinal=" + markAsFinal + ", markAsComplete=" + markAsComplete + ", title=" + title
+ ", description=" + description + ", vendor=" + vendor + ", artifactsOverrides=" + artifactsOverrides
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/FeatureSelectionConfig.java b/src/main/java/org/apache/sling/feature/maven/mojos/FeatureSelectionConfig.java
index 2d860bb..253cc72 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/FeatureSelectionConfig.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/FeatureSelectionConfig.java
@@ -20,55 +20,62 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.maven.model.Dependency;
+import org.apache.sling.feature.maven.ProjectHelper;
public class FeatureSelectionConfig {
- private List<String> filesIncludes = new ArrayList<>();
+ enum SelectionType {
+ FILE_INCLUDE, AGGREGATE_CLASSIFIER, ARTIFACT
+ }
+
+ static class Selection {
+ public final SelectionType type;
+ public final String instruction;
- private List<String> filesExcludes = new ArrayList<>();
+ public Selection(final SelectionType type, final String instruction) {
+ this.type = type;
+ this.instruction = instruction;
+ }
+
+ @Override
+ public String toString() {
+ return "Selection [type=" + type + ", instruction=" + instruction + "]";
+ }
+ }
- private List<Dependency> includeArtifacts = new ArrayList<>();
+ private final List<Selection> selections = new ArrayList<>();
- private List<String> includeClassifiers = new ArrayList<>();
+ private final List<String> filesExcludes = new ArrayList<>();
public FeatureSelectionConfig() {
}
public void setFilesInclude(final String val) {
- filesIncludes.add(val);
+ selections.add(new Selection(SelectionType.FILE_INCLUDE, val));
}
public void setFilesExclude(final String val) {
- filesExcludes.add(val);
+ this.filesExcludes.add(val);
}
public void setIncludeArtifact(final Dependency a) {
- includeArtifacts.add(a);
+ selections.add(new Selection(SelectionType.ARTIFACT, ProjectHelper.toArtifactId(a).toMvnId()));
}
public void setIncludeClassifier(final String classifier) {
- includeClassifiers.add(classifier);
- }
-
- public List<String> getFilesIncludes() {
- return this.filesIncludes;
+ selections.add(new Selection(SelectionType.AGGREGATE_CLASSIFIER, classifier));
}
public List<String> getFilesExcludes() {
return this.filesExcludes;
}
- public List<String> getIncludeClassifiers() {
- return this.includeClassifiers;
- }
-
- public List<Dependency> getIncludeArtifacts() {
- return this.includeArtifacts;
+ public List<Selection> getSelections() {
+ return this.selections;
}
@Override
public String toString() {
- return "FeatureSelectionConfig [filesIncludes=" + filesIncludes + ", filesExcludes=" + filesExcludes
- + ", includeArtifacts=" + includeArtifacts + ", includeClassifiers=" + includeClassifiers + "]";
+ return "FeatureSelectionConfig [selections=" + selections + ", filesExcludes=" + filesExcludes + "]";
}
}
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/Repository.java b/src/main/java/org/apache/sling/feature/maven/mojos/Repository.java
index c7ed966..74894f8 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/Repository.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/Repository.java
@@ -41,8 +41,7 @@ public class Repository extends FeatureSelectionConfig {
@Override
public String toString() {
- return "Repository [filesIncludes=" + getFilesIncludes() + ", filesExcludes=" + getFilesExcludes()
- + ", includeArtifacts=" + getIncludeArtifacts() + ", includeClassifiers=" + getIncludeClassifiers()
+ return "Repository [selections=" + getSelections() + ", filesExcludes=" + getFilesExcludes()
+ ", embedArtifacts="
+ embedArtifacts + ", repositoryDir="
+ repositoryDir + "]";
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/Scan.java b/src/main/java/org/apache/sling/feature/maven/mojos/Scan.java
index 0936996..c73c9ee 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/Scan.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/Scan.java
@@ -69,8 +69,7 @@ public class Scan extends FeatureSelectionConfig {
@Override
public String toString() {
- return "Scan [filesIncludes=" + getFilesIncludes() + ", filesExcludes=" + getFilesExcludes()
- + ", includeArtifacts=" + getIncludeArtifacts() + ", includeClassifiers=" + getIncludeClassifiers()
+ return "Scan [selections=" + getSelections() + ", filesExcludes=" + getFilesExcludes()
+ "includeTasks=" + includeTasks
+ ", excludeTasks=" + excludeTasks + ", contextConfiguration=" + taskConfiguration + ", framework="
+ ProjectHelper.toString(framework) + "]";