This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 60ab922cb2533963e0cf8cf17a121918500c9369
Author: juanpablo <[email protected]>
AuthorDate: Sat May 2 21:06:52 2020 +0200

    JSPWIKI-304: make Workflow attributes Serializable
    
    As Context isn't Serializable, on save page Tasks we pass it as a 
constructor parameter instead of passing it through the Workflow attributes' 
map.
---
 .../src/main/java/org/apache/wiki/api/core/Context.java  |  2 +-
 .../java/org/apache/wiki/pages/DefaultPageManager.java   |  2 +-
 .../java/org/apache/wiki/tasks/DefaultTasksManager.java  |  4 ++--
 .../main/java/org/apache/wiki/tasks/TasksManager.java    |  5 +++--
 .../org/apache/wiki/tasks/auth/SaveUserProfileTask.java  |  2 +-
 .../org/apache/wiki/tasks/pages/PreSaveWikiPageTask.java |  1 -
 .../org/apache/wiki/tasks/pages/SaveWikiPageTask.java    |  6 ++++--
 .../main/java/org/apache/wiki/workflow/AbstractStep.java |  9 +++++----
 .../src/main/java/org/apache/wiki/workflow/Decision.java |  3 ++-
 .../java/org/apache/wiki/workflow/SimpleDecision.java    |  3 ++-
 .../org/apache/wiki/workflow/SimpleNotification.java     |  3 ++-
 .../src/main/java/org/apache/wiki/workflow/Step.java     |  2 +-
 .../src/main/java/org/apache/wiki/workflow/Task.java     |  3 ++-
 .../src/main/java/org/apache/wiki/workflow/Workflow.java |  8 ++++----
 .../java/org/apache/wiki/workflow/WorkflowManager.java   |  2 --
 .../org/apache/wiki/workflow/ApprovalWorkflowTest.java   | 16 ++++------------
 16 files changed, 34 insertions(+), 37 deletions(-)

diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java 
b/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java
index 04ebca9..f131ac8 100644
--- a/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java
+++ b/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java
@@ -95,7 +95,7 @@ public interface Context extends Cloneable, Command {
      *  @since 2.3.14
      *  @see org.apache.wiki.tags.InsertPageTag
      */
-    Page setRealPage( Page wikiPagePage );
+    Page setRealPage( Page wikiPage );
 
     /**
      *  Returns the handling engine.
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java 
b/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java
index 54c9c2d..30cbe8b 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java
@@ -247,7 +247,7 @@ public class DefaultPageManager implements PageManager {
         final WorkflowBuilder builder = WorkflowBuilder.getBuilder( m_engine );
         final Principal submitter = context.getCurrentUser();
         final Step prepTask = m_engine.getManager( TasksManager.class 
).buildPreSaveWikiPageTask( context, proposedText );
-        final Step completionTask = m_engine.getManager( TasksManager.class 
).buildSaveWikiPageTask();
+        final Step completionTask = m_engine.getManager( TasksManager.class 
).buildSaveWikiPageTask( context );
         final String diffText = m_engine.getManager( DifferenceManager.class 
).makeDiff( context, oldText, proposedText );
         final boolean isAuthenticated = 
context.getWikiSession().isAuthenticated();
         final Fact[] facts = new Fact[ 5 ];
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/tasks/DefaultTasksManager.java 
b/jspwiki-main/src/main/java/org/apache/wiki/tasks/DefaultTasksManager.java
index b4a91d6..7d45562 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tasks/DefaultTasksManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tasks/DefaultTasksManager.java
@@ -45,8 +45,8 @@ public class DefaultTasksManager implements TasksManager {
      * {@inheritDoc}
      */
     @Override
-    public Step buildSaveWikiPageTask() {
-        return new SaveWikiPageTask();
+    public Step buildSaveWikiPageTask( final Context context ) {
+        return new SaveWikiPageTask( context );
     }
     
     /**
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tasks/TasksManager.java 
b/jspwiki-main/src/main/java/org/apache/wiki/tasks/TasksManager.java
index 1d1b1ae..3c56f87 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tasks/TasksManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tasks/TasksManager.java
@@ -52,10 +52,11 @@ public interface TasksManager {
     
     /**
      * Builds a save WikiPage task.
-     * 
+     *
+     * @param context associated wiki context.
      * @return a save WikiPage task.
      */
-    Step buildSaveWikiPageTask();
+    Step buildSaveWikiPageTask( Context context );
     
     /**
      * Builds a save user profile task.
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/tasks/auth/SaveUserProfileTask.java
 
b/jspwiki-main/src/main/java/org/apache/wiki/tasks/auth/SaveUserProfileTask.java
index 18325b3..fd6d413 100644
--- 
a/jspwiki-main/src/main/java/org/apache/wiki/tasks/auth/SaveUserProfileTask.java
+++ 
b/jspwiki-main/src/main/java/org/apache/wiki/tasks/auth/SaveUserProfileTask.java
@@ -68,7 +68,7 @@ public class SaveUserProfileTask extends Task {
                                                  profile.getFullname(),
                                                  profile.getEmail(),
                                                  m_engine.getURL( 
ContextEnum.WIKI_LOGIN.getRequestContext(), null, null ) );
-                MailUtil.sendMessage( m_engine.getWikiProperties(), to, 
subject, content);
+                MailUtil.sendMessage( m_engine.getWikiProperties(), to, 
subject, content );
             } catch ( final AddressException e) {
                 LOG.debug( e.getMessage(), e );
             } catch ( final MessagingException me ) {
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/PreSaveWikiPageTask.java
 
b/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/PreSaveWikiPageTask.java
index 5e65649..8aeca27 100644
--- 
a/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/PreSaveWikiPageTask.java
+++ 
b/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/PreSaveWikiPageTask.java
@@ -73,7 +73,6 @@ public class PreSaveWikiPageTask extends Task {
         final String saveText = m_context.getEngine().getManager( 
FilterManager.class ).doPreSaveFiltering(m_context, m_proposedText);
 
         // Stash the wiki context, old and new text as workflow attributes
-        getWorkflowContext().put( 
WorkflowManager.WF_WP_SAVE_ATTR_PRESAVE_WIKI_CONTEXT, m_context );
         getWorkflowContext().put( 
WorkflowManager.WF_WP_SAVE_FACT_PROPOSED_TEXT, saveText );
         return Outcome.STEP_COMPLETE;
     }
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java 
b/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java
index 0063c40..53ce0b0 100644
--- 
a/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java
+++ 
b/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java
@@ -38,11 +38,14 @@ public class SaveWikiPageTask extends Task {
 
     private static final long serialVersionUID = 3190559953484411420L;
 
+    final Context context;
+
     /**
      * Creates the Task.
      */
-    public SaveWikiPageTask() {
+    public SaveWikiPageTask( final Context context ) {
         super( TasksManager.WIKIPAGE_SAVE_TASK_MESSAGE_KEY );
+        this.context = context;
     }
 
     /**
@@ -51,7 +54,6 @@ public class SaveWikiPageTask extends Task {
     @Override
     public Outcome execute() throws WikiException {
         // Retrieve attributes
-        final Context context = ( Context )getWorkflowContext().get( 
WorkflowManager.WF_WP_SAVE_ATTR_PRESAVE_WIKI_CONTEXT );
         final String proposedText = ( String )getWorkflowContext().get( 
WorkflowManager.WF_WP_SAVE_FACT_PROPOSED_TEXT );
 
         final Engine engine = context.getEngine();
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/workflow/AbstractStep.java 
b/jspwiki-main/src/main/java/org/apache/wiki/workflow/AbstractStep.java
index 414aa20..ca575dd 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/workflow/AbstractStep.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/workflow/AbstractStep.java
@@ -20,6 +20,7 @@ package org.apache.wiki.workflow;
 
 import org.apache.wiki.api.exceptions.WikiException;
 
+import java.io.Serializable;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -55,7 +56,7 @@ public abstract class AbstractStep implements Step {
     private int workflowId;
 
     /** attribute map. */
-    private Map< String, Object > workflowContext;
+    private Map< String, Serializable > workflowContext;
 
     private Outcome m_outcome;
 
@@ -89,7 +90,7 @@ public abstract class AbstractStep implements Step {
      * @param messageKey the Step's message key, such as {@code 
decision.editPageApproval}. By convention, the message prefix should
      *                   be a lower-case version of the Step's type, plus a 
period (<em>e.g.</em>, {@code task.} and {@code decision.}).
      */
-    public AbstractStep( final int workflowId, final Map< String, Object > 
workflowContext, final String messageKey ) {
+    public AbstractStep( final int workflowId, final Map< String, Serializable 
> workflowContext, final String messageKey ) {
         this( messageKey );
         setWorkflow( workflowId, workflowContext );
     }
@@ -216,7 +217,7 @@ public abstract class AbstractStep implements Step {
      * @param workflowId the parent workflow id to set
      * @param workflowContext the parent workflow context to set
      */
-    public final synchronized void setWorkflow( final int workflowId, final 
Map< String, Object > workflowContext ) {
+    public final synchronized void setWorkflow( final int workflowId, final 
Map< String, Serializable > workflowContext ) {
         this.workflowId = workflowId;
         this.workflowContext = workflowContext;
     }
@@ -225,7 +226,7 @@ public abstract class AbstractStep implements Step {
         return workflowId;
     }
 
-    public Map< String, Object > getWorkflowContext() {
+    public Map< String, Serializable > getWorkflowContext() {
         return workflowContext;
     }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/workflow/Decision.java 
b/jspwiki-main/src/main/java/org/apache/wiki/workflow/Decision.java
index 07749c1..9e4f97e 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/workflow/Decision.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/workflow/Decision.java
@@ -21,6 +21,7 @@ package org.apache.wiki.workflow;
 import org.apache.wiki.api.exceptions.WikiException;
 import org.apache.wiki.event.WorkflowEvent;
 
+import java.io.Serializable;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -68,7 +69,7 @@ public abstract class Decision extends AbstractStep {
      * @param actor the Principal (<em>e.g.</em>, a WikiPrincipal, Role, 
GroupPrincipal) who is required to select an appropriate Outcome
      * @param defaultOutcome the Outcome that the user interface will 
recommend as the default choice
      */
-    public Decision( final int workflowId, final Map< String, Object > 
workflowContext, final String messageKey, final Principal actor, final Outcome 
defaultOutcome ) {
+    public Decision( final int workflowId, final Map< String, Serializable > 
workflowContext, final String messageKey, final Principal actor, final Outcome 
defaultOutcome ) {
         super( workflowId, workflowContext, messageKey );
         m_actor = actor;
         m_defaultOutcome = defaultOutcome;
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/workflow/SimpleDecision.java 
b/jspwiki-main/src/main/java/org/apache/wiki/workflow/SimpleDecision.java
index bae296a..8efd257 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/workflow/SimpleDecision.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/workflow/SimpleDecision.java
@@ -18,6 +18,7 @@
  */
 package org.apache.wiki.workflow;
 
+import java.io.Serializable;
 import java.security.Principal;
 import java.util.Map;
 
@@ -38,7 +39,7 @@ public class SimpleDecision extends Decision {
      * @param messageKey the message key that describes the Decision, which 
will be presented in the UI
      * @param actor the Principal (<em>e.g.</em>, WikiPrincipal, 
GroupPrincipal, Role) who will decide
      */
-    public SimpleDecision( final int workflowId, final Map< String, Object > 
workflowContext, final String messageKey, final Principal actor ) {
+    public SimpleDecision( final int workflowId, final Map< String, 
Serializable > workflowContext, final String messageKey, final Principal actor 
) {
         super( workflowId, workflowContext, messageKey, actor, 
Outcome.DECISION_APPROVE );
 
         // Add the other default outcomes
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/workflow/SimpleNotification.java 
b/jspwiki-main/src/main/java/org/apache/wiki/workflow/SimpleNotification.java
index 44d88a2..fbae727 100644
--- 
a/jspwiki-main/src/main/java/org/apache/wiki/workflow/SimpleNotification.java
+++ 
b/jspwiki-main/src/main/java/org/apache/wiki/workflow/SimpleNotification.java
@@ -20,6 +20,7 @@ package org.apache.wiki.workflow;
 
 import org.apache.wiki.api.exceptions.WikiException;
 
+import java.io.Serializable;
 import java.security.Principal;
 import java.util.Map;
 
@@ -43,7 +44,7 @@ public final class SimpleNotification extends Decision {
      * @param messageKey the message key
      * @param actor the Principal who will acknowledge the message
      */
-    public SimpleNotification( final int workflowId, final Map< String, Object 
> workflowContext, final String messageKey, final Principal actor ) {
+    public SimpleNotification( final int workflowId, final Map< String, 
Serializable > workflowContext, final String messageKey, final Principal actor 
) {
         super( workflowId, workflowContext, messageKey, actor, 
Outcome.DECISION_ACKNOWLEDGE );
     }
     
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/workflow/Step.java 
b/jspwiki-main/src/main/java/org/apache/wiki/workflow/Step.java
index 5d890cc..c73bcef 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/workflow/Step.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/workflow/Step.java
@@ -188,6 +188,6 @@ public interface Step extends Serializable {
      * @param workflowId the parent workflow id to set
      * @param workflowContext the parent workflow context to set
      */
-    void setWorkflow( final int workflowId, final Map< String, Object > 
workflowContext );
+    void setWorkflow( final int workflowId, final Map< String, Serializable > 
workflowContext );
 
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/workflow/Task.java 
b/jspwiki-main/src/main/java/org/apache/wiki/workflow/Task.java
index 5e560ee..49b5585 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/workflow/Task.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/workflow/Task.java
@@ -18,6 +18,7 @@
  */
 package org.apache.wiki.workflow;
 
+import java.io.Serializable;
 import java.security.Principal;
 import java.util.Map;
 
@@ -58,7 +59,7 @@ public abstract class Task extends AbstractStep {
      * @param workflowContext the parent workflow context to set
      * @param messageKey      the i18n message key
      */
-    public Task( final int workflowId, final Map< String, Object > 
workflowContext, final String messageKey ) {
+    public Task( final int workflowId, final Map< String, Serializable > 
workflowContext, final String messageKey ) {
         this( messageKey );
         setWorkflow( workflowId, workflowContext );
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/workflow/Workflow.java 
b/jspwiki-main/src/main/java/org/apache/wiki/workflow/Workflow.java
index 42c6c2f..f06dc16 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/workflow/Workflow.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/workflow/Workflow.java
@@ -105,7 +105,7 @@ import java.util.concurrent.atomic.AtomicInteger;
  * </p>
  * <ul>
  * <li><strong>Named attributes</strong> are simple key-value pairs that 
Workflow participants can get or set. Keys are Strings; values
- * can be any Object. Named attributes are set with {@link 
#setAttribute(String, Object)} and retrieved with {@link 
#getAttribute(String)}.</li>
+ * can be any Object. Named attributes are set with {@link 
#setAttribute(String, Serializable)} and retrieved with {@link 
#getAttribute(String)}.</li>
  * <li><strong>Message arguments</strong> are used in combination with 
JSPWiki's {@link org.apache.wiki.i18n.InternationalizationManager} to
  * create language-independent user interface messages. The message argument 
array is retrieved via {@link #getMessageArguments()}; the
  * first two array elements will always be these: a String representing work 
flow owner's name, and a String representing the current
@@ -186,7 +186,7 @@ public class Workflow implements Serializable {
     public static final int CREATED = -2;
 
     /** attribute map. */
-    private Map< String, Object > m_attributes;
+    private Map< String, Serializable > m_attributes;
 
     /** The initial Step for this Workflow. */
     private Step m_firstStep;
@@ -321,7 +321,7 @@ public class Workflow implements Serializable {
      *
      * @return workflow's attributes.
      */
-    public final Map< String, Object > getAttributes() {
+    public final Map< String, Serializable > getAttributes() {
         return m_attributes;
     }
 
@@ -495,7 +495,7 @@ public class Workflow implements Serializable {
      * @param attr the attribute name
      * @param obj  the value
      */
-    public final void setAttribute( final String attr, final Object obj ) {
+    public final void setAttribute( final String attr, final Serializable obj 
) {
         m_attributes.put( attr, obj );
     }
 
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/workflow/WorkflowManager.java 
b/jspwiki-main/src/main/java/org/apache/wiki/workflow/WorkflowManager.java
index a0cfdd2..064b93b 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/workflow/WorkflowManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/workflow/WorkflowManager.java
@@ -36,8 +36,6 @@ import java.util.Set;
  */
 public interface WorkflowManager extends WikiEventListener, Initializable {
 
-    /** The workflow attribute which stores the wikiContext. */
-    String WF_WP_SAVE_ATTR_PRESAVE_WIKI_CONTEXT = "wikiContext";
     /** The name of the key from jspwiki.properties which defines who shall 
approve the workflow of storing a wikipage.  Value is <tt>{@value}</tt> */
     String WF_WP_SAVE_APPROVER = "workflow.saveWikiPage";
     /** The message key for storing the Decision text for saving a page.  
Value is {@value}. */
diff --git 
a/jspwiki-main/src/test/java/org/apache/wiki/workflow/ApprovalWorkflowTest.java 
b/jspwiki-main/src/test/java/org/apache/wiki/workflow/ApprovalWorkflowTest.java
index ba05915..6dbb9ee 100644
--- 
a/jspwiki-main/src/test/java/org/apache/wiki/workflow/ApprovalWorkflowTest.java
+++ 
b/jspwiki-main/src/test/java/org/apache/wiki/workflow/ApprovalWorkflowTest.java
@@ -229,26 +229,18 @@ public class ApprovalWorkflowTest {
         // Create a sample test page and try to save it
         final String pageName = "SaveWikiPageWorkflow-Test" + 
System.currentTimeMillis();
         final String text = "This is a test!";
-        try {
-            m_engine.saveTextAsJanne(pageName, text);
-        } catch( final WikiException e ) {
-            Assertions.assertTrue( e instanceof FilterException );
-            Assertions.assertEquals( "Page save aborted.", e.getMessage() );
-            return;
-        }
-        Assertions.fail( "Page save should have thrown a FilterException, but 
didn't." );
+        final FilterException fe = Assertions.assertThrows( 
FilterException.class, () -> m_engine.saveTextAsJanne( pageName, text ) );
+        Assertions.assertEquals( "Page save aborted.", fe.getMessage() );
     }
 
     /**
-     * Sample "prep task" that sets an attribute in the workflow indicating
-     * that it ran successfully,
+     * Sample "prep task" that sets an attribute in the workflow indicating 
that it ran successfully,
      */
     public static class TestPrepTask extends Task {
 
         private static final long serialVersionUID = 1L;
 
-        public TestPrepTask( final String messageKey )
-        {
+        public TestPrepTask( final String messageKey ) {
             super( messageKey );
         }
 

Reply via email to