[Yanel-commits] rev 57339 - in public/yanel/trunk/src: core/java/org/wyona/yanel/core/workflow impl/java/org/wyona/yanel/impl/comments

michi at wyona.com michi at wyona.com
Wed Mar 16 10:13:03 CET 2011


Author: michi
Date: 2011-03-16 10:13:03 +0100 (Wed, 16 Mar 2011)
New Revision: 57339

Modified:
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/workflow/WorkflowHelper.java
   public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/comments/CommentManagerV1Impl.java
Log:
set various methods to deprecated in order to make clear that persistence should be hidden

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/workflow/WorkflowHelper.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/workflow/WorkflowHelper.java	2011-03-15 15:51:03 UTC (rev 57338)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/workflow/WorkflowHelper.java	2011-03-16 09:13:03 UTC (rev 57339)
@@ -89,6 +89,47 @@
                     " for state: " + currentState);
         }
     }
+
+/* INFO: It's better to hide the persistence and hence use doTransition(Resource, String, String)
+    public static void doTransition(Node node, String transitionID, Workflow workflow) throws WorkflowException {
+        boolean foundTransition = false;
+        String currentState = null;
+        currentState = getWorkflowState(node);
+        if (currentState == null) {
+            currentState = workflow.getInitialState(); 
+        }
+        Transition[] transitions = workflow.getLeavingTransitions(currentState);
+        
+        for (int i = 0; i < transitions.length; i++) {
+            if (transitions[i].getID().equals(transitionID)) {
+
+                // INFO: The isComplied() method is based on workflowable instead node
+                Condition[] conditions = transitions[i].getConditions();
+                for (int j = 0; j < conditions.length; j++) {
+                    if (!conditions[j].isComplied(workflowable, workflow, revision)) {
+                        throw new WorkflowException("Workflow condition not complied for state '" + currentState + "' and transition '" + transitionID + "': " + conditions[j].getMessage());
+                    }
+                }
+
+                String newState = transitions[i].getDestinationState();
+                
+                setWorkflowState(node, newState);
+                
+                // INFO: The execute() method is based on workflowable instead node
+                Action[] actions = transitions[i].getActions();
+                for (int j = 0; j < actions.length; j++) {
+                    actions[j].execute(workflowable, workflow, revision);
+                }
+                
+                foundTransition = true;
+            }
+        }
+        if (!foundTransition) {
+            throw new WorkflowException("Invalid workflow transition: " + transitionID + 
+                    " for state: " + currentState);
+        }
+    }
+*/
     
     /*public static boolean canDoTransition(Resource resource, String transitionID, String revision) 
             throws WorkflowException {
@@ -373,7 +414,19 @@
      */
     public static String getWorkflowState(Node node, String revision) throws WorkflowException {
         try {
-            Property stateProp = node.getRevision(revision).getProperty(WORKFLOW_STATE_PROPERTY);
+            return getWorkflowState(node.getRevision(revision));
+        } catch (Exception e) {
+            log.error(e, e);
+            throw new WorkflowException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     *
+     */
+    private static String getWorkflowState(Node node) throws WorkflowException {
+        try {
+            Property stateProp = node.getProperty(WORKFLOW_STATE_PROPERTY);
             if (stateProp != null) {
                 return stateProp.getString();
             }
@@ -397,6 +450,7 @@
     }
 
     /**
+     * @deprecated Use {@link setWorkflowState(Resource, String, String)} instead
      * Set workflow state (and date)
      */
     public static void setWorkflowState(Node node, String state, String revision) throws WorkflowException {
@@ -411,7 +465,7 @@
     /**
      * Set workflow state (and date)
      */
-    public static void setWorkflowState(Node node, String state) throws WorkflowException {
+    private static void setWorkflowState(Node node, String state) throws WorkflowException {
         try {
             log.debug("Set workflow state: " + state);
             node.setProperty(WORKFLOW_STATE_PROPERTY, state);
@@ -424,7 +478,7 @@
     }
 
     /**
-     *
+     * @param revision Revision of resource
      */
     public static Date getWorkflowDate(Resource resource, String revision) throws WorkflowException {
         try {
@@ -436,7 +490,7 @@
     }
 
     /**
-     *
+     * @deprecated Use {@link getWorkflowDate(Resource, String)} instead
      */
     public static Date getWorkflowDate(Node node, String revision) throws WorkflowException {
         try {

Modified: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/comments/CommentManagerV1Impl.java
===================================================================
--- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/comments/CommentManagerV1Impl.java	2011-03-15 15:51:03 UTC (rev 57338)
+++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/comments/CommentManagerV1Impl.java	2011-03-16 09:13:03 UTC (rev 57339)
@@ -93,9 +93,8 @@
                 Workflow workflow = getWorkflow();
                 if (workflow != null) {
                     org.wyona.yarep.core.Node commentsNode = realm.getRepository().getNode(getAbsoluteYarepPathOfComment(path)); // TODO: Use comment node instead comments node
-                    org.wyona.yanel.core.workflow.WorkflowHelper.setWorkflowState(commentsNode, workflow.getInitialState());
-                    // TODO: Check if transition ID 'submit' exists!
-                    //WorkflowHelper.doTransition(newResource, "submit", revision.getRevisionName());
+                    //org.wyona.yanel.core.workflow.WorkflowHelper.setWorkflowState(commentsNode, workflow.getInitialState());
+                    //org.wyona.yanel.core.workflow.WorkflowHelper.doTransition(commentsNode, "submit-for-review", workflow);
                 }
             }
         } else {
@@ -118,9 +117,18 @@
     private Workflow getWorkflow() {
         //return org.wyona.yanel.core.workflow.Workflow workflow = new org.wyona.yanel.core.workflow.WorkflowBuilder().buildWorkflow(workflowAsIS);
         org.wyona.yanel.core.workflow.impl.WorkflowImpl workflow = new org.wyona.yanel.core.workflow.impl.WorkflowImpl();
+
         String states[] = {"draft", "review", "approved"};
         workflow.setStates(states);
         workflow.setInitialState("draft");
+
+        org.wyona.yanel.core.workflow.impl.TransitionImpl submitT = new org.wyona.yanel.core.workflow.impl.TransitionImpl("submit-for-review", "draft", "review");
+        org.wyona.yanel.core.workflow.impl.TransitionImpl approveT = new org.wyona.yanel.core.workflow.impl.TransitionImpl("approve", "review", "approved");
+        org.wyona.yanel.core.workflow.Transition[] transitions = new org.wyona.yanel.core.workflow.Transition[2];
+        transitions[0] = submitT;
+        transitions[1] = approveT;
+        workflow.setTransitions(transitions);
+
         return workflow;
     }
 }



More information about the Yanel-commits mailing list