Package org.ametys.cms.workflow
Class EditContentFunction
- java.lang.Object
-
- org.ametys.plugins.workflow.AbstractWorkflowComponent
-
- org.ametys.cms.workflow.AbstractContentWorkflowComponent
-
- org.ametys.cms.workflow.EditContentFunction
-
- All Implemented Interfaces:
com.opensymphony.workflow.FunctionProvider
,Initializable
,LogEnabled
,Serviceable
- Direct Known Subclasses:
EditSynchronizedContentFunction
public class EditContentFunction extends AbstractContentWorkflowComponent implements com.opensymphony.workflow.FunctionProvider, Initializable
OSWorkflow function to edit a content.
Values are set either programmatically, or parsed from form submission by theirElementType
s according to theContent
model.
The required transient variables:
- AbstractContentWorkflowComponent.RESULT_MAP_KEY - Map<String, Object> The map containing the results of the function.
- AbstractContentWorkflowComponent.RESULT_MAP_KEY.result - String "true" when everything goes fine. Missing in other case.
- AbstractContentWorkflowComponent.RESULT_MAP_KEY.<MetadataPath> - Errors Each error during edition will be set here. Key will be the metadata path (with '.' separator). Value will be the error message.
- AbstractContentWorkflowComponent.CONTENT_KEY - WorkflowAwareContent The content that will be edited. Should have the lock token.
- AbstractWorkflowComponent.CONTEXT_PARAMETERS_KEY - Map<String, Object> Contains the following parameters:
- AbstractWorkflowComponent.CONTEXT_PARAMETERS_KEY.QUIT - boolean True to specify edition mode will be quit, this imply to unlock the content.
- AbstractWorkflowComponent.CONTEXT_PARAMETERS_KEY.VIEW_PARAM The name of the view to use and to check attributes. If missing a view will be created from values.
- AbstractWorkflowComponent.CONTEXT_PARAMETERS_KEY.FALLBACK_VIEW_PARAM The name of the view to use if the initial view does not exist on the Content's model.
- AbstractWorkflowComponent.CONTEXT_PARAMETERS_KEY.VALUES_KEY - Map<String, Object> The typed values. If present, raw values must not be present.
- AbstractWorkflowComponent.CONTEXT_PARAMETERS_KEY.FORM_RAW_VALUES - Map<String, Object> The values of the submitted form. If present, types values must not be present.
- AbstractWorkflowComponent.CONTEXT_PARAMETERS_KEY.FORM_RAW_VALUES.<MetadataPath> Object Key is the path of the metadata ('.' separated) prefixed by FORM_ELEMENTS_PREFIX. Value is a depending on the type of metadata. Sometimes types require additional information. In that case : Key is a metadata path ('.' separated) prefixed by INTERNAL_FORM_ELEMENTS_PREFIX and suffixed by '.' + an additional information name.
- AbstractWorkflowComponent.CONTEXT_PARAMETERS_KEY.FORM_RAW_COMMENTS - Map<String, List<Map<String, String>>> The comments of the metadata of the submitted form :
- AbstractContentWorkflowComponent.RESULT_MAP_KEY.<MetadataPath> - List<Map<String, String>> Key is the path of the metadata ('.' separated) prefixed by FORM_ELEMENTS_PREFIX. Value is the list of comments.
- AbstractContentWorkflowComponent.RESULT_MAP_KEY.<MetadataPath>.<X> - <Map<String, String> A comment with the following parameters
- AbstractContentWorkflowComponent.RESULT_MAP_KEY.<MetadataPath>.<X>.author String The login of the author of the comment
- AbstractContentWorkflowComponent.RESULT_MAP_KEY.<MetadataPath>.<X>.text String The text of the comment
- AbstractContentWorkflowComponent.RESULT_MAP_KEY.<MetadataPath>.<X>.date String The date of the comment using the ISODateTimeFormat (See DateUtils.parse)
Where <MetadataPath> is the path of a metadata (using a '.' separator). In some cases it is prefixed by FORM_ELEMENTS_PREFIX. A metadata path with in a repeater include the number of the repeated instance (1 based).
Where <X> Is an element of the parent list.
-
-
Field Summary
Fields Modifier and Type Field Description protected ContentDataHelper
_contentDataHelper
Helper for collecting content referencesprotected ContentTypeExtensionPoint
_contentTypeExtensionPoint
Content type extension point.protected ContentTypesHelper
_contentTypesHelper
Helper for content typesprotected ExternalizableDataProviderExtensionPoint
_externalizableDataProviderEP
Provider for externalizable dataprotected ObservationManager
_observationManager
Observation manager available to subclasses.protected OutgoingReferencesExtractor
_outgoingReferencesExtractor
The outgoing references extractorprotected UserManager
_userManager
The user managerprotected ContentWorkflowHelper
_workflowHelper
The content workflow helper.static String
FALLBACK_VIEW_NAME
Fallback view name parameter.static String
FORM_ELEMENTS_PREFIX
Prefix for HTML form elements.static String
FORM_RAW_COMMENTS
Request parameter key for the field comments.static String
FORM_RAW_VALUES
Request parameter key for the field values.static String
GLOBAL_ERROR_KEY
The key for global errorsstatic String
INTERNAL_FORM_ELEMENTS_PREFIX
Prefix for internal HTML form elements.static int
INVERT_EDIT_ACTION_ID
Default action id of editing revert relations.static String
INVERT_RELATION_EDIT_WORKFLOW_ACTION_ID
Constant for storing the action id for editing revert relations.static String
LOCAL_ONLY
Local only parameter.static String
QUIT
Quit edition mode parameter.static String
SYNCHRONIZATION_RESULT
Optional previous synchronization resultstatic String
VALUES_KEY
Inputs key for typed values.static String
VIEW
View parameter.static String
VIEW_ITEMS
View items parameter.static String
VIEW_NAME
View name parameter.-
Fields inherited from class org.ametys.cms.workflow.AbstractContentWorkflowComponent
_contentHelper, CONTENT_KEY, HAS_CHANGED_KEY
-
Fields inherited from class org.ametys.plugins.workflow.AbstractWorkflowComponent
_logger, _manager, CONTEXT_PARAMETERS_KEY, FAIL_CONDITIONS_KEY, RESULT_MAP_KEY, WORKFLOW_ERRORS_KEY, WORKFLOW_WARNS_KEY
-
-
Constructor Summary
Constructors Constructor Description EditContentFunction()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected Object
_convertValue(ElementDefinition definition, Object value, Map transientVars)
Converts the given value according to the given definition If the value is multiple, an array is retrieved with each value converted to the right typeprotected ContentSynchronizationResult
additionalOperations(ModifiableContent content, Map transientVars)
Allow to do some other modifications on the given content before saving changesvoid
execute(Map transientVars, Map args, com.opensymphony.module.propertyset.PropertySet ps)
protected void
extractOutgoingReferences(ModifiableContent content, SynchronizationResult synchronizationResult)
Analyze the content to extract outgoing references and store themprotected int
getInvertEditActionId(Map transientVars, Content referencedContent)
Get the identifier of the invert edit actionprotected ContentSynchronizationContext
getSynchronizationContext(Map transientVars)
Retrieves the synchronization contextprotected ExternalizableDataProvider.ExternalizableDataStatus
getValueExternalizableDataStatus(Content content, ModelItem definition, Map transientVars)
Get the status of the value to modifyprotected Map<String,Object>
getValues(View view, ModifiableContent content, Map<String,Object> typedValues, Map<String,Object> rawValues, Map<String,List<Map<String,String>>> rawComments, boolean localOnly, Map transientVars)
Computes the actual typed values from the input.protected View
getView(Map<String,Object> parameters, Map<String,Object> values, Map<String,Object> rawValues, Content content)
Get the view for the contentprotected void
globalValidate(View view, Content content, Map<String,Object> values, AllErrors allErrors)
Performs a global validation of the Content, based on declaredContentValidator
s.void
initialize()
protected boolean
invertRelationEnabled()
Template method to indicates if invert relation should be taken into account during the whole edition.protected void
notifyContentModified(Content content, Map transientVars, SynchronizationResult synchronizationResult)
Notify observers that the content has been modifiedprotected void
notifyContentModifying(Content content, Map<String,Object> values, Map transientVars)
Notify observers that the content is being modifiedprotected Collection<ReferencedContents>
prepareSynchronize(ModifiableContent content, View view, Map<String,Object> values, UserIdentity user, AllErrors allErrors, Map transientVars)
Prepares the write process by checking remote contents concerned by invert relations.protected SynchronizationResult
synchronize(ModifiableContent content, View view, Map<String,Object> values, Collection<ReferencedContents> referencedContents, Map transientVars)
Synchronize the values of the given contentprotected void
triggerInvertWorkflowAction(Content content, int actionId)
Trigger a 'edit content' workflow action (if the content is workflow-aware).protected void
updateCommonMetadata(ModifiableContent content, UserIdentity user, SynchronizationResult synchronizationResult)
Updates common metadata (last contributor, last modification date, ...).protected void
validateRepeaterValue(ModelViewItemGroup viewItem, RepeaterDefinition definition, String dataPath, Optional<String> oldDataPath, ModifiableContent content, Object value, AllErrors allErrors, Map transientVars)
Validate repeater values.protected void
validateValue(ElementDefinition definition, String dataPath, Optional<String> oldDataPath, ModifiableContent content, Object value, AllErrors allErrors, Map transientVars)
Validate an attribute value.protected void
validateValues(View view, ModifiableContent content, Map<String,Object> values, AllErrors allErrors, Map transientVars)
Validates all input values.-
Methods inherited from class org.ametys.cms.workflow.AbstractContentWorkflowComponent
getContent, service
-
Methods inherited from class org.ametys.plugins.workflow.AbstractWorkflowComponent
addWorkflowError, addWorkflowWarning, enableLogging, getConditionFailures, getContextParameters, getResultsMap, getUser
-
-
-
-
Field Detail
-
INVERT_RELATION_EDIT_WORKFLOW_ACTION_ID
public static final String INVERT_RELATION_EDIT_WORKFLOW_ACTION_ID
Constant for storing the action id for editing revert relations.
-
FORM_ELEMENTS_PREFIX
public static final String FORM_ELEMENTS_PREFIX
Prefix for HTML form elements.- See Also:
- Constant Field Values
-
GLOBAL_ERROR_KEY
public static final String GLOBAL_ERROR_KEY
The key for global errors- See Also:
- Constant Field Values
-
INTERNAL_FORM_ELEMENTS_PREFIX
public static final String INTERNAL_FORM_ELEMENTS_PREFIX
Prefix for internal HTML form elements.- See Also:
- Constant Field Values
-
VALUES_KEY
public static final String VALUES_KEY
Inputs key for typed values.- See Also:
- Constant Field Values
-
FORM_RAW_VALUES
public static final String FORM_RAW_VALUES
Request parameter key for the field values.- See Also:
- Constant Field Values
-
FORM_RAW_COMMENTS
public static final String FORM_RAW_COMMENTS
Request parameter key for the field comments.- See Also:
- Constant Field Values
-
VIEW
public static final String VIEW
View parameter.- See Also:
- Constant Field Values
-
VIEW_ITEMS
public static final String VIEW_ITEMS
View items parameter.- See Also:
- Constant Field Values
-
VIEW_NAME
public static final String VIEW_NAME
View name parameter.- See Also:
- Constant Field Values
-
FALLBACK_VIEW_NAME
public static final String FALLBACK_VIEW_NAME
Fallback view name parameter.- See Also:
- Constant Field Values
-
QUIT
public static final String QUIT
Quit edition mode parameter.- See Also:
- Constant Field Values
-
LOCAL_ONLY
public static final String LOCAL_ONLY
Local only parameter.- See Also:
- Constant Field Values
-
SYNCHRONIZATION_RESULT
public static final String SYNCHRONIZATION_RESULT
Optional previous synchronization result- See Also:
- Constant Field Values
-
INVERT_EDIT_ACTION_ID
public static final int INVERT_EDIT_ACTION_ID
Default action id of editing revert relations.- See Also:
- Constant Field Values
-
_contentTypeExtensionPoint
protected ContentTypeExtensionPoint _contentTypeExtensionPoint
Content type extension point.
-
_contentTypesHelper
protected ContentTypesHelper _contentTypesHelper
Helper for content types
-
_observationManager
protected ObservationManager _observationManager
Observation manager available to subclasses.
-
_workflowHelper
protected ContentWorkflowHelper _workflowHelper
The content workflow helper.
-
_outgoingReferencesExtractor
protected OutgoingReferencesExtractor _outgoingReferencesExtractor
The outgoing references extractor
-
_userManager
protected UserManager _userManager
The user manager
-
_externalizableDataProviderEP
protected ExternalizableDataProviderExtensionPoint _externalizableDataProviderEP
Provider for externalizable data
-
_contentDataHelper
protected ContentDataHelper _contentDataHelper
Helper for collecting content references
-
-
Constructor Detail
-
EditContentFunction
public EditContentFunction()
-
-
Method Detail
-
initialize
public void initialize() throws Exception
- Specified by:
initialize
in interfaceInitializable
- Throws:
Exception
-
execute
public void execute(Map transientVars, Map args, com.opensymphony.module.propertyset.PropertySet ps) throws com.opensymphony.workflow.WorkflowException
- Specified by:
execute
in interfacecom.opensymphony.workflow.FunctionProvider
- Throws:
com.opensymphony.workflow.WorkflowException
-
getInvertEditActionId
protected int getInvertEditActionId(Map transientVars, Content referencedContent)
Get the identifier of the invert edit action- Parameters:
transientVars
- The workflow varsreferencedContent
- the content concerned by the invert relation- Returns:
- the identifier of the invert edit action
-
notifyContentModifying
protected void notifyContentModifying(Content content, Map<String,Object> values, Map transientVars) throws com.opensymphony.workflow.WorkflowException
Notify observers that the content is being modified- Parameters:
content
- The content being modifiedvalues
- the new values being set to the contenttransientVars
- The workflow vars- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred
-
notifyContentModified
protected void notifyContentModified(Content content, Map transientVars, SynchronizationResult synchronizationResult) throws com.opensymphony.workflow.WorkflowException
Notify observers that the content has been modified- Parameters:
content
- The content modifiedtransientVars
- The workflow varssynchronizationResult
- The result of the content values synchronization- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred
-
getView
protected View getView(Map<String,Object> parameters, Map<String,Object> values, Map<String,Object> rawValues, Content content) throws com.opensymphony.workflow.WorkflowException
Get the view for the content- Parameters:
parameters
- The parametersvalues
- Typed values from inputsrawValues
- The raw values of the formcontent
- The content- Returns:
- The view asked in the request or a built-in view
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred while getting the view
-
getValues
protected Map<String,Object> getValues(View view, ModifiableContent content, Map<String,Object> typedValues, Map<String,Object> rawValues, Map<String,List<Map<String,String>>> rawComments, boolean localOnly, Map transientVars) throws com.opensymphony.workflow.WorkflowException
Computes the actual typed values from the input.- Parameters:
view
- the currentView
content
- the current ContenttypedValues
- typed values, if anyrawValues
- raw values from form, if anyrawComments
- the form comments, if anylocalOnly
- if the form values are local only or may include external valuestransientVars
- the parameters from the call.- Returns:
- the actual values to be set
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred
-
_convertValue
protected Object _convertValue(ElementDefinition definition, Object value, Map transientVars)
Converts the given value according to the given definition If the value is multiple, an array is retrieved with each value converted to the right type- Parameters:
definition
- the definitionvalue
- the value to converttransientVars
- the parameters from the call.- Returns:
- the converted value
-
getValueExternalizableDataStatus
protected ExternalizableDataProvider.ExternalizableDataStatus getValueExternalizableDataStatus(Content content, ModelItem definition, Map transientVars)
Get the status of the value to modify- Parameters:
content
- the contentdefinition
- the definition of the valuetransientVars
- the parameters from the call- Returns:
- the status of the value
-
validateValues
protected void validateValues(View view, ModifiableContent content, Map<String,Object> values, AllErrors allErrors, Map transientVars) throws com.opensymphony.workflow.WorkflowException
Validates all input values.- Parameters:
view
- the model's view corresponding to the valuescontent
- the current contentvalues
- the actual input valuesallErrors
- object to be populated with validation errorstransientVars
- the parameters from the call- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred
-
validateValue
protected void validateValue(ElementDefinition definition, String dataPath, Optional<String> oldDataPath, ModifiableContent content, Object value, AllErrors allErrors, Map transientVars)
Validate an attribute value.- Parameters:
definition
- the attribute definition.dataPath
- the attribute path.oldDataPath
- the old data path, i.e. with the repeater entries previous positions. Used to know the current status for externalizable datacontent
- the Content being edited.value
- the value.allErrors
- the errors.transientVars
- the parameters from the call.
-
validateRepeaterValue
protected void validateRepeaterValue(ModelViewItemGroup viewItem, RepeaterDefinition definition, String dataPath, Optional<String> oldDataPath, ModifiableContent content, Object value, AllErrors allErrors, Map transientVars)
Validate repeater values.- Parameters:
viewItem
- the view item referencing the repeaterdefinition
- the repeater definition.dataPath
- the repeater path.oldDataPath
- the old repeater data path, i.e. with the repeater entries previous positions. Used to know the current status for externalizable datacontent
- the Content being edited.value
- the value.allErrors
- the errors.transientVars
- the parameters from the call.
-
globalValidate
protected void globalValidate(View view, Content content, Map<String,Object> values, AllErrors allErrors)
Performs a global validation of the Content, based on declaredContentValidator
s.
-
prepareSynchronize
protected Collection<ReferencedContents> prepareSynchronize(ModifiableContent content, View view, Map<String,Object> values, UserIdentity user, AllErrors allErrors, Map transientVars)
Prepares the write process by checking remote contents concerned by invert relations.- Parameters:
content
- the current content.view
- the current View.values
- the new values.user
- the current userallErrors
- the collected errorstransientVars
- the parameters from the call.- Returns:
- the
ReferencedContents
-
synchronize
protected SynchronizationResult synchronize(ModifiableContent content, View view, Map<String,Object> values, Collection<ReferencedContents> referencedContents, Map transientVars) throws com.opensymphony.workflow.WorkflowException
Synchronize the values of the given content- Parameters:
content
- the content to synchronizeview
- the content's view to use for synchronizationvalues
- the values to synchronizereferencedContents
- the contents referenced by invert relationstransientVars
- the parameters from the call.- Returns:
- The result of the synchronization
- Throws:
com.opensymphony.workflow.WorkflowException
- if an error occurs while triggering the edition workflow action for related contents
-
getSynchronizationContext
protected ContentSynchronizationContext getSynchronizationContext(Map transientVars)
Retrieves the synchronization context- Parameters:
transientVars
- the parameters from the call- Returns:
- the synchronization context
-
additionalOperations
protected ContentSynchronizationResult additionalOperations(ModifiableContent content, Map transientVars) throws com.opensymphony.workflow.WorkflowException
Allow to do some other modifications on the given content before saving changes- Parameters:
content
- the contenttransientVars
- the parameters from the call- Returns:
- The synchronization result od additional operations
- Throws:
com.opensymphony.workflow.WorkflowException
- If an error occurred
-
updateCommonMetadata
protected void updateCommonMetadata(ModifiableContent content, UserIdentity user, SynchronizationResult synchronizationResult) throws com.opensymphony.workflow.WorkflowException
Updates common metadata (last contributor, last modification date, ...).- Parameters:
content
- the content.user
- the user.synchronizationResult
- The result of the content values synchronization- Throws:
com.opensymphony.workflow.WorkflowException
- if an error occurs.
-
extractOutgoingReferences
protected void extractOutgoingReferences(ModifiableContent content, SynchronizationResult synchronizationResult)
Analyze the content to extract outgoing references and store them- Parameters:
content
- The content to analyzesynchronizationResult
- The result of the content values synchronization
-
invertRelationEnabled
protected boolean invertRelationEnabled()
Template method to indicates if invert relation should be taken into account during the whole edition. Override and return false to disabled invert relation management.- Returns:
- true if invert relation are enabled
-
triggerInvertWorkflowAction
protected void triggerInvertWorkflowAction(Content content, int actionId) throws com.opensymphony.workflow.WorkflowException
Trigger a 'edit content' workflow action (if the content is workflow-aware).- Parameters:
content
- The content.actionId
- The current 'edit content' action ID.- Throws:
com.opensymphony.workflow.WorkflowException
- if an error occurs.
-
-