This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-tooling-support-install.git
commit fddb6be35baab1bf6e4ee9aed201d53dcb92d11f Author: Robert Munteanu <[email protected]> AuthorDate: Tue Oct 22 14:31:34 2013 +0000 SLING-3019 - Provide a mechanism to install a bundle based on a directory Added JSON rendering of responses. git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1534644 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 18 ++++++++ .../support/install/impl/InstallServlet.java | 22 ++++++++++ .../support/install/impl/InstallationResult.java | 51 ++++++++++++++++++++++ 3 files changed, 91 insertions(+) diff --git a/pom.xml b/pom.xml index 85e151a..0ec7b01 100644 --- a/pom.xml +++ b/pom.xml @@ -81,5 +81,23 @@ <groupId>org.osgi</groupId> <artifactId>org.osgi.compendium</artifactId> </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.commons.json</artifactId> + <version>2.0.6</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>2.4</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + <version>2.4</version> + <scope>provided</scope> + </dependency> </dependencies> </project> diff --git a/src/main/java/org/apache/sling/tooling/support/install/impl/InstallServlet.java b/src/main/java/org/apache/sling/tooling/support/install/impl/InstallServlet.java index 3c6f48d..765eda7 100644 --- a/src/main/java/org/apache/sling/tooling/support/install/impl/InstallServlet.java +++ b/src/main/java/org/apache/sling/tooling/support/install/impl/InstallServlet.java @@ -18,6 +18,7 @@ package org.apache.sling.tooling.support.install.impl; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -73,9 +74,20 @@ public class InstallServlet extends HttpServlet { if ( dirPath == null ) { logger.error("No dir parameter specified : {}", req.getParameterMap()); resp.setStatus(500); + InstallationResult result = new InstallationResult(false, "No dir parameter specified: " + + req.getParameterMap()); + result.render(resp.getWriter()); return; } final File dir = new File(dirPath); + installBasedOnDirectory(resp, dir); + } + + private void installBasedOnDirectory(HttpServletResponse resp, final File dir) throws FileNotFoundException, + IOException { + + InstallationResult result = null; + if ( dir.exists() && dir.isDirectory() ) { logger.info("Checking dir {} for bundle install", dir); final File manifestFile = new File(dir, JarFile.MANIFEST_NAME); @@ -110,16 +122,21 @@ public class InstallServlet extends HttpServlet { final Bundle b = bundleContext.installBundle(dir.getAbsolutePath(), in); b.start(); } + result = new InstallationResult(true, null); resp.setStatus(200); + result.render(resp.getWriter()); return; } catch ( final BundleException be ) { logger.info("Unable to install/update bundle from dir " + dir, be); + result = new InstallationResult(false, + "Unable to install/update bundle from dir " + dir); } } finally { tempFile.delete(); } } else { logger.info("Manifest in {} does not have a symbolic name", dir); + result = new InstallationResult(false, "Manifest in " + dir + " does not have a symbolic name"); } } finally { if ( fis != null ) { @@ -127,12 +144,17 @@ public class InstallServlet extends HttpServlet { } } } else { + result = new InstallationResult(false, "Dir " + dir + " does not have a manifest"); logger.info("Dir {} does not have a manifest", dir); } } else { + result = new InstallationResult(false, "Dir " + dir + " does not exist"); logger.info("Dir {} does not exist", dir); } resp.setStatus(500); + if (result != null) { + result.render(resp.getWriter()); + } } private static void createJar(final File sourceDir, final File jarFile, final Manifest mf) diff --git a/src/main/java/org/apache/sling/tooling/support/install/impl/InstallationResult.java b/src/main/java/org/apache/sling/tooling/support/install/impl/InstallationResult.java new file mode 100644 index 0000000..c498d88 --- /dev/null +++ b/src/main/java/org/apache/sling/tooling/support/install/impl/InstallationResult.java @@ -0,0 +1,51 @@ +/* + * 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.tooling.support.install.impl; + +import java.io.Writer; + +import org.apache.commons.lang.StringUtils; +import org.apache.sling.commons.json.JSONException; +import org.apache.sling.commons.json.io.JSONWriter; + +public class InstallationResult { + + private final boolean status; + private final String message; + + public InstallationResult(boolean status, String message) { + this.status = status; + this.message = message; + } + + public void render(Writer out) { + + try { + JSONWriter writer = new JSONWriter(out); + writer.object(); + writer.key("status").value(status ? "OK" : "FAILURE"); + if (!StringUtils.isEmpty(message)) { + writer.key("message").value(message); + } + writer.endObject(); + } catch (JSONException e) { + // never happens + throw new RuntimeException(e); + } + } + +} -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
