Update javadocs and add test for api behind toggle
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiExport.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiExport.java
index 303a5c3..8aab4cb 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiExport.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiExport.java
@@ -32,6 +32,8 @@
/**
* Describes an exported package.
+ *
+ * This class is not thread safe.
*/
public class ApiExport implements Comparable<ApiExport> {
@@ -45,9 +47,9 @@
private final String name;
- private volatile String toggle;
+ private String toggle;
- private volatile ArtifactId previous;
+ private ArtifactId previous;
private final Map<String, String> properties = new HashMap<>();
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegion.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegion.java
index 2fd5898..6e9d328 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegion.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegion.java
@@ -29,7 +29,9 @@
import org.apache.sling.feature.ArtifactId;
/**
- * Describes an api region
+ * Describes an api region for Java API
+ *
+ * This class is not thread safe.
*/
public class ApiRegion {
@@ -44,7 +46,7 @@
private final String name;
- private volatile ApiRegion parent;
+ private ApiRegion parent;
/**
* Create a new named region
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java
index c3c08cb..492f9cc 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java
@@ -48,7 +48,9 @@
import org.apache.sling.feature.Feature;
/**
- * An api regions configuration
+ * Configuration of API regions for Java API.
+ *
+ * This class is not thread safe.
*/
public class ApiRegions {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/Deprecation.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/Deprecation.java
index 7e4348c..edbd80d 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/Deprecation.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/Deprecation.java
@@ -24,6 +24,7 @@
* Deprecation state for a package
*
* Either the whole package is deprecated or some members.
+ * This class is not thread safe.
* @since 1.1
*/
public class Deprecation {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/DeprecationInfo.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/DeprecationInfo.java
index db844d0..c46b7f9 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/DeprecationInfo.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/DeprecationInfo.java
@@ -20,13 +20,14 @@
/**
* Deprecation info for a package or member.
+ * This class is not thread safe.
* @since 1.1
*/
public class DeprecationInfo {
private final String message;
- private volatile String since;
+ private String since;
/**
* Create a new info
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/JDKDeprecationExtension.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/JDKDeprecationExtension.java
index 7ee11ed..316b6d5 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/JDKDeprecationExtension.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/JDKDeprecationExtension.java
@@ -34,6 +34,7 @@
/**
* Extension to hold information about deprecated JDK API
+ * This class is not thread safe.
* @since 1.1.0
*/
public class JDKDeprecationExtension {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java
index 31210f8..8a0b984 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java
@@ -30,6 +30,7 @@
/**
* Abstract class used by all entities which allow additional attributes to be stored.
+ * This class is not thread safe.
*/
public abstract class AttributeableEntity {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java
index fd30a5f..4e7eb9b 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java
@@ -28,6 +28,7 @@
/**
* A configurable entity has properties
+ * This class is not thread safe.
*/
public abstract class ConfigurableEntity extends DescribableEntity {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
index 6fc58c3..a24d23d 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
@@ -38,6 +38,7 @@
* A configuration api describes the set of supported OSGi
* configurations and framework properties. This object can be
* stored as an extension inside a feature model.
+ * This class is not thread safe.
*/
public class ConfigurationApi extends AttributeableEntity {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationDescription.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationDescription.java
index d5b476d..03d3fae 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationDescription.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationDescription.java
@@ -18,6 +18,7 @@
/**
* A description of an OSGi configuration
+ * This class is not thread safe.
*/
public class ConfigurationDescription extends ConfigurableEntity {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java
index 88d1c07..9172515 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java
@@ -25,6 +25,7 @@
/**
* Abstract class for all describable entities, having an optional title,
* description and deprecation info.
+ * This class is not thread safe.
*/
public abstract class DescribableEntity extends AttributeableEntity {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
index da230cc..6a36cf9 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
@@ -31,6 +31,7 @@
/**
* Description of an OSGi factory configuration
+ * This class is not thread safe.
*/
public class FactoryConfigurationDescription extends ConfigurableEntity {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FrameworkPropertyDescription.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FrameworkPropertyDescription.java
index 0efc303..6f454b6 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FrameworkPropertyDescription.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FrameworkPropertyDescription.java
@@ -18,6 +18,7 @@
/**
* A framework property description
+ * This class is not thread safe.
*/
public class FrameworkPropertyDescription extends PropertyDescription {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java
index 4901c5e..7df9908 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java
@@ -24,6 +24,7 @@
/**
* Option for a property value
+ * This class is not thread safe.
*/
public class Option extends DescribableEntity {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
index 584db9c..93b9e19 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
@@ -30,6 +30,7 @@
/**
* Instances of this class represent a single configuration property
+ * This class is not thread safe.
*/
public class PropertyDescription extends DescribableEntity {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java
index 326efb8..7106cb6 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java
@@ -26,6 +26,7 @@
/**
* A numerical value range
+ * This class is not thread safe.
*/
public class Range extends AttributeableEntity {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidationResult.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidationResult.java
index 24595b5..7066ff1 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidationResult.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidationResult.java
@@ -23,6 +23,7 @@
/**
* A configuration validation result is returned by the {@code ConfigurationValidator}.
+ * This class is not thread safe.
*/
public class ConfigurationValidationResult {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidationResult.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidationResult.java
index d757845..eb61643 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidationResult.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidationResult.java
@@ -21,6 +21,7 @@
/**
* Validation result for a feature
+ * This class is not thread safe.
*/
public class FeatureValidationResult {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidationResult.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidationResult.java
index 1de03d4..e5bdbed 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidationResult.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidationResult.java
@@ -21,6 +21,7 @@
/**
* Validation result for a property
+ * This class is not thread safe.
*/
public class PropertyValidationResult {
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiRegionsTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiRegionsTest.java
index 1f4e64b..58ce56a 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiRegionsTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiRegionsTest.java
@@ -28,6 +28,7 @@
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
+import java.util.Iterator;
import javax.json.Json;
import javax.json.JsonArray;
@@ -186,6 +187,34 @@
final JsonArray orig = reader.readArray();
assertEquals(orig, array);
}
-
+ }
+
+ @Test public void testToggles() throws Exception {
+ final String json = readJSON("apis-toggles");
+
+ final ApiRegions regions = ApiRegions.parse(json);
+ assertNotNull(regions);
+
+ assertEquals(1, regions.listRegions().size());
+
+ final ApiRegion global = regions.listRegions().get(0);
+ assertEquals("global", global.getName());
+
+ assertEquals(2, global.listExports().size());
+
+ final Iterator<ApiExport> iter = global.listExports().iterator();
+ final ApiExport exp1 = iter.next();
+ assertEquals("org.apache.sling.global", exp1.getName());
+ assertEquals("sling_enabled", exp1.getToggle());
+ assertNull(exp1.getPrevious());
+
+ final ApiExport exp2 = iter.next();
+ assertEquals("org.apache.felix.global", exp2.getName());
+ assertEquals("global_enabled", exp2.getToggle());
+ assertEquals(ArtifactId.parse("org.apache.felix:api:1.1"), exp2.getPrevious());
+
+ // create json and parse
+ final ApiRegions regions2 = ApiRegions.parse(regions.toJSONArray());
+ assertEquals(regions, regions2);
}
}
diff --git a/src/test/resources/json/apis-toggles.json b/src/test/resources/json/apis-toggles.json
new file mode 100644
index 0000000..40baf62
--- /dev/null
+++ b/src/test/resources/json/apis-toggles.json
@@ -0,0 +1,16 @@
+[
+ {
+ "name" : "global",
+ "exports" : [
+ {
+ "name" : "org.apache.sling.global",
+ "toggle" : "sling_enabled"
+ },
+ {
+ "name" : "org.apache.felix.global",
+ "toggle" : "global_enabled",
+ "previous" : "org.apache.felix:api:1.1"
+ }
+ ]
+ }
+ ]
\ No newline at end of file