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