You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by da...@apache.org on 2021/07/01 11:16:46 UTC

[sling-whiteboard] branch master updated: Initial impl for the feature writer

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-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new 8e699c1  Initial impl for the feature writer
8e699c1 is described below

commit 8e699c1c6ab95e9e43fd4f50b73e776acff101d1
Author: David Bosschaert <da...@apache.org>
AuthorDate: Thu Jul 1 11:44:38 2021 +0100

    Initial impl for the feature writer
---
 .../feature/osgi/impl/FeatureServiceImpl.java      | 32 +++++++++++++++++++---
 .../feature/osgi/impl/FeatureServiceImplTest.java  | 26 +++++++++++++++---
 2 files changed, 50 insertions(+), 8 deletions(-)

diff --git a/osgi-featuremodel/src/main/java/org/apache/sling/feature/osgi/impl/FeatureServiceImpl.java b/osgi-featuremodel/src/main/java/org/apache/sling/feature/osgi/impl/FeatureServiceImpl.java
index 5460dfd..7f8b3ec 100644
--- a/osgi-featuremodel/src/main/java/org/apache/sling/feature/osgi/impl/FeatureServiceImpl.java
+++ b/osgi-featuremodel/src/main/java/org/apache/sling/feature/osgi/impl/FeatureServiceImpl.java
@@ -20,6 +20,9 @@ import java.io.IOException;
 import java.io.Reader;
 import java.io.Writer;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -27,8 +30,13 @@ import javax.json.Json;
 import javax.json.JsonArray;
 import javax.json.JsonNumber;
 import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
 import javax.json.JsonString;
 import javax.json.JsonValue;
+import javax.json.JsonWriter;
+import javax.json.JsonWriterFactory;
+import javax.json.stream.JsonGenerator;
+import javax.json.stream.JsonGeneratorFactory;
 
 import org.osgi.service.feature.BuilderFactory;
 import org.osgi.service.feature.Feature;
@@ -75,8 +83,8 @@ public class FeatureServiceImpl implements FeatureService {
         String id = json.getString("id");
         FeatureBuilder builder = builderFactory.newFeatureBuilder(getIDfromMavenID(id));
 
-        builder.setName(json.getString("title", null));
-        builder.setCopyright(json.getString("copyright", null));
+        builder.setName(json.getString("name", null));
+//        builder.setCopyright(json.getString("copyright", null));
         builder.setDescription(json.getString("description", null));
         builder.setDocURL(json.getString("docURL", null));
         builder.setLicense(json.getString("license", null));
@@ -244,7 +252,23 @@ public class FeatureServiceImpl implements FeatureService {
     }
 
     public void writeFeature(Feature feature, Writer jsonWriter) throws IOException {
-        // TODO Auto-generated method stub
-
+    	// LinkedHashMap to give it some order, we'd like 'id' and 'name' first.
+    	Map<String,Object> attrs = new LinkedHashMap<>();
+    	
+    	attrs.put("id", feature.getID().toString());
+    	feature.getName().ifPresent(n -> attrs.put("name", n));
+    	feature.getDescription().ifPresent(d -> attrs.put("description", d));
+    	feature.getDocURL().ifPresent(d -> attrs.put("docURL", d));
+    	feature.getLicense().ifPresent(l -> attrs.put("license", l));
+    	feature.getSCM().ifPresent(s -> attrs.put("scm", s));
+    	feature.getVendor().ifPresent(v -> attrs.put("vendor", v));
+    	
+		JsonObjectBuilder json = Json.createObjectBuilder(attrs);
+		JsonObject fo = json.build();
+		
+		JsonGeneratorFactory gf = Json.createGeneratorFactory(Collections.singletonMap(JsonGenerator.PRETTY_PRINTING, true));
+		try (JsonGenerator gr = gf.createGenerator(jsonWriter)) {
+			gr.write(fo);
+		}
     }
 }
diff --git a/osgi-featuremodel/src/test/java/org/apache/sling/feature/osgi/impl/FeatureServiceImplTest.java b/osgi-featuremodel/src/test/java/org/apache/sling/feature/osgi/impl/FeatureServiceImplTest.java
index 5cced8c..3fd4174 100644
--- a/osgi-featuremodel/src/test/java/org/apache/sling/feature/osgi/impl/FeatureServiceImplTest.java
+++ b/osgi-featuremodel/src/test/java/org/apache/sling/feature/osgi/impl/FeatureServiceImplTest.java
@@ -17,14 +17,21 @@
 package org.apache.sling.feature.osgi.impl;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
 import java.net.URL;
 import java.util.List;
 
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.osgi.service.feature.BuilderFactory;
@@ -69,16 +76,27 @@ public class FeatureServiceImplTest {
     }
 
     @Test
-    public void testCreateFeature() {
+    public void testWriteFeature() throws Exception {
         BuilderFactory factory = features.getBuilderFactory();
 
+        String desc = "This is the main ACME app, from where all functionality can be reached.";
+
         FeatureBuilder builder = factory.newFeatureBuilder(features.getID("org.acme", "acmeapp", "1.0.0"));
         builder.setName("The ACME app");
-        builder.setDescription("This is the main ACME app, "
-                + "from where all functionality can be reached.");
+		builder.setDescription(desc);
 
         Feature f = builder.build();
-        System.out.println("***" + f);
+        StringWriter sw = new StringWriter();
+        features.writeFeature(f, sw);
+        System.out.println("***" + sw.toString());
+        
+        // Now check the generated JSON
+        JsonReader jr = Json.createReader(new StringReader(sw.toString()));
+        JsonObject fo = jr.readObject();
+        assertEquals("org.acme:acmeapp:1.0.0", fo.getString("id"));
+        assertEquals("The ACME app", fo.getString("name"));
+        assertEquals(desc, fo.getString("description"));
+        assertFalse(fo.containsKey("docURL"));
     }
 
     @Test