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 ); }
