All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.dynamicextensionsalfresco.controlpanel.BundleRestApi Maven / Gradle / Ivy

Go to download

Adds an OSGi container to alfresco repository supporting dynamic code reloading, classpath isolation and a bunch of other useful features

There is a newer version: 3.1.0
Show newest version
package com.github.dynamicextensionsalfresco.controlpanel;

import com.github.dynamicextensionsalfresco.osgi.Configuration;
import com.github.dynamicextensionsalfresco.webscripts.annotations.*;
import com.github.dynamicextensionsalfresco.webscripts.resolutions.AbstractJsonResolution;
import com.github.dynamicextensionsalfresco.webscripts.resolutions.Resolution;
import org.json.JSONObject;
import org.osgi.framework.Bundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.extensions.surf.util.Content;
import org.springframework.extensions.webscripts.WebScriptException;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletResponse;

/**
 * Handles requests for the Bundle REST API.
 * 

* The the endpoints defined are intended to be called by a REST client rather a web browser. than a web browser. * * @author Laurens Fridael * */ @Component @WebScript(baseUri = "/dynamic-extensions/api/bundles", families = "control panel") @Authentication(value = AuthenticationType.ADMIN) public class BundleRestApi { private static final String JAR_MIME_TYPE = "application/java-archive"; /* Dependencies */ @Autowired private BundleHelper bundleHelper; @Autowired private Configuration configuration; /* Main operations */ @Uri(method = HttpMethod.POST) public Resolution installBundle(final Content content, @Header("Content-Type") final String contentType) throws Exception { if (!configuration.getHotDeployEnabled()) { return new JsonMessage(new JSONObject() .put("message", "osgi.container.control-panel.bundle-install is disabled"), HttpServletResponse.SC_FORBIDDEN); } else { if (JAR_MIME_TYPE.equalsIgnoreCase(contentType) == false) { throw new WebScriptException(HttpServletResponse.SC_BAD_REQUEST, String.format("Can only accept content of type '%s'.", JAR_MIME_TYPE)); } try { final Bundle bundle = bundleHelper.installBundleInRepository(content); return new JsonMessage( new JSONObject() .put("message", String.format("Installed bundle %s %s", bundle.getSymbolicName(), bundle.getVersion())) .put("bundleId", bundle.getBundleId()) , HttpServletResponse.SC_OK); } catch (final Exception e) { return new JsonMessage( new JSONObject().put("message", e.getMessage()), HttpServletResponse.SC_INTERNAL_SERVER_ERROR ); } } } private static class JsonMessage extends AbstractJsonResolution { private final JSONObject jsonObject; private JsonMessage(JSONObject jsonObject, Integer status) { withStatus(status); this.jsonObject = jsonObject; } @Override public void resolve() throws Exception { getWriter().append(jsonObject.toString(2)); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy