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