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-org-apache-sling-feature-cpconverter.git
The following commit(s) were added to refs/heads/master by this push:
new 24ea6fa SLING-9544 : Update to latest feature model implementation
24ea6fa is described below
commit 24ea6faf24da577b088a9453091374a8579697e5
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue Jun 23 10:23:49 2020 +0200
SLING-9544 : Update to latest feature model implementation
---
pom.xml | 55 +++++++++-------------
.../features/DefaultFeaturesManager.java | 17 +++++--
.../handlers/JsonConfigurationEntryHandler.java | 48 ++++---------------
3 files changed, 42 insertions(+), 78 deletions(-)
diff --git a/pom.xml b/pom.xml
index f14f03e..cebe7a7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.apache.sling</groupId>
<artifactId>sling</artifactId>
- <version>35</version>
+ <version>39</version>
<relativePath />
</parent>
@@ -35,17 +35,6 @@
<sling.java.version>8</sling.java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<picocli.version>3.6.0</picocli.version>
- <commons-io.version>2.6</commons-io.version>
- <org.apache.sling.feature.version>1.1.0</org.apache.sling.feature.version>
-
<org.apache.sling.feature.io.version>1.1.0</org.apache.sling.feature.io.version>
-
<org.apache.felix.converter.version>1.0.8</org.apache.felix.converter.version>
-
<org.apache.felix.configurator.version>1.0.10</org.apache.felix.configurator.version>
- <org.apache.felix.utils.version>1.11.2</org.apache.felix.utils.version>
-
<geronimo-json_1.0_spec.version>1.0-alpha-1</geronimo-json_1.0_spec.version>
- <johnzon-core.version>1.0.2</johnzon-core.version>
-
<org.osgi.annotation.versioning.version>1.0.0</org.osgi.annotation.versioning.version>
- <osgi.core.version>6.0.0</osgi.core.version>
-
<org.apache.felix.configadmin.version>1.9.16</org.apache.felix.configadmin.version>
<org.apache.jackrabbit.vault.version>3.2.8</org.apache.jackrabbit.vault.version>
<jackrabbit-api.version>2.18.4</jackrabbit-api.version>
<jackrabbit-spi-commons.version>2.18.4</jackrabbit-spi-commons.version>
@@ -114,7 +103,7 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>${commons-io.version}</version>
+ <version>2.6</version>
<scope>provided</scope>
</dependency>
@@ -124,55 +113,55 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.feature</artifactId>
- <version>${org.apache.sling.feature.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.feature.io</artifactId>
- <version>${org.apache.sling.feature.io.version}</version>
+ <version>1.2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.converter</artifactId>
- <version>${org.apache.felix.converter.version}</version>
+ <version>1.0.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.configurator</artifactId>
- <version>${org.apache.felix.configurator.version}</version>
+ <artifactId>org.apache.felix.utils</artifactId>
+ <version>1.11.4</version>
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.utils</artifactId>
- <version>${org.apache.felix.utils.version}</version>
- <scope>provided</scope>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.util.function</artifactId>
+ <version>1.0.0</version>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-json_1.0_spec</artifactId>
- <version>${geronimo-json_1.0_spec.version}</version>
+ <artifactId>geronimo-json_1.1_spec</artifactId>
+ <version>1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.johnzon</groupId>
<artifactId>johnzon-core</artifactId>
- <version>${johnzon-core.version}</version>
+ <version>1.2.3</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.cm.json</artifactId>
+ <version>1.0.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.annotation.versioning</artifactId>
- <version>${org.osgi.annotation.versioning.version}</version>
+ <version>1.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>osgi.core</artifactId>
- <version>${osgi.core.version}</version>
+ <version>7.0.0</version>
<scope>compile</scope>
</dependency>
@@ -182,7 +171,7 @@
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.configadmin</artifactId>
- <version>${org.apache.felix.configadmin.version}</version>
+ <version>1.9.16</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git
a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
index ecf3b15..dc8c95d 100644
---
a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
+++
b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
@@ -95,6 +95,7 @@ public class DefaultFeaturesManager implements
FeaturesManager {
this.properties = properties;
}
+ @Override
public void init(String groupId, String artifactId, String version) {
targetFeature = new Feature(new ArtifactId(groupId, artifactId,
version, null, SLING_OSGI_FEATURE_TILE_TYPE));
@@ -105,7 +106,7 @@ public class DefaultFeaturesManager implements
FeaturesManager {
private void initAPIRegions(Feature feature) {
if (targetAPIRegions.size() > 0) {
- Extension apiRegions = new Extension(ExtensionType.JSON,
"api-regions", false);
+ Extension apiRegions = new Extension(ExtensionType.JSON,
"api-regions", ExtensionState.OPTIONAL);
StringBuilder jsonBuilder = new StringBuilder("[");
for (String apiRegion : targetAPIRegions) {
if (jsonBuilder.length() > 1) {
@@ -121,10 +122,12 @@ public class DefaultFeaturesManager implements
FeaturesManager {
}
}
+ @Override
public Feature getTargetFeature() {
return targetFeature;
}
+ @Override
public Feature getRunMode(String runMode) {
if (getTargetFeature() == null) {
throw new IllegalStateException("Target Feature not initialized
yet, please make sure convert() method was invoked first.");
@@ -143,10 +146,12 @@ public class DefaultFeaturesManager implements
FeaturesManager {
});
}
+ @Override
public void addArtifact(String runMode, ArtifactId id) {
addArtifact(runMode, id, null);
}
+ @Override
public void addArtifact(String runMode, ArtifactId id, Integer startOrder)
{
requireNonNull(id, "Artifact can not be attached to a feature without
specifying a valid ArtifactId.");
@@ -160,7 +165,7 @@ public class DefaultFeaturesManager implements
FeaturesManager {
Extension extension = extensions.getByName(CONTENT_PACKAGES);
if (extension == null) {
- extension = new Extension(ExtensionType.ARTIFACTS,
CONTENT_PACKAGES, true);
+ extension = new Extension(ExtensionType.ARTIFACTS,
CONTENT_PACKAGES, ExtensionState.REQUIRED);
extensions.add(extension);
}
@@ -191,6 +196,7 @@ public class DefaultFeaturesManager implements
FeaturesManager {
return newId;
}
+ @Override
public void addConfiguration(String runMode, String pid,
Dictionary<String, Object> configurationProperties) {
Feature feature = getRunMode(runMode);
Configuration configuration =
feature.getConfigurations().getConfiguration(pid);
@@ -219,6 +225,7 @@ public class DefaultFeaturesManager implements
FeaturesManager {
}
}
+ @Override
public void serialize() throws Exception {
RunmodeMapper runmodeMapper =
RunmodeMapper.open(featureModelsOutputDirectory);
@@ -279,13 +286,13 @@ public class DefaultFeaturesManager implements
FeaturesManager {
targetAPIRegions.addAll(regions);
return this;
}
-
+
@Override
public void addOrAppendRepoInitExtension(String text, String runMode) {
-
+
logger.info("Adding/Appending RepoInitExtension for runMode: {}",
runMode );
Extension repoInitExtension =
getRunMode(runMode).getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT);
-
+
if (repoInitExtension == null) {
repoInitExtension = new Extension(ExtensionType.TEXT,
Extension.EXTENSION_NAME_REPOINIT, ExtensionState.REQUIRED);
getRunMode(runMode).getExtensions().add(repoInitExtension);
diff --git
a/src/main/java/org/apache/sling/feature/cpconverter/handlers/JsonConfigurationEntryHandler.java
b/src/main/java/org/apache/sling/feature/cpconverter/handlers/JsonConfigurationEntryHandler.java
index 7ddaf4f..a3f095a 100644
---
a/src/main/java/org/apache/sling/feature/cpconverter/handlers/JsonConfigurationEntryHandler.java
+++
b/src/main/java/org/apache/sling/feature/cpconverter/handlers/JsonConfigurationEntryHandler.java
@@ -16,18 +16,13 @@
*/
package org.apache.sling.feature.cpconverter.handlers;
-import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.net.URL;
+import java.nio.charset.StandardCharsets;
import java.util.Dictionary;
+import java.util.Hashtable;
-import org.apache.commons.io.IOUtils;
-import org.apache.felix.configurator.impl.json.JSONUtil;
-import org.apache.felix.configurator.impl.json.TypeConverter;
-import org.apache.felix.configurator.impl.model.ConfigurationFile;
+import org.apache.felix.cm.json.Configurations;
public final class JsonConfigurationEntryHandler extends
AbstractConfigurationEntryHandler {
@@ -37,39 +32,12 @@ public final class JsonConfigurationEntryHandler extends
AbstractConfigurationEn
@Override
protected Dictionary<String, Object> parseConfiguration(String name,
InputStream input) throws Exception {
- StringBuilder content = new StringBuilder()
- .append("{ \"")
- .append(name)
- .append("\" : ");
- try (Reader reader = new InputStreamReader(input); StringWriter writer
= new StringWriter()) {
- IOUtils.copy(reader, writer);
- content.append(writer.toString());
- }
- content.append("}");
+ final Hashtable<String, Object> props = Configurations.buildReader()
+ .withIdentifier(name)
+ .build(new InputStreamReader(input, StandardCharsets.UTF_8))
+ .readConfiguration();
- JSONUtil.Report report = new JSONUtil.Report();
- ConfigurationFile configuration = JSONUtil.readJSON(new
TypeConverter(null),
- name,
- new
URL("file://content-package/" + name),
- 0,
- content.toString(),
- report);
-
- if (!report.errors.isEmpty() || !report.warnings.isEmpty()) {
- final StringBuilder builder = new StringBuilder();
- builder.append("Errors in configuration:");
- for (final String w : report.warnings) {
- builder.append("\n");
- builder.append(w);
- }
- for (final String e : report.errors) {
- builder.append("\n");
- builder.append(e);
- }
- throw new IOException(builder.toString());
- }
-
- return configuration.getConfigurations().get(0).getProperties();
+ return props;
}
}