Author: xlawrence
Date: Tue Jan 10 18:25:01 2006
New Revision: 12760

URL: https://jahia.mine.nu/websvn/listing.php?sc=1&rev=12760&repname=jahia
Log:
fix allowing to validate more than 1 object. Don't use the Workflowhelper of 
the parent page since it contains only 1 object

Modified:
    trunk/core/src/java/org/jahia/engines/workflow/AdvancedWorkflowEngine.java

Modified: 
trunk/core/src/java/org/jahia/engines/workflow/AdvancedWorkflowEngine.java
URL: 
https://jahia.mine.nu/websvn/diff.php?path=/trunk/core/src/java/org/jahia/engines/workflow/AdvancedWorkflowEngine.java&rev=12760&repname=jahia
==============================================================================
--- trunk/core/src/java/org/jahia/engines/workflow/AdvancedWorkflowEngine.java 
(original)
+++ trunk/core/src/java/org/jahia/engines/workflow/AdvancedWorkflowEngine.java 
Tue Jan 10 18:25:01 2006
@@ -126,7 +126,7 @@
         final String actionScreen = jParams.getParameter("screen");
         final ContentPage page = jParams.getContentPage();
 
-        logger.error("handleActions: " + actionScreen);
+        logger.debug("handleActions: " + actionScreen);
         if ("cancel".equals(actionScreen)) {
             // #ifdef LOCK
             releaseAllLock(jParams);
@@ -214,7 +214,7 @@
                     }
                 }
             } else if ("apply".equals(actionScreen)) {
-                applyModifications(jParams, workflowHelper);
+                applyModifications(jParams);
                 initEngineMap(jParams, engineMap, 
workflowHelper.getAllOptions());
                 engineMap.put("screen", ""); // Screen is defined bellow
                 engineMap.put("engineUrl", 
jParams.composeEngineUrl("workflow", "?screen=display&display=" + 
_lastDisplay.get(jParams.getSessionID()) + "&workflowAction=" + 
_lastAction.get(jParams.getSessionID())));
@@ -222,7 +222,7 @@
                 // screen = save
 
             } else if ("save".equals(actionScreen)) {
-                applyModifications(jParams, workflowHelper);
+                applyModifications(jParams);
                 engineMap.put("jspSource", "close");
                 // #ifdef LOCK
                 releaseAllLock(jParams);
@@ -244,12 +244,35 @@
                 siteMapContentPage.getObjectKey().getType(), fieldId, pageID);
     }
 
+    public static WorkflowHelper getWorkflowHelper(final ProcessingContext 
jParams,
+                                                   final List objects) throws 
JahiaException {
+        WorkflowHelper workflowHelper = new WorkflowHelper(jParams);
+        try {
+            for (int i = 0; i < objects.size(); i++) {
+                final ContentObject obj = 
ContentObject.getContentObjectInstance((ObjectKey) objects.get(i));
+                workflowHelper = getWorkflowHelper(jParams, obj, 
workflowHelper);
+            }
+        } catch (ClassNotFoundException cn) {
+            logger.error(cn, cn);
+        }
+        return workflowHelper;
+    }
+
+    public static WorkflowHelper getWorkflowHelper(final ProcessingContext 
jParams,
+                                                   final ContentObject object) 
throws JahiaException {
+        return getWorkflowHelper(jParams, object, null);
+    }
+
     /**
      * Returns a WorkflowHelper for a given ContentObject
      */
     public static WorkflowHelper getWorkflowHelper(final ProcessingContext 
jParams,
-                                                   final ContentObject object) 
throws JahiaException {
-        final WorkflowHelper workflowHelper = new WorkflowHelper(jParams);
+                                                   final ContentObject object,
+                                                   WorkflowHelper 
workflowHelper) throws JahiaException {
+
+        if (workflowHelper == null) {
+            workflowHelper = new WorkflowHelper(jParams);
+        }
 
 //        String actionName = jParams.getParameter("display");
 
@@ -283,7 +306,7 @@
                 }
                 final boolean isWaitingState = languageState.intValue() == 
EntryLoadRequest.WAITING_WORKFLOW_STATE;
                 final boolean isActiveState = languageState.intValue() == 
EntryLoadRequest.ACTIVE_WORKFLOW_STATE;
-                final boolean isStagingState = languageState.intValue() == 
EntryLoadRequest.STAGING_WORKFLOW_STATE;
+               // final boolean isStagingState = languageState.intValue() == 
EntryLoadRequest.STAGING_WORKFLOW_STATE;
 
                 final List availableOptions = new ArrayList();
 
@@ -425,8 +448,7 @@
      *
      * @param jParams ;)
      */
-    private void applyModifications(ProcessingContext jParams,
-                                    final WorkflowHelper workflowHelper)
+    private void applyModifications(ProcessingContext jParams)
             throws JahiaException {
         // Get the cache instance BEFORE applying any modification in case the 
cache cannot
         // be found for any mysterious reason ;o) THIS SHOULD STAY THE FIRST 
ACTION TO
@@ -455,6 +477,7 @@
 
         String action = (String) _lastAction.get(jParams.getSessionID());
 
+        final List keys = new ArrayList();
         final Iterator paramNames = jParams.getParameterNames();
         while (paramNames.hasNext()) {
             final String paramName = (String) paramNames.next();
@@ -467,12 +490,15 @@
                         final String languageCode = paramToken.nextToken();
                         final String objectKeyStr = paramToken.nextToken();
                         final ObjectKey objectKey = 
ObjectKey.getInstance(objectKeyStr);
+                        keys.add(objectKey);
+                        final WorkflowHelper workflowHelper = 
getWorkflowHelper(jParams,
+                                
ContentObject.getContentObjectInstance(objectKey));
                         final String additionalOption = paramToken.nextToken();
                         // #ifdef LOCK
                         if (jParams.settings().areLocksActivated()) {
                             // Ensure that the lock is always our's.
-                            LockService lockRegistry = 
ServicesRegistry.getInstance().getLockService();
-                            LockKey lockKey = 
getLockKey(ContentObject.getContentObjectInstance(objectKey));
+                            final LockService lockRegistry = 
ServicesRegistry.getInstance().getLockService();
+                            final LockKey lockKey = 
getLockKey(ContentObject.getContentObjectInstance(objectKey));
                             if 
(!lockRegistry.isAlreadyAcquiredInContext(lockKey, jParams.getUser(),
                                     jParams.getUser().getUserKey())) {
                                 continue;
@@ -500,6 +526,7 @@
             }
         }
         final Map userNotifData = new HashMap();
+        final WorkflowHelper workflowHelper = getWorkflowHelper(jParams, keys);
 
         try {
             final List ordered = workflowHelper.getOrderedKeys();

Reply via email to