You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2018/06/20 10:58:55 UTC

[sling-whiteboard] branch master updated: Refactor to be easier to test

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

bdelacretaz 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 d09b9ca  Refactor to be easier to test
d09b9ca is described below

commit d09b9ca0cc473641cfb0a06e7761977a572baacf
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Wed Jun 20 12:58:41 2018 +0200

    Refactor to be easier to test
---
 capabilities/pom.xml                               |  2 --
 .../capabilities/internal/CapabilitiesServlet.java | 31 +---------------
 ...iesServlet.java => JSONCapabilitiesWriter.java} | 42 +++++-----------------
 3 files changed, 9 insertions(+), 66 deletions(-)

diff --git a/capabilities/pom.xml b/capabilities/pom.xml
index 3a91662..a165edb 100644
--- a/capabilities/pom.xml
+++ b/capabilities/pom.xml
@@ -58,7 +58,6 @@
     <dependency>
       <groupId>biz.aQute.bnd</groupId>
       <artifactId>biz.aQute.bndlib</artifactId>
-      <version>3.5.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.sling</groupId>
@@ -74,7 +73,6 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.scr.annotations</artifactId>
-      <version>1.12.0</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
diff --git a/capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java b/capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java
index 84fa79b..53e6e36 100644
--- a/capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java
+++ b/capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java
@@ -19,12 +19,9 @@
 package org.apache.sling.capabilities.internal;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import javax.servlet.Servlet;
 import javax.servlet.ServletException;
-import org.apache.felix.utils.json.JSONWriter;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
@@ -51,37 +48,11 @@ public class CapabilitiesServlet extends SlingSafeMethodsServlet {
         policyOption=ReferencePolicyOption.GREEDY)
     volatile List<CapabilitiesSource> sources;
 
-    public final static String CAPS_KEY = "org.apache.sling.capabilities";
-    
     @Override
     protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
         response.setContentType("application/json");
         response.setCharacterEncoding("UTF-8");
-        
-        final JSONWriter jw = new JSONWriter(response.getWriter());
-        jw.object();
-        jw.key(CAPS_KEY);
-        jw.object();
-        
-        Map<String, String> values = null;
-        for(CapabilitiesSource s : sources) {
-            try {
-                values = s.getCapabilities();
-            } catch(Exception e) {
-                values = new HashMap<>();
-                values.put("_EXCEPTION_", e.getClass().getName() + ":" + e.getMessage());
-            }
-            jw.key(s.getNamespace());
-            jw.object();
-            for(Map.Entry<String, String> e : values.entrySet()) {
-                jw.key(e.getKey());
-                jw.value(e.getValue());
-            }
-            jw.endObject();
-        }
-        
-        jw.endObject();
-        jw.endObject();
+        new JSONCapabilitiesWriter().writeJson(response.getWriter(), sources);
         response.getWriter().flush();
     }
 }
\ No newline at end of file
diff --git a/capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java b/capabilities/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java
similarity index 56%
copy from capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java
copy to capabilities/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java
index 84fa79b..25f193b 100644
--- a/capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java
+++ b/capabilities/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java
@@ -19,46 +19,21 @@
 package org.apache.sling.capabilities.internal;
 
 import java.io.IOException;
+import java.io.Writer;
+import java.util.Collection;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
 import org.apache.felix.utils.json.JSONWriter;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.SlingHttpServletResponse;
-import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
 import org.apache.sling.capabilities.CapabilitiesSource;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
-import org.osgi.service.component.annotations.ReferencePolicy;
-import org.osgi.service.component.annotations.ReferencePolicyOption;
 
-@Component(service = Servlet.class,
-property = {
-    "sling.servlet.resourceTypes=sling/capabilities",
-    "sling.servlet.methods=GET",
-    "sling.servlet.selectors=capabilities",
-    "sling.servlet.extensions=json"
-})
+/** Create the JSON output of our servlet */
+class JSONCapabilitiesWriter {
 
-public class CapabilitiesServlet extends SlingSafeMethodsServlet {
+    static final String CAPS_KEY = "org.apache.sling.capabilities";
     
-    @Reference(
-        policy=ReferencePolicy.DYNAMIC,
-        cardinality=ReferenceCardinality.AT_LEAST_ONE, 
-        policyOption=ReferencePolicyOption.GREEDY)
-    volatile List<CapabilitiesSource> sources;
-
-    public final static String CAPS_KEY = "org.apache.sling.capabilities";
-    
-    @Override
-    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
-        response.setContentType("application/json");
-        response.setCharacterEncoding("UTF-8");
-        
-        final JSONWriter jw = new JSONWriter(response.getWriter());
+    /** Write JSON to the supplied Writer, using the supplied sources */
+    void writeJson(Writer w, Collection<CapabilitiesSource> sources) throws IOException {
+        final JSONWriter jw = new JSONWriter(w);
         jw.object();
         jw.key(CAPS_KEY);
         jw.object();
@@ -82,6 +57,5 @@ public class CapabilitiesServlet extends SlingSafeMethodsServlet {
         
         jw.endObject();
         jw.endObject();
-        response.getWriter().flush();
     }
 }
\ No newline at end of file