Class FcBreakHandler
- java.lang.Object
-
- de.xima.fc.workflow.designer.registry.nodes.FcBreakHandler
-
- All Implemented Interfaces:
IResourceBundleLocator,IWorkflowNodeFlowAnalyzer<FcBreakProps>,IElementHandler<FcBreakProps,WorkflowNode>,IExecutionResultDescriptor,IRefinedExecutionResultDescriptor<FcBreakProps>,ICustomParametersUpdateable,IWorkflowElementTypeProviding,IBeanValidatingElement<FcBreakProps,WorkflowNode>,IBeanValidatingNode<FcBreakProps>,IExecutingLikeControlTransferNode<FcBreakProps>,IHierarchyValidatingNode<FcBreakProps>,IKeyValueSummarizableElement<FcBreakProps,WorkflowNode>,IKeyValueSummarizableNode<FcBreakProps>,IOfficialHelpPageElement<FcBreakProps,WorkflowNode>,IOfficialHelpPageNode<FcBreakProps>,IResultlessNode<FcBreakProps>,ISingleElementPrototype<FcBreakProps,WorkflowNode>,ISingleNodePrototype<FcBreakProps>,INodeHandler<FcBreakProps>,IWorkflowNodeTypeProviding,IListenerRegistrator,IOrderable,ISingleBaseActionBuiltinNodePrototype<FcBreakProps>,ISingleBuiltinNodePrototype<FcBreakProps>,IBuiltinResourcesHandler<FcBreakProps,WorkflowNode>,IBaseActionNode<FcBreakProps>,IBuiltinNodeType<FcBreakProps>,ISingleBaseActionNodePrototype<FcBreakProps>,Comparable<IOrderable>
@Immutable public final class FcBreakHandler extends Object implements INodeHandler<FcBreakProps>, IBaseActionNode<FcBreakProps>, IBuiltinResourcesHandler<FcBreakProps,WorkflowNode>, IExecutingLikeControlTransferNode<FcBreakProps>, IResultlessNode<FcBreakProps>, ISingleBaseActionBuiltinNodePrototype<FcBreakProps>, IKeyValueSummarizableNode<FcBreakProps>
TheINodeHandlerfor nodes of typeEWorkflowNodeType.FC_BREAK.- Since:
- 8.2.0
- Author:
- XIMA MEDIA GmbH
-
-
Field Summary
-
Fields inherited from interface de.xima.fc.interfaces.workflow.elements.IElementHandler
CURRENT_HANDLER_VERSION
-
-
Method Summary
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface de.xima.fc.workflow.mixin.IBaseActionNode
isValidChildCount, isValidChildType, isValidParentType
-
Methods inherited from interface de.xima.fc.interfaces.workflow.mixin.IBeanValidatingElement
getValidationGroups
-
Methods inherited from interface de.xima.fc.workflow.mixin.IBuiltinNodeType
getOfficialHelpPagePath, getType, isAvailable, register
-
Methods inherited from interface de.xima.fc.workflow.designer.registry.IBuiltinResourcesHandler
getCascadingStyleSheet, getJavaScript
-
Methods inherited from interface de.xima.fc.interfaces.workflow.ICustomParametersUpdateable
updateCustomParams
-
Methods inherited from interface de.xima.fc.interfaces.workflow.elements.IElementHandler
extractDescription, extractName, extractSearchTerms, getCascadingStyleSheet, getDisplayLabel, getFastJsonConverter, getFilterCriteriaForEntities, getJavaScript, getResourceBundle, getVersion, isHasUserVisibleName, readEntityReferences, readPlaceholders, validateGlobal, writeEntityReferences, writePlaceholders
-
Methods inherited from interface de.xima.fc.interfaces.workflow.mixin.IExecutingLikeControlTransferNode
createFlowGraph
-
Methods inherited from interface de.xima.fc.interfaces.workflow.execution.IExecutionResultDescriptor
getAlwaysValueDescriptor, getAttachmentValueDescriptor, getCurrentAttachmentValueDescriptor, getCurrentFileValueDescriptor, getCurrentValueDescriptor, getFileValueDescriptor, getSoftErrorValueDescriptor
-
Methods inherited from interface de.xima.fc.interfaces.workflow.mixin.IKeyValueSummarizableElement
getElementSummaryModel, getElementSummaryXhtml
-
Methods inherited from interface de.xima.fc.interfaces.workflow.nodes.INodeHandler
getLocalizedTypeName, getPropertiesBeanClass, getRelatedNodeTypes, getSupportedControlTransferTypes, isCreateProtocolEntryAfterExecution, isCreateProtocolEntryAfterExecution, isReplacePlaceholderBeforeExecution
-
Methods inherited from interface de.xima.fc.interfaces.workflow.mixin.IOfficialHelpPageElement
getHelpPageLocation
-
Methods inherited from interface de.xima.fc.listener.IOrderable
compareTo, shouldBeAfter
-
Methods inherited from interface de.xima.fc.interfaces.workflow.execution.IRefinedExecutionResultDescriptor
getAlwaysValueDescriptor, getAttachmentValueDescriptor, getCurrentAttachmentValueDescriptor, getCurrentFileValueDescriptor, getCurrentValueDescriptor, getErrorValueDescriptor, getFileValueDescriptor, getSoftErrorValueDescriptor, getSuccessValueDescriptor
-
Methods inherited from interface de.xima.fc.interfaces.workflow.mixin.IResultlessNode
getErrorValueDescriptor, getSuccessValueDescriptor
-
Methods inherited from interface de.xima.fc.workflow.mixin.ISingleBaseActionNodePrototype
getPrototypeModelData
-
Methods inherited from interface de.xima.fc.workflow.designer.mixin.ISingleBuiltinNodePrototype
getPrototypeIcon, getPrototypeLabel, getPrototypeSearchText, getPrototypeSubLabel, getPrototypeTitle
-
Methods inherited from interface de.xima.fc.interfaces.workflow.mixin.ISingleElementPrototype
getPrototypeTags
-
Methods inherited from interface de.xima.fc.interfaces.workflow.mixin.ISingleNodePrototype
getNodePrototypes, getPrototypeElement
-
-
-
-
Method Detail
-
execute
public INormalCompletionResult execute(INodeExecutionParams<FcBreakProps> params) throws AbstractAbruptCompletionException
Description copied from interface:INodeHandlerExecutes the given workflow node. You may perform any action required by this node type, such as creating files, sending HTTP requests etc.If this node has children that need to be executed (such as for control nodes like conditions or switches), you must use
IWorkflowExecutionContext.executor()to execute the children instead of attempting to call their execute method directly. Note that a node must never attempt to execute any other node that is not in the subtree (= a child, a grand-child, a grand-grand-child etc.) of this node.In case you throw any other exceptions other than the exceptions mentioned in the throws clause, it will be wrapped in a
NodeThrewExceptionwith a general error code.- Specified by:
executein interfaceINodeHandler<FcBreakProps>- Parameters:
params- The node that needs to be executed and the current workflow context.- Returns:
- The result value or values created by the executed node.
- Throws:
AbstractAbruptCompletionException- When the node's execution did not finish normally, see below for subclasses.NodeThrewException- If this exception was thrown by the execute method of the given node. Indicates that a node could not be completed successfully. This exception can be caught by control flow nodes with custom error handling, such as a try-catch node.NodeReturnedException- If this exception was thrown by the execute method of the given node. Indicates that the node wishes to return, i.e. to stop the execution of the current processing chain (="function"). This exception can be caught by control flow nodes with custom finalization handling, such as a try-finally node (which should rethrow this exception afterwards).NodeTransferredControlException- If this exception was thrown by the execute method of the given node. Indicates that a control transfer should take place. The matching node for thecontrol transfer targetshould catch this exception and proceed according to thetype of the control transfer. For example, loop nodes may catch break and continue control transfers and either stop the loop or skip to the next iteration of the loop.
-
getBuiltinType
public EWorkflowNodeType getBuiltinType()
- Specified by:
getBuiltinTypein interfaceIBuiltinNodeType<FcBreakProps>- Returns:
- The built-in node type.
-
getControlTransferTarget
public NodeKey getControlTransferTarget(FcBreakProps props)
- Specified by:
getControlTransferTargetin interfaceIExecutingLikeControlTransferNode<FcBreakProps>- Parameters:
props- The custom data of the node being analyzed.- Returns:
- The target node to which control is transferred.
-
getControlTransferType
public String getControlTransferType()
- Specified by:
getControlTransferTypein interfaceIExecutingLikeControlTransferNode<FcBreakProps>- Returns:
- Type of the control transfer, see
EStandardControlTransferTypefor a list of built-in transfer types.
-
getDataModelClass
public Class<FcBreakProps> getDataModelClass()
Description copied from interface:IElementHandlerReturns the class of the custom properties used by the elements handled by this element logic handler.The custom properties of a workflow element are internally stored as JSON. To ease the development work, you can specify a model class, and the JSON is automatically converted to an instance of that model class. Please note that the model class must be compatible with serialization mechanism used by
JSON.See
IElementHandler.getVersion()for how custom properties are updated.If you need more control over serialization and deserialization, specify
JSONObjectas the type parameter and returnJSONObject.class. You will then receive the raw JSON data and may perform the serialization in whatever way you like.- Specified by:
getDataModelClassin interfaceIElementHandler<FcBreakProps,WorkflowNode>- Returns:
- The class corresponding to the type parameter
TData.
-
getElementSummaryKeyValueModel
public ISummaryKeyValueModel getElementSummaryKeyValueModel(IGetElementSummaryParams<FcBreakProps> params)
- Specified by:
getElementSummaryKeyValueModelin interfaceIKeyValueSummarizableElement<FcBreakProps,WorkflowNode>- Parameters:
params- The custom properties of the node or trigger.- Returns:
- A list of key value pairs to display in a table in the overview panel.
-
getMainCategory
public IElementCategory getMainCategory(IGetElementPrototypesParams params)
- Specified by:
getMainCategoryin interfaceISingleElementPrototype<FcBreakProps,WorkflowNode>- Parameters:
params- Parameters with the current client, locale, entity context etc.- Returns:
IElementCategoryelement's main category, which is used for grouping the elements.
-
getPropertiesViewXhtml
public URL getPropertiesViewXhtml() throws MalformedURLException
Description copied from interface:IElementHandlerThis method must return the path to the XHTML page for the custom user interface. Usually the XHTML file is part of the JAR resources of the module or plugin. In this case, you should return an URL to a JAR file resource (jar:file:/...) like so:@Override public URL getXhtmlView() { return getClass().getResource("/path/to/view.xhtml"); }The contents of this XHTML page is included in the properties panel, without a fieldset or container around it, but already inside a form (i.e. do not use a
h:formas that would result in an error). You should wrap your custom UI in a naming container to ensure unique IDs that do not clash with other plugins or actions. The following is a recommended template on which you may base your UI:<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:o="http://omnifaces.org/ui" xmlns:p="http://primefaces.org/ui" xmlns:xi="http://www.xima.de/taglib/xfc"> <!-- Enable bean validation (when #validateLocal is implemented via the bean validator)--> <o:validateBean value="#{model}" showMessageFor="@violating" method="validateActual" /> <xi:namingContainer id="myAwesomeWorkflowElement"> <!--Base info with name and description (when TData extends BaseActionProps) --> <xi:newWorkflowActionBase id="base" value="#{model}" legend="#{msg['wf.node.myawesomelememnt']}" /> <!-- Remove when TData does not have aISingleFileProvidingfield --> <xi:singleFile id="resource" value="#{model.singleFile}" required="true" /> <!-- Remove when TData does not have aIMultiFileProvidingfield --> <xi:multiFile id="resource" value="#{model.multiFile}" required="true" /> <!-- Remove when TData does not implement IProviding --> <xi:fileProvision id="providing" value="#{model.fileProvision}" /> <!-- Custom section with editors specific to your workflow element --> <p:fieldset legend="#{msg['MyAwesomeWorkflowElementProps.fieldset.base']}" styleClass="fc-fieldset"> <!-- A simple input field bound to the mail property of your properties model --> <xi:inputText id="mail" label="#{msg['MyAwesomeWorkflowElementProps.mail']}" formPlaceholder="true" value="#{model.mail}" forceIndicateRequired="true" > <p:ajax event="change" partialSubmit="true" listener="#{elementPropertiesBean.storeCurrent}" process="@this" update=":flowchartForm:flowchart" global="false" /> </xi:inputText> </p:fieldset> </xi:namingContainer> </ui:composition>The XHTML page may access the following expression language variables:
- model: The deserialized custom properties of the workflow element, of the type
TData. - provider: An object that implements
IWorkflowProvider, for accessing various data, such as a list of all users or text templates. - msg: The localized messages as returned by
IElementHandler.getResourceBundle(Locale). Empty when that method returnsnull. For example, if the resource bundle contains the keymail.label, you can access the localized message via the EL expression['mail.label']
To access the values of an enum or the constants defined by a class, consider using
<xi:importConstants type="my.fully.classified.path.MyEnum" var="MyEnum" loader="#{model}"/>Theloaderargument is only required for plugins and ensures that the correct class loader is used that knows about the plugin class. Without the loader attribute, the above is equivalent to the PrimeFaces tag handler<p:importConstants />.- Specified by:
getPropertiesViewXhtmlin interfaceIElementHandler<FcBreakProps,WorkflowNode>- Returns:
- Path to the XHTML view. If the action can be configured, this must not return
null. If you do returnnull, it will be treated as an error and an appropriate message is displayed to the user informing them that the properties panel could not be loaded. If the action cannot be configured (i.e. when the action is not selectable), this should returnnull. - Throws:
MalformedURLException- This exception is declared for convenience - normally you would usenew URL(String)with a constant URL string that should not throw. In case an exception is thrown, it is treated the same as if this returnednull.
- model: The deserialized custom properties of the workflow element, of the type
-
getPrototypeSortKey
public String getPrototypeSortKey(String label, IGetElementPrototypesParams params)
- Specified by:
getPrototypeSortKeyin interfaceISingleBuiltinNodePrototype<FcBreakProps>- Specified by:
getPrototypeSortKeyin interfaceISingleElementPrototype<FcBreakProps,WorkflowNode>- Parameters:
label- The label, as returned byISingleElementPrototype.getPrototypeLabel(IGetElementPrototypesParams). Can be used to sort the prototype alphabetically by its name.params- Parameters with the current client, locale, entity context etc.- Returns:
- The sort key for the prototype, used when there are multiple prototypes within the same category. See
IElementPrototypeDescriptor.getSortKey().
-
getSubCategory
public IElementCategory getSubCategory(IGetElementPrototypesParams params)
Description copied from interface:ISingleElementPrototypeOptional sub category. When not set or this returnsnull, the element is shown under the categorymiscellaneous.- Specified by:
getSubCategoryin interfaceISingleElementPrototype<FcBreakProps,WorkflowNode>- Parameters:
params- Parameters with the current client, locale, entity context etc.- Returns:
IElementCategoryelement's sub category, which is used for grouping the element within the given main group.
-
getThemeColor
public ClientOpaqueColor getThemeColor()
- Specified by:
getThemeColorin interfaceISingleBaseActionNodePrototype<FcBreakProps>- Returns:
- The theme color for this action. This color is used for the visual representation in the workflow designer.
-
validateLocal
public IWorkflowElementValidationResult validateLocal(IElementLocalValidationParams<FcBreakProps,WorkflowNode> params) throws WorkflowValidationException
Description copied from interface:IElementHandlerPerforms a local validation of the given workflow workflow element properties. This method should only validate the properties of the given workflow element, without respect to any other workflow elements.This method allows you to implement custom validation logic. Consider using
IBeanValidatingElementand annotating your properties model class with the annotation from the bean annotation APIjavax.validation. This also offers the advantage that it can be integrated into JSF, allowing you to use the same validations for the UI view as well.- Specified by:
validateLocalin interfaceIBaseActionNode<FcBreakProps>- Specified by:
validateLocalin interfaceIBeanValidatingElement<FcBreakProps,WorkflowNode>- Specified by:
validateLocalin interfaceIBeanValidatingNode<FcBreakProps>- Specified by:
validateLocalin interfaceIElementHandler<FcBreakProps,WorkflowNode>- Specified by:
validateLocalin interfaceIHierarchyValidatingNode<FcBreakProps>- Parameters:
params- The properties to validate. Also provides access to the project, client etc.- Returns:
- The result of the validation, i.e. whether the workflow element is valid, and a list of messages to
display to the user. If this returns, this is treated as if a valid result without messages had been
returned. You may use use params.
getValidationContext().resultBuilder()to create the result, or implement the interface yourself. To indicate that the validation was performed, but no validation constraints were violated, simply callbuildon the result builder and return that, without adding any messages. - Throws:
WorkflowValidationException- When the validation could not be performed. Please note that this is meant for unexpected errors only - you should not throw an exception if a workflow element is simply just invalid.
-
getInstance
public static FcBreakHandler getInstance()
- Returns:
- The immutable, stateless instance of this handler.
-
-