[Yanel-commits] rev 40778 - public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet

michi at wyona.com michi at wyona.com
Wed Jan 7 15:08:26 CET 2009


Author: michi
Date: 2009-01-07 15:08:26 +0100 (Wed, 07 Jan 2009)
New Revision: 40778

Modified:
   public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
thanks to Gary, workflow transition refactored such that it can also be used with GET requests

Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2009-01-07 10:16:21 UTC (rev 40777)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2009-01-07 14:08:26 UTC (rev 40778)
@@ -120,6 +120,9 @@
     
     public static final String DEFAULT_ENCODING = "UTF-8";
 
+    public static final String YANEL_RESOURCE = "yanel.resource";
+    public static final String YANEL_RESOURCE_REVN = YANEL_RESOURCE + ".revision";
+    public static final String YANEL_RESOURCE_WORKFLOW_TRANSITION = YANEL_RESOURCE + ".workflow.transition";
     public static final String VIEW_ID_PARAM_NAME = "yanel.resource.viewid";
     public static final String RESOURCE_META_ID_PARAM_NAME = "yanel.resource.meta";
 
@@ -228,9 +231,18 @@
     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         HttpSession session = request.getSession(true);
         Resource resource = getResource(request, response);
-
+        
         // Enable or disable toolbar
         switchToolbar(request);
+        
+        String transition = request.getParameter(YANEL_RESOURCE_WORKFLOW_TRANSITION);
+        if (transition != null) {
+            executeWorkflowTransition(getResource(request, response),
+                                      response,
+                                      request.getParameter(YANEL_RESOURCE_REVN),
+                                      transition);
+            return;
+        }
 
         // Check for requests refered by WebDAV
         String yanelWebDAV = request.getParameter("yanel.webdav");
@@ -444,7 +456,7 @@
 
 
                         try {
-                            String revisionName = request.getParameter("yanel.resource.revision");
+                            String revisionName = request.getParameter(YANEL_RESOURCE_REVN);
                             if (revisionName != null && ResourceAttributeHelper.hasAttributeImplemented(res, "Versionable", "2")) {
                                 view = ((VersionableV2) res).getView(viewId, revisionName);
                             } else if (ResourceAttributeHelper.hasAttributeImplemented(res, "Workflowable", "1") && environment.getStateOfView().equals(StateOfView.LIVE)) {
@@ -636,31 +648,13 @@
      *
      */
     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        String transition = request.getParameter("yanel.resource.workflow.transition");
+        String transition = request.getParameter(YANEL_RESOURCE_WORKFLOW_TRANSITION);
         if (transition != null) {
-            
-            Resource resource = getResource(request, response);
-            if (ResourceAttributeHelper.hasAttributeImplemented(resource, "Workflowable", "1")) {
-                WorkflowableV1 workflowable = (WorkflowableV1)resource;
-                try {
-                    String revision = request.getParameter("yanel.resource.revision");
-                    workflowable.doTransition(transition, revision);
-                    
-                    response.setStatus(javax.servlet.http.HttpServletResponse.SC_OK);
-                    StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
-                    sb.append(workflowable.getWorkflowIntrospection());
-                    PrintWriter w = response.getWriter();
-                    w.print(sb);
-                    return;
-                } catch (WorkflowException e) {
-                    // TODO: Implement response if transition has failed ...
-                    log.error(e, e);
-                    throw new ServletException(e.getMessage(), e);
-                }
-            } else {
-                log.warn("Resource not workflowable: " + resource.getPath());
-            }
-
+            executeWorkflowTransition(getResource(request, response),
+                                      response,
+                                      request.getParameter(YANEL_RESOURCE_REVN),
+                                      transition);
+            return;
         }
 
         String value = request.getParameter("yanel.resource.usecase");
@@ -722,6 +716,40 @@
     }
 
     /**
+     * Perform the given transition on the indicated revision.
+     * @param request
+     * @param response
+     * @param transition
+     * @throws ServletException
+     * @throws IOException
+     */
+    private void executeWorkflowTransition(Resource resource,
+                                           HttpServletResponse response,
+                                           String revision,
+                                           String transition)
+            throws ServletException, IOException {
+        if (ResourceAttributeHelper.hasAttributeImplemented(resource, "Workflowable", "1")) {
+            WorkflowableV1 workflowable = (WorkflowableV1)resource;
+            try {
+                workflowable.doTransition(transition, revision);
+                
+                response.setStatus(javax.servlet.http.HttpServletResponse.SC_OK);
+                StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
+                sb.append(workflowable.getWorkflowIntrospection());
+                PrintWriter w = response.getWriter();
+                w.print(sb);
+
+            } catch (WorkflowException e) {
+                // TODO: Implement response if transition has failed ...
+                log.error(e, e);
+                throw new ServletException(e.getMessage(), e);
+            }
+        } else {
+            log.warn("Resource not workflowable: " + resource.getPath());
+        }
+    }
+
+    /**
      * HTTP PUT implementation
      */
     public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
@@ -2150,7 +2178,7 @@
         // TODO: Replace hardcoded roles by mapping between roles amd query strings ...
         String value = request.getParameter("yanel.resource.usecase");
         String yanelUsecaseValue = request.getParameter("yanel.usecase");
-        String workflowTransitionValue = request.getParameter("yanel.resource.workflow.transition");
+        String workflowTransitionValue = request.getParameter(YANEL_RESOURCE_WORKFLOW_TRANSITION);
         String contentType = request.getContentType();
         String method = request.getMethod();
         if (value != null && value.equals("save")) {



More information about the Yanel-commits mailing list