[Yanel-commits] rev 57519 - public/yanel/trunk/src/core/java/org/wyona/yanel/core/util

michi at wyona.com michi at wyona.com
Fri Mar 25 15:18:04 CET 2011


Author: michi
Date: 2011-03-25 15:18:04 +0100 (Fri, 25 Mar 2011)
New Revision: 57519

Modified:
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/util/VersioningUtil.java
Log:
set workflow if applicable

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/util/VersioningUtil.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/util/VersioningUtil.java	2011-03-25 14:16:31 UTC (rev 57518)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/util/VersioningUtil.java	2011-03-25 14:18:04 UTC (rev 57519)
@@ -19,12 +19,13 @@
 import org.wyona.yanel.core.Resource;
 import org.wyona.yanel.core.api.attributes.ModifiableV2;
 import org.wyona.yanel.core.api.attributes.VersionableV2;
+import org.wyona.yanel.core.api.attributes.WorkflowableV1;
 import org.wyona.yanel.core.attributes.versionable.RevisionInformation;
 
 import org.apache.log4j.Logger;
 
 /**
- *
+ * Utility class in order to roll-back to a particular revision
  */
 public class VersioningUtil {
 
@@ -43,6 +44,14 @@
                     versionableRes.checkout(userName);
                     versionableRes.restore(revisionName);
                     versionableRes.checkin("Rolled back to revision '" + revisionName + "'");
+                    if (ResourceAttributeHelper.hasAttributeImplemented(resource, "Workflowable", "1")) {
+                        WorkflowableV1 workflowableRes = (WorkflowableV1) resource;
+                        // TBD: Should the workflow state of the old revision be used (as is) or rather workflow.getInitialState()
+                        //log.debug("Revision head: " + getRevisionHead(versionableRes));
+                        workflowableRes.setWorkflowState(workflowableRes.getWorkflowState(revisionName), getRevisionHead(versionableRes));
+                    } else {
+                        log.info("Cannot set workflow, because resource '" + resource.getPath() + "' is not WorkflowableV1");
+                    }
                 } else {
                     log.warn("Resource is already checked out by user '" + versionableRes.getCheckoutUserID() + "' and hence cannot be rolled back at the moment!");
                 }
@@ -50,7 +59,16 @@
                 log.error(e, e);
             }
         } else {
-            log.warn("Cannot be rolled back, because resource is not VersionableV2");
+            log.warn("Cannot be rolled back, because resource '" + resource.getPath() + "' is not VersionableV2");
         }
     }
+
+    /**
+     * Get revision number/name of head (most recent) revision (WARN: Peformance/Scalability)
+     */
+    private static String getRevisionHead(VersionableV2 resource) throws Exception {
+        RevisionInformation[] ri = resource.getRevisions();
+        java.util.Arrays.sort(ri);
+        return ri[0].getName();
+    }
 }



More information about the Yanel-commits mailing list