[jbpm-commits] JBoss JBPM SVN: r5360 - projects/gwt-console/trunk/server/server-core/src/main/java/org/jboss/bpm/console/server.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Jul 28 08:58:30 EDT 2009


Author: heiko.braun at jboss.com
Date: 2009-07-28 08:58:30 -0400 (Tue, 28 Jul 2009)
New Revision: 5360

Modified:
   projects/gwt-console/trunk/server/server-core/src/main/java/org/jboss/bpm/console/server/FormProcessingFacade.java
Log:
Fix JBPM-2452: outcome (transitions) vs. outcome (result) clash

Modified: projects/gwt-console/trunk/server/server-core/src/main/java/org/jboss/bpm/console/server/FormProcessingFacade.java
===================================================================
--- projects/gwt-console/trunk/server/server-core/src/main/java/org/jboss/bpm/console/server/FormProcessingFacade.java	2009-07-28 11:50:37 UTC (rev 5359)
+++ projects/gwt-console/trunk/server/server-core/src/main/java/org/jboss/bpm/console/server/FormProcessingFacade.java	2009-07-28 12:58:30 UTC (rev 5360)
@@ -81,7 +81,7 @@
 
     return this.taskManagement;
   }
-  
+
   private ProcessManagement getProcessManagement()
   {
     if(null==this.processManagement)
@@ -143,16 +143,32 @@
       MultipartFormDataInput payload
   )
   {
-    Map<String,Object> processVars = createVariableMapping(payload);
+    FieldMapping mapping = createFieldMapping(payload);
 
     // complete task
-    getTaskManagement().completeTask(
-        Long.valueOf(taskId), // TODO: change to string id's
-        String.valueOf(processVars.get("outcome")), // actually a plugin implementation detail
-        processVars,
-        request.getUserPrincipal().getName()
-    );
+    String username = request.getUserPrincipal() != null ?
+        request.getUserPrincipal().getName() : null;
 
+    String outcomeDirective = mapping.directives.get("outcome");
+
+    if(outcomeDirective!=null)
+    {
+      getTaskManagement().completeTask(
+          Long.valueOf(taskId), // TODO: change to string id's
+          outcomeDirective, // actually a plugin implementation detail
+          mapping.processVars,
+          username
+      );
+    }
+    else
+    {
+      getTaskManagement().completeTask(
+          Long.valueOf(taskId),
+          mapping.processVars,
+          username
+      );
+    }
+
     return Response.ok("Successfully processed input").build();
   }
 
@@ -168,10 +184,11 @@
       MultipartFormDataInput payload
   )
   {
-    Map<String,Object> processVars = createVariableMapping(payload);
+    FieldMapping mapping = createFieldMapping(payload);
 
     // start process
-    ProcessInstanceRef instance = getProcessManagement().newInstance(definitionId, processVars);
+    ProcessInstanceRef instance =
+        getProcessManagement().newInstance(definitionId, mapping.processVars);
 
     return Response.ok("Successfully processed input").build();
   }
@@ -190,9 +207,9 @@
     return Response.ok(dh.getDataSource()).type("text/html").build();
   }
 
-  private Map<String, Object> createVariableMapping(MultipartFormDataInput payload)
+  private FieldMapping createFieldMapping(MultipartFormDataInput payload)
   {
-    Map<String,Object> processVars = new HashMap<String,Object>();
+    FieldMapping mapping = new FieldMapping();
 
     Map<String, InputPart> formData = payload.getFormData();
     Iterator<String> partNames = formData.keySet().iterator();
@@ -208,7 +225,10 @@
         // RFC2045: Each part has an optional "Content-Type" header
         // that defaults to "text/plain".
         // Can go into process without conversion
-        processVars.put(partName, part.getBodyAsString());
+        if(mapping.isReserved(partName))
+          mapping.directives.put(partName, part.getBodyAsString());
+        else
+          mapping.processVars.put(partName, part.getBodyAsString());
       }
       else
       {
@@ -239,10 +259,32 @@
             }
         );
 
-        processVars.put(partName, dh);
+        mapping.processVars.put(partName, dh);
       }
     }
 
-    return processVars;
+    return mapping;
   }
+
+  private class FieldMapping
+  {
+    final String[] reservedNames = {"outcome", "form"};   // TODO: implementation detail of the form plugin
+
+    Map<String,Object> processVars = new HashMap<String,Object>();
+    Map<String,String> directives = new HashMap<String,String>();
+
+    public boolean isReserved(String name)
+    {
+      boolean result = false;
+      for(String s : reservedNames)
+      {
+        if(s.equals(name))
+        {
+          result = true;
+          break;
+        }
+      }
+      return result;
+    }
+  }
 }



More information about the jbpm-commits mailing list