You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2015/02/16 15:48:29 UTC

svn commit: r1660129 - in /sling/trunk/contrib/extensions/distribution/core: ./ src/main/java/org/apache/sling/distribution/agent/impl/ src/main/java/org/apache/sling/distribution/servlet/

Author: mpetria
Date: Mon Feb 16 14:48:29 2015
New Revision: 1660129

URL: http://svn.apache.org/r1660129
Log:
SLING-4422: using commons.json to build distribution servlet responses

Added:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/ServletJsonUtils.java
Removed:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentRootServlet.java
Modified:
    sling/trunk/contrib/extensions/distribution/core/pom.xml
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageImporterServlet.java

Modified: sling/trunk/contrib/extensions/distribution/core/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/pom.xml?rev=1660129&r1=1660128&r2=1660129&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/pom.xml (original)
+++ sling/trunk/contrib/extensions/distribution/core/pom.xml Mon Feb 16 14:48:29 2015
@@ -148,6 +148,12 @@
             <version>1.3.0</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.json</artifactId>
+            <version>2.0.8</version>
+            <scope>provided</scope>
+        </dependency>
         <!-- LOGGING -->
         <dependency>
             <groupId>org.slf4j</groupId>

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java?rev=1660129&r1=1660128&r2=1660129&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java Mon Feb 16 14:48:29 2015
@@ -98,7 +98,7 @@ public class ForwardDistributionAgentFac
     public static final String LOG_LEVEL = AbstractDistributionAgentFactory.LOG_LEVEL;
 
 
-    @Property(label = "Allowed roots", description = "If set the agent will allow only distribution requests under the specified roots.")
+    @Property(cardinality = 100, label = "Allowed roots", description = "If set the agent will allow only distribution requests under the specified roots.")
     private static final String ALLOWED_ROOTS = "allowed.roots";
 
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java?rev=1660129&r1=1660128&r2=1660129&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java Mon Feb 16 14:48:29 2015
@@ -93,7 +93,7 @@ public class QueueDistributionAgentFacto
 
 
 
-    @Property(label = "Allowed roots", description = "If set the agent will allow only distribution requests under the specified roots.")
+    @Property(cardinality = 100, label = "Allowed roots", description = "If set the agent will allow only distribution requests under the specified roots.")
     private static final String ALLOWED_ROOTS = "allowed.roots";
 
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java?rev=1660129&r1=1660128&r2=1660129&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java Mon Feb 16 14:48:29 2015
@@ -27,7 +27,6 @@ import org.apache.sling.api.SlingHttpSer
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
 import org.apache.sling.distribution.agent.DistributionAgent;
-import org.apache.sling.distribution.agent.DistributionAgentException;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.DistributionResponse;
 import org.apache.sling.distribution.resources.DistributionResourceTypes;
@@ -60,27 +59,17 @@ public class DistributionAgentServlet ex
         if (agent != null) {
             try {
                 DistributionResponse distributionResponse = agent.execute(resourceResolver, distributionRequest);
-                switch (distributionResponse.getState()) {
-                    case DISTRIBUTED:
-                        response.setStatus(200);
-                        break;
-                    case DROPPED:
-                        response.setStatus(400);
-                        break;
-                    case ACCEPTED:
-                        response.setStatus(202);
-                        break;
-                }
-                response.getWriter().append(distributionResponse.toString());
+
+                ServletJsonUtils.writeJson(response, distributionResponse);
 
                 log.debug("distribution response : {}", distributionResponse);
             } catch (Throwable e) {
-                response.setStatus(503);
-                response.getWriter().append("an error has occured");
+                log.error("an unexpected error has occurred", e);
+                ServletJsonUtils.writeJson(response, 503, "an unexpected error has occurred");
             }
         } else {
-            response.setStatus(404);
-            response.getWriter().append("agent not found");
+            ServletJsonUtils.writeJson(response, 404, "agent not found");
         }
     }
+
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageImporterServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageImporterServlet.java?rev=1660129&r1=1660128&r2=1660129&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageImporterServlet.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageImporterServlet.java Mon Feb 16 14:48:29 2015
@@ -50,8 +50,8 @@ public class DistributionPackageImporter
                 .adaptTo(DistributionPackageImporter.class);
 
         final long start = System.currentTimeMillis();
-        response.setContentType("text/plain");
-        response.setCharacterEncoding("utf-8");
+        response.setContentType("application/json");
+
 
         InputStream stream = request.getInputStream();
         ResourceResolver resourceResolver = request.getResourceResolver();
@@ -60,14 +60,13 @@ public class DistributionPackageImporter
             if (distributionPackage != null) {
                 log.info("Package {} imported successfully", distributionPackage);
                 distributionPackage.delete();
+                ServletJsonUtils.writeJson(response, 200, "package imported successfully");
             } else {
                 log.warn("Cannot import distribution package from request {}", request);
-                response.setStatus(400);
-                response.getWriter().print("error: could not import a package from the request stream");
+                ServletJsonUtils.writeJson(response, 400, "could not import a package from the request stream");
             }
         } catch (final Throwable e) {
-            response.setStatus(400);
-            response.getWriter().print("error: " + e.toString());
+            ServletJsonUtils.writeJson(response, 400, "an unexpected error has occurred during distribution import");
             log.error("Error during distribution import", e);
         } finally {
             long end = System.currentTimeMillis();

Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/ServletJsonUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/ServletJsonUtils.java?rev=1660129&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/ServletJsonUtils.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/ServletJsonUtils.java Mon Feb 16 14:48:29 2015
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sling.distribution.servlet;
+
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.commons.json.JSONException;
+import org.apache.sling.commons.json.JSONObject;
+import org.apache.sling.distribution.DistributionResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+/**
+ * Utility class for writing json data to http responses.
+ */
+public class ServletJsonUtils {
+
+    private final static Logger log = LoggerFactory.getLogger(ServletJsonUtils.class);
+
+    public static void writeJson(SlingHttpServletResponse response, DistributionResponse distributionResponse) throws IOException {
+        JSONObject json = new JSONObject();
+        try {
+            json.put("success", distributionResponse.isSuccessful());
+            json.put("state", distributionResponse.getState().name());
+            json.put("message", distributionResponse.getMessage());
+
+        } catch (JSONException e) {
+            log.error("Cannot write json", e);
+        }
+
+        switch (distributionResponse.getState()) {
+            case DISTRIBUTED:
+                response.setStatus(200);
+                break;
+            case DROPPED:
+                response.setStatus(400);
+                break;
+            case ACCEPTED:
+                response.setStatus(202);
+                break;
+        }
+        response.getWriter().append(json.toString());
+    }
+
+    public static void writeJson(SlingHttpServletResponse response, int status, String message) throws IOException {
+        JSONObject json = new JSONObject();
+        try {
+            json.put("message", message);
+        } catch (JSONException e) {
+            log.error("Cannot write json", e);
+        }
+        response.setStatus(status);
+
+        response.getWriter().append(json.toString());
+    }
+}