SLING-8631 : Introduce state for extensions
diff --git a/pom.xml b/pom.xml
index 3c437d2..c6e1971 100644
--- a/pom.xml
+++ b/pom.xml
@@ -146,7 +146,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.feature</artifactId>
- <version>1.0.6</version>
+ <version>1.0.7-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/feature/io/json/JSONReaderBase.java b/src/main/java/org/apache/sling/feature/io/json/JSONReaderBase.java
index 5c7988a..1d113e3 100644
--- a/src/main/java/org/apache/sling/feature/io/json/JSONReaderBase.java
+++ b/src/main/java/org/apache/sling/feature/io/json/JSONReaderBase.java
@@ -52,6 +52,7 @@
import org.apache.sling.feature.Configuration;
import org.apache.sling.feature.Configurations;
import org.apache.sling.feature.Extension;
+import org.apache.sling.feature.ExtensionState;
import org.apache.sling.feature.ExtensionType;
import org.apache.sling.feature.Extensions;
import org.apache.sling.feature.MatchingRequirement;
@@ -342,24 +343,24 @@
final int sep = (postfix == null ? key.indexOf('|') : postfix.indexOf('|'));
final String name;
final String type;
- final String optional;
+ final String state;
if ( pos == -1 ) {
type = ExtensionType.ARTIFACTS.name();
if ( sep == -1 ) {
name = key;
- optional = Boolean.FALSE.toString();
+ state = ExtensionState.OPTIONAL.name();
} else {
name = key.substring(0, sep);
- optional = key.substring(sep + 1);
+ state = key.substring(sep + 1);
}
} else {
name = key.substring(0, pos);
if ( sep == -1 ) {
type = postfix;
- optional = Boolean.FALSE.toString();
+ state = ExtensionState.OPTIONAL.name();
} else {
type = postfix.substring(0, sep);
- optional = postfix.substring(sep + 1);
+ state = postfix.substring(sep + 1);
}
}
if ( JSONConstants.FEATURE_KNOWN_PROPERTIES.contains(name) ) {
@@ -370,9 +371,19 @@
}
final ExtensionType extType = ExtensionType.valueOf(type);
- final boolean opt = Boolean.valueOf(optional).booleanValue();
+ final ExtensionState extState;
+ if (ExtensionState.OPTIONAL.name().equalsIgnoreCase(state)) {
+ extState = ExtensionState.OPTIONAL;
+ } else if (ExtensionState.REQUIRED.name().equalsIgnoreCase(state)) {
+ extState = ExtensionState.REQUIRED;
+ } else if (ExtensionState.TRANSIENT.name().equalsIgnoreCase(state)) {
+ extState = ExtensionState.TRANSIENT;
+ } else {
+ final boolean opt = Boolean.valueOf(state).booleanValue();
+ extState = opt ? ExtensionState.REQUIRED : ExtensionState.OPTIONAL;
+ }
- final Extension ext = new Extension(extType, name, opt);
+ final Extension ext = new Extension(extType, name, extState);
final Object value = map.get(key);
switch ( extType ) {
case ARTIFACTS : final List<Artifact> list = new ArrayList<>();
diff --git a/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java b/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java
index b32da05..c41ddff 100644
--- a/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java
+++ b/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java
@@ -212,7 +212,18 @@
final List<Extension> extensions,
final Configurations allConfigs) {
for(final Extension ext : extensions) {
- final String key = ext.getName() + ":" + ext.getType().name() + "|" + ext.isRequired();
+ final String state;
+ switch (ext.getState()) {
+ case OPTIONAL:
+ state = "false";
+ break;
+ case REQUIRED:
+ state = "true";
+ break;
+ default:
+ state = ext.getState().name();
+ }
+ final String key = ext.getName().concat(":").concat(ext.getType().name()).concat("|").concat(state);
if ( ext.getType() == ExtensionType.JSON ) {
final JsonStructure struct;
try ( final StringReader reader = new StringReader(ext.getJSON()) ) {
diff --git a/src/test/java/org/apache/sling/feature/io/json/ArtifactsExtensions.java b/src/test/java/org/apache/sling/feature/io/json/ArtifactsExtensions.java
index bdd34f1..e2ecc54 100644
--- a/src/test/java/org/apache/sling/feature/io/json/ArtifactsExtensions.java
+++ b/src/test/java/org/apache/sling/feature/io/json/ArtifactsExtensions.java
@@ -1,13 +1,14 @@
package org.apache.sling.feature.io.json;
-import org.apache.sling.feature.ArtifactId;
-import org.apache.sling.feature.Extension;
-import org.apache.sling.feature.Extensions;
-import org.apache.sling.feature.Feature;
-
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Extension;
+import org.apache.sling.feature.ExtensionState;
+import org.apache.sling.feature.Extensions;
+import org.apache.sling.feature.Feature;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -34,7 +35,7 @@
Extension extension1 = extensions.getByName("my-extension1");
assertNotNull(extension1);
assertEquals(extension1.getName(), "my-extension1");
- assertEquals(extension1.isRequired(), false);
+ assertEquals(extension1.getState(), ExtensionState.OPTIONAL);
assertEquals(1, extension1.getArtifacts().size());
ArtifactId artifactId1 = extension1.getArtifacts().get(0).getId();
@@ -45,7 +46,7 @@
Extension extension2 = extensions.getByName("my-extension2");
assertNotNull(extension2);
assertEquals(extension2.getName(), "my-extension2");
- assertEquals(extension2.isRequired(), true);
+ assertEquals(extension2.getState(), ExtensionState.REQUIRED);
assertEquals(1, extension2.getArtifacts().size());
ArtifactId artifactId2 = extension2.getArtifacts().get(0).getId();