This is an automated email from the ASF dual-hosted git repository.

davidb pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-apiregions.git


The following commit(s) were added to refs/heads/master by this push:
     new 3632b86  Close JSON Readers
3632b86 is described below

commit 3632b86676398b7e4a454347bb94080347eacf6e
Author: David Bosschaert <[email protected]>
AuthorDate: Fri Feb 8 16:21:10 2019 -0800

    Close JSON Readers
---
 .../apiregions/APIRegionMergeHandler.java          | 162 +++++++++++----------
 .../apiregions/BundleArtifactFeatureHandler.java   |  69 ++++-----
 2 files changed, 117 insertions(+), 114 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandler.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandler.java
index 836b197..b055807 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandler.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandler.java
@@ -65,105 +65,107 @@ public class APIRegionMergeHandler implements 
MergeHandler {
 
         storeBundleOrigins(context, source, target);
 
-        JsonReader srcJR = Json.createReader(new 
StringReader(sourceEx.getJSON()));
-        JsonArray srcJA = srcJR.readArray();
-
-        Map<String, Map<String, Object>> srcRegions = new LinkedHashMap<>();
-        for (int i=0; i < srcJA.size(); i++) {
-            String regionName = null;
-            Map<String, Object> region = new LinkedHashMap<>();
-            JsonObject jo = srcJA.getJsonObject(i);
-            for (Map.Entry<String, JsonValue> entry : jo.entrySet()) {
-                Object val;
-                switch (entry.getKey()) {
-                case EXPORTS_KEY:
-                    val = readJsonArray((JsonArray) entry.getValue());
-                    break;
-                default:
-                    val = ((JsonString) entry.getValue()).getString();
-                    if (NAME_KEY.equals(entry.getKey())) {
-                        regionName = val.toString();
+        try (JsonReader srcJR = Json.createReader(new 
StringReader(sourceEx.getJSON()))) {
+            JsonArray srcJA = srcJR.readArray();
+
+            Map<String, Map<String, Object>> srcRegions = new 
LinkedHashMap<>();
+            for (int i=0; i < srcJA.size(); i++) {
+                String regionName = null;
+                Map<String, Object> region = new LinkedHashMap<>();
+                JsonObject jo = srcJA.getJsonObject(i);
+                for (Map.Entry<String, JsonValue> entry : jo.entrySet()) {
+                    Object val;
+                    switch (entry.getKey()) {
+                    case EXPORTS_KEY:
+                        val = readJsonArray((JsonArray) entry.getValue());
+                        break;
+                    default:
+                        val = ((JsonString) entry.getValue()).getString();
+                        if (NAME_KEY.equals(entry.getKey())) {
+                            regionName = val.toString();
+                        }
+                        break;
                     }
-                    break;
+                    region.put(entry.getKey(), val);
                 }
-                region.put(entry.getKey(), val);
-            }
-            if (regionName == null) {
-                throw new IllegalStateException("No region name specified: " + 
sourceEx.getJSON());
+                if (regionName == null) {
+                    throw new IllegalStateException("No region name specified: 
" + sourceEx.getJSON());
+                }
+                srcRegions.put(regionName, region);
             }
-            srcRegions.put(regionName, region);
-        }
 
-        storeRegionOrigins(context, source, target, srcRegions.keySet());
+            storeRegionOrigins(context, source, target, srcRegions.keySet());
 
-        JsonArray tgtJA;
-        if (targetEx != null) {
-            JsonReader tgtJR = Json.createReader(new 
StringReader(targetEx.getJSON()));
-            tgtJA = tgtJR.readArray();
-        } else {
-            targetEx = new Extension(sourceEx.getType(), sourceEx.getName(), 
sourceEx.isRequired());
-            target.getExtensions().add(targetEx);
+            JsonArray tgtJA;
+            if (targetEx != null) {
+                try (JsonReader tgtJR = Json.createReader(new 
StringReader(targetEx.getJSON()))) {
+                    tgtJA = tgtJR.readArray();
+                }
+            } else {
+                targetEx = new Extension(sourceEx.getType(), 
sourceEx.getName(), sourceEx.isRequired());
+                target.getExtensions().add(targetEx);
 
-            tgtJA = Json.createArrayBuilder().build();
-        }
+                tgtJA = Json.createArrayBuilder().build();
+            }
 
-        StringWriter sw = new StringWriter();
-        JsonGenerator gen = Json.createGenerator(sw);
-        gen.writeStartArray();
-        for (JsonValue jv : tgtJA) {
-            if (jv instanceof JsonObject) {
-                JsonObject jo = (JsonObject) jv;
-                Map<String, Object> srcRegion = 
srcRegions.remove(jo.getString(NAME_KEY));
-                if (srcRegion != null) {
-                    gen.writeStartObject();
-                    for (Map.Entry<String, JsonValue> entry : jo.entrySet()) {
-                        Object sp = srcRegion.get(entry.getKey());
-                        if (EXPORTS_KEY.equals(entry.getKey()) && sp 
instanceof List) {
-                            List<String> tgtPkgs = readJsonArray((JsonArray) 
entry.getValue());
-                            @SuppressWarnings("unchecked")
-                            List<String> srcPkgs = (List<String>) sp;
-                            for (String srcPkg : srcPkgs) {
-                                if (!tgtPkgs.contains(srcPkg)) {
-                                    tgtPkgs.add(srcPkg);
+            StringWriter sw = new StringWriter();
+            JsonGenerator gen = Json.createGenerator(sw);
+            gen.writeStartArray();
+            for (JsonValue jv : tgtJA) {
+                if (jv instanceof JsonObject) {
+                    JsonObject jo = (JsonObject) jv;
+                    Map<String, Object> srcRegion = 
srcRegions.remove(jo.getString(NAME_KEY));
+                    if (srcRegion != null) {
+                        gen.writeStartObject();
+                        for (Map.Entry<String, JsonValue> entry : 
jo.entrySet()) {
+                            Object sp = srcRegion.get(entry.getKey());
+                            if (EXPORTS_KEY.equals(entry.getKey()) && sp 
instanceof List) {
+                                List<String> tgtPkgs = 
readJsonArray((JsonArray) entry.getValue());
+                                @SuppressWarnings("unchecked")
+                                List<String> srcPkgs = (List<String>) sp;
+                                for (String srcPkg : srcPkgs) {
+                                    if (!tgtPkgs.contains(srcPkg)) {
+                                        tgtPkgs.add(srcPkg);
+                                    }
                                 }
+                                gen.writeStartArray(entry.getKey());
+                                for (String p : tgtPkgs) {
+                                    gen.write(p);
+                                }
+                                gen.writeEnd();
+                            } else {
+                                gen.write(entry.getKey(), entry.getValue());
                             }
-                            gen.writeStartArray(entry.getKey());
-                            for (String p : tgtPkgs) {
-                                gen.write(p);
-                            }
-                            gen.writeEnd();
-                        } else {
-                            gen.write(entry.getKey(), entry.getValue());
                         }
+                        gen.writeEnd();
+                    } else {
+                        gen.write(jv);
                     }
-                    gen.writeEnd();
-                } else {
-                    gen.write(jv);
                 }
             }
-        }
 
-        // If there are any remaining regions in the src extension, process 
them now
-        for (Map<String, Object> region : srcRegions.values()) {
-            gen.writeStartObject();
-            for (Map.Entry<String, Object> entry : region.entrySet()) {
-                if (entry.getValue() instanceof Collection) {
-                    gen.writeStartArray(entry.getKey());
-                    for (Object o : (Collection<?>) entry.getValue()) {
-                        gen.write(o.toString());
+            // If there are any remaining regions in the src extension, 
process them now
+            for (Map<String, Object> region : srcRegions.values()) {
+                gen.writeStartObject();
+                for (Map.Entry<String, Object> entry : region.entrySet()) {
+                    if (entry.getValue() instanceof Collection) {
+                        gen.writeStartArray(entry.getKey());
+                        for (Object o : (Collection<?>) entry.getValue()) {
+                            gen.write(o.toString());
+                        }
+                        gen.writeEnd();
+                    } else {
+                        gen.write(entry.getKey(), entry.getValue().toString());
                     }
-                    gen.writeEnd();
-                } else {
-                    gen.write(entry.getKey(), entry.getValue().toString());
                 }
+                gen.writeEnd();
             }
-            gen.writeEnd();
-        }
 
-        gen.writeEnd();
-        gen.close();
+            gen.writeEnd();
+            gen.close();
 
-        targetEx.setJSON(sw.toString());
+            targetEx.setJSON(sw.toString());
+        }
     }
 
     private void storeRegionOrigins(HandlerContext context, Feature source, 
Feature target, Set<String> regions) {
diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/BundleArtifactFeatureHandler.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/BundleArtifactFeatureHandler.java
index 58b7615..b934837 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/BundleArtifactFeatureHandler.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/BundleArtifactFeatureHandler.java
@@ -75,45 +75,46 @@ public class BundleArtifactFeatureHandler extends 
AbstractHandler implements Pos
     }
 
     private void writeFeatureToRegionAndPackageMap(HandlerContext context, 
Feature feature, Extension extension) throws IOException {
-        JsonReader jr = Json.createReader(new 
StringReader(extension.getJSON()));
-        JsonArray ja = jr.readArray();
-
-        File featuresFile = getFeatureDataFile(context, feature, 
"features.properties");
-        File regionsFile = getFeatureDataFile(context, feature, 
"regions.properties");
-        Properties frMap = loadProperties(featuresFile);
-        Properties rpMap = loadProperties(regionsFile);
-
-        for (JsonValue jv : ja) {
-            if (jv instanceof JsonObject) {
-                JsonObject jo = (JsonObject) jv;
-                String fid = feature.getId().toMvnId();
-
-                Set<String> regionSet = new HashSet<>();
-                String regions = frMap.getProperty(fid);
-                if (regions != null) {
-                    regionSet.addAll(Arrays.asList(regions.split(",")));
-                }
-                String region = jo.getString(NAME_KEY);
-                regionSet.add(region);
+        try (JsonReader jr = Json.createReader(new 
StringReader(extension.getJSON()))) {
+            JsonArray ja = jr.readArray();
+
+            File featuresFile = getFeatureDataFile(context, feature, 
"features.properties");
+            File regionsFile = getFeatureDataFile(context, feature, 
"regions.properties");
+            Properties frMap = loadProperties(featuresFile);
+            Properties rpMap = loadProperties(regionsFile);
+
+            for (JsonValue jv : ja) {
+                if (jv instanceof JsonObject) {
+                    JsonObject jo = (JsonObject) jv;
+                    String fid = feature.getId().toMvnId();
+
+                    Set<String> regionSet = new HashSet<>();
+                    String regions = frMap.getProperty(fid);
+                    if (regions != null) {
+                        regionSet.addAll(Arrays.asList(regions.split(",")));
+                    }
+                    String region = jo.getString(NAME_KEY);
+                    regionSet.add(region);
 
-                frMap.put(fid, 
regionSet.stream().collect(Collectors.joining(",")));
+                    frMap.put(fid, 
regionSet.stream().collect(Collectors.joining(",")));
 
-                Set<String> packageSet = new HashSet<>();
-                String packages = rpMap.getProperty(region);
-                if (packages != null) {
-                    packageSet.addAll(Arrays.asList(packages.split(",")));
-                }
-                if (jo.containsKey(EXPORTS_KEY)) {
-                    JsonArray eja = jo.getJsonArray(EXPORTS_KEY);
-                    for (int i=0; i < eja.size(); i++) {
-                        packageSet.add(eja.getString(i));
+                    Set<String> packageSet = new HashSet<>();
+                    String packages = rpMap.getProperty(region);
+                    if (packages != null) {
+                        packageSet.addAll(Arrays.asList(packages.split(",")));
                     }
+                    if (jo.containsKey(EXPORTS_KEY)) {
+                        JsonArray eja = jo.getJsonArray(EXPORTS_KEY);
+                        for (int i=0; i < eja.size(); i++) {
+                            packageSet.add(eja.getString(i));
+                        }
+                    }
+                    rpMap.put(region, 
packageSet.stream().collect(Collectors.joining(",")));
                 }
-                rpMap.put(region, 
packageSet.stream().collect(Collectors.joining(",")));
             }
-        }
 
-        storeProperties(frMap, featuresFile);
-        storeProperties(rpMap, regionsFile);
+            storeProperties(frMap, featuresFile);
+            storeProperties(rpMap, regionsFile);
+        }
     }
 }

Reply via email to