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()); + } +}