X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=inline;f=org.argeo.slc.core%2Fsrc%2Forg%2Fargeo%2Fslc%2Fcore%2Fexecution%2Fhttp%2FRunnerServlet.java;h=1823759c4e0810830e0e112c64ca4db99c175a6b;hb=fe1e3bdf7fdcec20885b980b42a5230c58fdf339;hp=cebf4d82aff759d1a308f8df9783ce81295357dd;hpb=d768c949136ad4bc95557aa4e706e22a3a392ae9;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/http/RunnerServlet.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/http/RunnerServlet.java index cebf4d82a..1823759c4 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/http/RunnerServlet.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/http/RunnerServlet.java @@ -1,15 +1,21 @@ package org.argeo.slc.core.execution.http; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.OutputStream; import java.nio.channels.Channels; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.security.AccessControlContext; import java.security.PrivilegedAction; import java.util.Collection; import java.util.GregorianCalendar; +import java.util.Map; import java.util.UUID; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; @@ -36,9 +42,9 @@ import org.argeo.cms.auth.CmsSession; import org.argeo.jcr.JcrUtils; import org.argeo.node.NodeUtils; import org.argeo.slc.SlcException; +import org.argeo.slc.SlcNames; +import org.argeo.slc.SlcTypes; import org.argeo.slc.execution.ExecutionProcess; -import org.argeo.slc.jcr.SlcNames; -import org.argeo.slc.jcr.SlcTypes; import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; @@ -46,6 +52,10 @@ import org.osgi.service.http.HttpContext; import org.osgi.service.http.HttpService; import org.osgi.util.tracker.ServiceTracker; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; + public class RunnerServlet extends HttpServlet { private final static Log log = LogFactory.getLog(RunnerServlet.class); @@ -68,6 +78,17 @@ public class RunnerServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + InputStream in; + // Deal with x-www-form-urlencoded + // FIXME make it more robust an generic + Map params = req.getParameterMap(); + if (params.size() != 0) { + String json = params.keySet().iterator().next(); + in = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)); + } else { + in = req.getInputStream(); + } + // InputStream in = req.getInputStream(); // Gson gson = new Gson(); // JsonParser jsonParser = new JsonParser(); @@ -75,8 +96,13 @@ public class RunnerServlet extends HttpServlet { // Charset.forName("UTF-8"))); // JsonElement payload = jsonParser.parse(reader); // String payloadStr = gson.toJson(payload); + // + // log.debug(payloadStr); + // if (true) + // return; + String path = req.getPathInfo(); - InputStream in = req.getInputStream(); + // InputStream in = req.getInputStream(); OutputStream out = resp.getOutputStream(); String tokens[] = path.split("/"); @@ -102,10 +128,12 @@ public class RunnerServlet extends HttpServlet { // flow path StringBuilder sb = new StringBuilder(""); for (int i = 2; i < tokens.length; i++) { - sb.append('/').append(tokens[i]); + if (i != 2) + sb.append('/'); + sb.append(tokens[i]); } - String flowPath = sb.toString(); - String ext = FilenameUtils.getExtension(flowPath.toString()); + String flowName = sb.toString(); + String ext = FilenameUtils.getExtension(flowName.toString()); // JCR Repository repository = bc.getService(bc.getServiceReference(Repository.class)); @@ -134,15 +162,16 @@ public class RunnerServlet extends HttpServlet { realizedFlowNode = processNode.addNode(SlcNames.SLC_FLOW); realizedFlowNode.addMixin(SlcTypes.SLC_REALIZED_FLOW); realizedFlowNode.setProperty(SlcNames.SLC_STARTED, started); + realizedFlowNode.setProperty(SlcNames.SLC_NAME, flowName); Node addressNode = realizedFlowNode.addNode(SlcNames.SLC_ADDRESS, NodeType.NT_ADDRESS); - addressNode.setProperty(Property.JCR_PATH, flowPath); + addressNode.setProperty(Property.JCR_PATH, flowName); processNode.getSession().save(); } catch (RepositoryException e1) { throw new SlcException("Cannot register SLC process", e1); } if (log.isDebugEnabled()) - log.debug(userDn + " " + workgroup + " " + flowPath); + log.debug(userDn + " " + workgroup + " " + flowName); try { resp.setHeader("Content-Type", "application/json"); @@ -150,14 +179,14 @@ public class RunnerServlet extends HttpServlet { executor); Callable task; if (ext.equals("api")) { - String uri = Files.readAllLines(baseDir.resolve(flowPath.substring(1))).get(0); + String uri = Files.readAllLines(baseDir.resolve(flowName)).get(0); task = new WebServiceTask(serviceChannel, uri); } else { - task = createTask(serviceChannel, flowPath); + task = createTask(serviceChannel, flowName); } if (task == null) - throw new SlcException("No task found for " + flowPath); + throw new SlcException("No task found for " + flowName); // execute Future f = executor.submit(task); @@ -179,7 +208,7 @@ public class RunnerServlet extends HttpServlet { } catch (RepositoryException e1) { throw new SlcException("Cannot update SLC process status", e1); } - throw new SlcException("Task " + flowPath + " failed", e); + throw new SlcException("Task " + flowName + " failed", e); } finally { JcrUtils.logoutQuietly(session); } @@ -192,7 +221,7 @@ public class RunnerServlet extends HttpServlet { // jsonWriter.flush(); } - protected Callable createTask(ServiceChannel serviceChannel, String flowPath) { + protected Callable createTask(ServiceChannel serviceChannel, String flowName) { return null; }