Package org.ametys.cms.workflow
Class ContentWorkflowHelper
- java.lang.Object
-
- org.apache.avalon.framework.logger.AbstractLogEnabled
-
- org.ametys.cms.workflow.ContentWorkflowHelper
-
- All Implemented Interfaces:
Component
,Contextualizable
,LogEnabled
,Serviceable
public class ContentWorkflowHelper extends AbstractLogEnabled implements Serviceable, Contextualizable, Component
A component to do workflow actions on Content
-
-
Field Summary
Fields Modifier and Type Field Description private Context
_context
protected ObservationManager
_observationManager
The observation managerprotected CurrentUserProvider
_userProvider
Component to get the current userprotected WorkflowProvider
_workflowProvider
Workflow instance.static String
ROLE
The component role
-
Constructor Summary
Constructors Constructor Description ContentWorkflowHelper()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
_applyChanges(WorkflowAwareContent content, int actionId, String comment)
Apply changes on content: create a new version and notify listeners.private Map<String,Object>
_doInitialize(String workflowName, String contentName, int initialActionId, Map<String,Object> inputs)
private void
_getCommonInputsForCreation(Map<String,Object> inputs, String contentName, String[] contentTypes, String[] mixins, String parentContentId, String parentContentMetadatapath)
protected ModifiableCompositeMetadata
_getCompositeFromValuePath(WorkflowAwareContent contentToEdit, String valuePath)
Get the last composite and the metadata name from a value path.private UserIdentity
_getUser()
protected void
_removeEntry(int position, ModifiableCompositeMetadata repositoryComposite)
Removes the repeater entry at the given position.void
contextualize(Context context)
Map<String,Object>
createContent(String workflowName, int initialActionId, String contentName, String contentTitle, String[] contentTypes, String[] mixins, String languageCode)
Creates a content using the workflow (with the CreateContentFunction).Map<String,Object>
createContent(String workflowName, int initialActionId, String contentName, String contentTitle, String[] contentTypes, String[] mixins, String languageCode, String parentContentId, String parentContentMetadatapath)
Creates a content using the workflow (with the CreateContentFunction).Map<String,Object>
createContent(String workflowName, int initialActionId, String contentName, String contentTitle, String[] contentTypes, String[] mixins, String languageCode, String parentContentId, String parentContentMetadatapath, Map<String,Object> inputs)
Creates a content using the workflow (with the CreateContentFunction).Map<String,Object>
createContent(String workflowName, int initialActionId, String contentName, Map<String,String> titleVariants, String[] contentTypes, String[] mixins)
Creates a multilingual content with a multilingual title using the workflow (with the CreateContentFunction).Map<String,Object>
createContent(String workflowName, int initialActionId, String contentName, Map<String,String> titleVariants, String[] contentTypes, String[] mixins, String parentContentId, String parentContentMetadatapath)
Creates a multilingual content with a multilingual title using the workflow (with the CreateContentFunction).Map<String,Object>
createContent(String workflowName, int initialActionId, String contentName, Map<String,String> titleVariants, String[] contentTypes, String[] mixins, String parentContentId, String parentContentMetadatapath, Map<String,Object> inputs)
Creates a multilingual content with a multilingual title using the workflow (with the CreateContentFunction).Map<String,Object>
doAction(WorkflowAwareContent content, int actionId)
Do a workflow action on a content.Map<String,Object>
doAction(WorkflowAwareContent content, int actionId, Map<String,Object> inputs)
Do a workflow action on a content.int[]
getAvailableActions(WorkflowAwareContent content)
Get the available workflow actions for the contentint[]
getAvailableActions(WorkflowAwareContent content, Map<String,Object> inputs)
Get the available workflow actions for the contentboolean
isAvailableAction(WorkflowAwareContent content, int actionId)
Determines if the workflow action is availableboolean
removeMetadata(WorkflowAwareContent contentToEdit, String valuePath, int actionId, String comment)
Remove metadata from content and apply changesboolean
removeRepeaterEntry(WorkflowAwareContent contentToEdit, String entryPath, int actionId, String comment)
Remove repeater entry from content and apply changesboolean
removeStringValueFromMultipleMetadata(WorkflowAwareContent contentToEdit, String valuePath, String valueToRemove, int actionId, String comment)
Remove string value of multiple metadata from content and apply changesvoid
service(ServiceManager manager)
-
Methods inherited from class org.apache.avalon.framework.logger.AbstractLogEnabled
enableLogging, getLogger, setupLogger, setupLogger, setupLogger
-
-
-
-
Field Detail
-
_userProvider
protected CurrentUserProvider _userProvider
Component to get the current user
-
_workflowProvider
protected WorkflowProvider _workflowProvider
Workflow instance.
-
_observationManager
protected ObservationManager _observationManager
The observation manager
-
-
Constructor Detail
-
ContentWorkflowHelper
public ContentWorkflowHelper()
-
-
Method Detail
-
contextualize
public void contextualize(Context context) throws ContextException
- Specified by:
contextualize
in interfaceContextualizable
- Throws:
ContextException
-
service
public void service(ServiceManager manager) throws ServiceException
- Specified by:
service
in interfaceServiceable
- Throws:
ServiceException
-
createContent
public Map<String,Object> createContent(String workflowName, int initialActionId, String contentName, String contentTitle, String[] contentTypes, String[] mixins, String languageCode) throws AmetysRepositoryException, com.opensymphony.workflow.WorkflowException
Creates a content using the workflow (with the CreateContentFunction).- Parameters:
workflowName
- The name of the workflow to createinitialActionId
- The workflow action id that creates contentcontentName
- The new namecontentTitle
- The new titlecontentTypes
- The new content types. Cannot be null. Cannot be empty.mixins
- The new mixins. Can be null. Can be empty.languageCode
- The language code of the new content (such as 'fr', 'en'...)- Returns:
- The workflow result map. See the create content function used to get the new content. Can be under the key CreateContentFunction.CONTENT_KEY, and the id under the key "contentId"
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred while doing the action on the workflowAmetysRepositoryException
- If cannot get the workflow identifier of the content
-
createContent
public Map<String,Object> createContent(String workflowName, int initialActionId, String contentName, Map<String,String> titleVariants, String[] contentTypes, String[] mixins) throws AmetysRepositoryException, com.opensymphony.workflow.WorkflowException
Creates a multilingual content with a multilingual title using the workflow (with the CreateContentFunction).- Parameters:
workflowName
- The name of the workflow to createinitialActionId
- The workflow action id that creates contentcontentName
- The new nametitleVariants
- The title's variantscontentTypes
- The new content types. Cannot be null. Cannot be empty.mixins
- The new mixins. Can be null. Can be empty.- Returns:
- The workflow result map. See the create content function used to get the new content. Can be under the key CreateContentFunction.CONTENT_KEY, and the id under the key "contentId"
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred while doing the action on the workflowAmetysRepositoryException
- If cannot get the workflow identifier of the content
-
createContent
public Map<String,Object> createContent(String workflowName, int initialActionId, String contentName, String contentTitle, String[] contentTypes, String[] mixins, String languageCode, String parentContentId, String parentContentMetadatapath) throws AmetysRepositoryException, com.opensymphony.workflow.WorkflowException
Creates a content using the workflow (with the CreateContentFunction).- Parameters:
workflowName
- The name of the workflow to createinitialActionId
- The workflow action id that creates contentcontentName
- The new namecontentTitle
- The new titlecontentTypes
- The new content types. Cannot be null. Cannot be empty.mixins
- The new mixins. Can be null. Can be empty.languageCode
- The language code of the new content (such as 'fr', 'en'...)parentContentId
- If the new content is a subcontent, the parent content identifier.parentContentMetadatapath
- If the new content is a subcontent, the path of the metadata where the new content will take place in its parent- Returns:
- The workflow result map. See the create content function used to get the new content. Can be under the key CreateContentFunction.CONTENT_KEY, and the id under the key "contentId"
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred while doing the action on the workflowAmetysRepositoryException
- If cannot get the workflow identifier of the content
-
createContent
public Map<String,Object> createContent(String workflowName, int initialActionId, String contentName, Map<String,String> titleVariants, String[] contentTypes, String[] mixins, String parentContentId, String parentContentMetadatapath) throws AmetysRepositoryException, com.opensymphony.workflow.WorkflowException
Creates a multilingual content with a multilingual title using the workflow (with the CreateContentFunction).- Parameters:
workflowName
- The name of the workflow to createinitialActionId
- The workflow action id that creates contentcontentName
- The new nametitleVariants
- The title's variantscontentTypes
- The new content types. Cannot be null. Cannot be empty.mixins
- The new mixins. Can be null. Can be empty.parentContentId
- If the new content is a subcontent, the parent content identifier.parentContentMetadatapath
- If the new content is a subcontent, the path of the metadata where the new content will take place in its parent- Returns:
- The workflow result map. See the create content function used to get the new content. Can be under the key CreateContentFunction.CONTENT_KEY, and the id under the key "contentId"
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred while doing the action on the workflowAmetysRepositoryException
- If cannot get the workflow identifier of the content
-
createContent
public Map<String,Object> createContent(String workflowName, int initialActionId, String contentName, String contentTitle, String[] contentTypes, String[] mixins, String languageCode, String parentContentId, String parentContentMetadatapath, Map<String,Object> inputs) throws AmetysRepositoryException, com.opensymphony.workflow.WorkflowException
Creates a content using the workflow (with the CreateContentFunction).- Parameters:
workflowName
- The name of the workflow to createinitialActionId
- The workflow action id that creates contentcontentName
- The new namecontentTitle
- The new titlecontentTypes
- The new content types. Cannot be null. Cannot be empty.mixins
- The new mixins. Can be null. Can be empty.languageCode
- The language code of the new content (such as 'fr', 'en'...)parentContentId
- If the new content is a subcontent, the parent content identifier.parentContentMetadatapath
- If the new content is a subcontent, the path of the metadata where the new content will take place in its parentinputs
- The parameters to transmit to the workflow functions. Cannot be null.- Returns:
- The workflow result map. See the create content function used to get the new content. Can be under the key CreateContentFunction.CONTENT_KEY, and the id under the key "contentId"
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred while doing the action on the workflowAmetysRepositoryException
- If cannot get the workflow identifier of the content
-
createContent
public Map<String,Object> createContent(String workflowName, int initialActionId, String contentName, Map<String,String> titleVariants, String[] contentTypes, String[] mixins, String parentContentId, String parentContentMetadatapath, Map<String,Object> inputs) throws AmetysRepositoryException, com.opensymphony.workflow.WorkflowException
Creates a multilingual content with a multilingual title using the workflow (with the CreateContentFunction).- Parameters:
workflowName
- The name of the workflow to createinitialActionId
- The workflow action id that creates contentcontentName
- The new nametitleVariants
- The title's variantscontentTypes
- The new content types. Cannot be null. Cannot be empty.mixins
- The new mixins. Can be null. Can be empty.parentContentId
- If the new content is a subcontent, the parent content identifier.parentContentMetadatapath
- If the new content is a subcontent, the path of the metadata where the new content will take place in its parentinputs
- The parameters to transmit to the workflow functions. Cannot be null.- Returns:
- The workflow result map. See the create content function used to get the new content. Can be under the key CreateContentFunction.CONTENT_KEY, and the id under the key "contentId"
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred while doing the action on the workflowAmetysRepositoryException
- If cannot get the workflow identifier of the content
-
_doInitialize
private Map<String,Object> _doInitialize(String workflowName, String contentName, int initialActionId, Map<String,Object> inputs) throws com.opensymphony.workflow.WorkflowException
- Throws:
com.opensymphony.workflow.WorkflowException
-
_getCommonInputsForCreation
private void _getCommonInputsForCreation(Map<String,Object> inputs, String contentName, String[] contentTypes, String[] mixins, String parentContentId, String parentContentMetadatapath)
-
isAvailableAction
public boolean isAvailableAction(WorkflowAwareContent content, int actionId)
Determines if the workflow action is available- Parameters:
content
- the content to consider.actionId
- the workflow action id to check- Returns:
true
if the wortkflow action is available
-
getAvailableActions
public int[] getAvailableActions(WorkflowAwareContent content)
Get the available workflow actions for the content- Parameters:
content
- The content to consider. Cannot be null.- Returns:
- The array of actions ids that are available now
-
getAvailableActions
public int[] getAvailableActions(WorkflowAwareContent content, Map<String,Object> inputs)
Get the available workflow actions for the content- Parameters:
content
- The content to consider. Cannot be null.inputs
- The parameters to transmit to the workflow functions. Cannot be null.- Returns:
- The array of actions ids that are available now
-
doAction
public Map<String,Object> doAction(WorkflowAwareContent content, int actionId) throws AmetysRepositoryException, com.opensymphony.workflow.WorkflowException
Do a workflow action on a content.- Parameters:
content
- The content to act on. Cannot be null.actionId
- The id of the workflow action to do- Returns:
- The results of the functions
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred while doing the action on the workflowAmetysRepositoryException
- If cannot get the workflow identifier of the content
-
doAction
public Map<String,Object> doAction(WorkflowAwareContent content, int actionId, Map<String,Object> inputs) throws AmetysRepositoryException, com.opensymphony.workflow.WorkflowException
Do a workflow action on a content.- Parameters:
content
- The content to act on. Cannot be null.actionId
- The id of the workflow action to doinputs
- The parameters to transmit to the workflow functions. Cannot be null. The special key AbstractWorkflowComponent.CONTEXT_PARAMETERS_KEY will be filled with the parent context if null (this means that if your are in a request dispatched, you will automatically get the js parameters).- Returns:
- The results of the functions
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred while doing the action on the workflowAmetysRepositoryException
- If cannot get the workflow identifier of the content
-
_getUser
private UserIdentity _getUser()
-
removeMetadata
public boolean removeMetadata(WorkflowAwareContent contentToEdit, String valuePath, int actionId, String comment) throws com.opensymphony.workflow.WorkflowException
Remove metadata from content and apply changes- Parameters:
contentToEdit
- the content to editvaluePath
- the value path of the metadata to removeactionId
- the workflow action id to execute if changes have been madecomment
- the comment of the action. Can be null.- Returns:
- true if changes are made
- Throws:
com.opensymphony.workflow.WorkflowException
- if failed to remove metadata
-
removeStringValueFromMultipleMetadata
public boolean removeStringValueFromMultipleMetadata(WorkflowAwareContent contentToEdit, String valuePath, String valueToRemove, int actionId, String comment) throws com.opensymphony.workflow.WorkflowException
Remove string value of multiple metadata from content and apply changes- Parameters:
contentToEdit
- the content to editvaluePath
- the value path of the metadatavalueToRemove
- the value to removeactionId
- the workflow action id to execute if changes have been madecomment
- the comment of the action. Can be null.- Returns:
- true if changes are made
- Throws:
com.opensymphony.workflow.WorkflowException
- if an error occurred
-
removeRepeaterEntry
public boolean removeRepeaterEntry(WorkflowAwareContent contentToEdit, String entryPath, int actionId, String comment) throws com.opensymphony.workflow.WorkflowException
Remove repeater entry from content and apply changes- Parameters:
contentToEdit
- the content to editentryPath
- the path of the entry to removeactionId
- the workflow action id to execute if changes have been madecomment
- the comment of the action- Returns:
- true if changes are made
- Throws:
com.opensymphony.workflow.WorkflowException
- if an error occurred
-
_removeEntry
protected void _removeEntry(int position, ModifiableCompositeMetadata repositoryComposite)
Removes the repeater entry at the given position. The position starts at index 1. The position can be an integer between 1 and the repeater size to remove an entry from the beginning Or the position can an integer between 0 and - the repeater size to remove an entry from the end (0 means at the end, -1 means before the last one and so on)- Parameters:
position
- The position of the entry to removerepositoryComposite
- the repository composite of the repeater- Throws:
IllegalArgumentException
- if the position is not between the negative and positive repeater size
-
_getCompositeFromValuePath
protected ModifiableCompositeMetadata _getCompositeFromValuePath(WorkflowAwareContent contentToEdit, String valuePath)
Get the last composite and the metadata name from a value path. For example, values[1]/value returns the composite of the first data of values repeater and the metadata name value- Parameters:
contentToEdit
- the content to editvaluePath
- the value path- Returns:
- the pair of composite and metadata name
-
_applyChanges
protected void _applyChanges(WorkflowAwareContent content, int actionId, String comment) throws com.opensymphony.workflow.WorkflowException
Apply changes on content: create a new version and notify listeners.- Parameters:
content
- the content to apply changesactionId
- the id of workflow action to executecomment
- the action comment. Can be null.- Throws:
com.opensymphony.workflow.WorkflowException
- if an error occurred
-
-