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_contextprotected ObservationManager_observationManagerThe observation managerprotected CurrentUserProvider_userProviderComponent to get the current userprotected WorkflowProvider_workflowProviderWorkflow instance.static StringROLEThe 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.voidcontextualize(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 contentbooleanisAvailableAction(WorkflowAwareContent content, int actionId)Determines if the workflow action is availablebooleanremoveMetadata(WorkflowAwareContent contentToEdit, String valuePath, int actionId, String comment)Remove metadata from content and apply changesbooleanremoveRepeaterEntry(WorkflowAwareContent contentToEdit, String entryPath, int actionId, String comment)Remove repeater entry from content and apply changesbooleanremoveStringValueFromMultipleMetadata(WorkflowAwareContent contentToEdit, String valuePath, String valueToRemove, int actionId, String comment)Remove string value of multiple metadata from content and apply changesvoidservice(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:
contextualizein interfaceContextualizable- Throws:
ContextException
-
service
public void service(ServiceManager manager) throws ServiceException
- Specified by:
servicein 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:
trueif 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
-
-