Class FcEmptyHandler

    • Method Detail

      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
      • execute

        public INormalCompletionResult execute​(INodeExecutionParams<com.alibaba.fastjson.JSONObject> params)
        Description copied from interface: INodeHandler
        Executes 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().

        In case you throw any other exception other than the exceptions mentioned in the throws clause, it will be wrapped in a NodeThrewException.

        Specified by:
        execute in interface INodeHandler<com.alibaba.fastjson.JSONObject>
        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.
      • getDataModelClass

        public Class<com.alibaba.fastjson.JSONObject> getDataModelClass()
        Description copied from interface: IElementHandler
        Returns 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 JSONObject as the type parameter and return JSONObject.class. You will then receive the raw JSON data and may perform the serialization in whatever way you like.

        Specified by:
        getDataModelClass in interface IElementHandler<com.alibaba.fastjson.JSONObject,​WorkflowNode>
        Returns:
        The class corresponding to the type parameter TData.
      • getNodePrototypes

        public List<INodePrototypeDescriptor<com.alibaba.fastjson.JSONObject>> getNodePrototypes​(IGetNodePrototypesParams params)
        Description copied from interface: INodeHandler
        Returns a list of all node prototypes for this node type. Each prototype appears in the drawer panel of the workflow designer. The user can move a node prototype via drag & drop into the design area in the center to add the node to the current flowchart.

        You should always return all prototypes, irrespective of whether they are allowed to the current user. IElementHandler.isAvailable(IIsAvailableParams) is checked by the engine, and unavailable node types are removed automatically.

        Specified by:
        getNodePrototypes in interface INodeHandler<com.alibaba.fastjson.JSONObject>
        Parameters:
        params - Parameters for this method, such as the current locale for localizing the display name of the prototypes.
        Returns:
        A list of all available prototypes. null is treated as an empty list.
      • getPropertiesViewXhtml

        public URL getPropertiesViewXhtml()
                                   throws MalformedURLException
        Description copied from interface: IElementHandler
        This 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:form as 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 a ISingleFileProviding field -->
             <xi:singleFile id="resource" value="#{model.singleFile}" required="true" />
         
             <!-- Remove when TData does not have a IMultiFileProviding field -->
             <xi:multiFile id="resource" value="#{model.multiFile}" required="true" />
        
             <!-- Remove when TData does not implement IProviding -->
             <xi:newWorkflowProviding id="providing" value="#{model}" />
             
             <!-- 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 returns null. For example, if the resource bundle contains the key mail.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}"/>
         
        The loader argument 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:
        getPropertiesViewXhtml in interface IElementHandler<com.alibaba.fastjson.JSONObject,​WorkflowNode>
        Returns:
        Path to the XHTML view. If the action can be configured, this must not return null. If you do return null, 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 return null.
        Throws:
        MalformedURLException - This exception is declared for convenience - normally you would use new 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 returned null.
      • isCreateProtocolEntryAfterExecution

        public boolean isCreateProtocolEntryAfterExecution​(ICreateProtocolEntryAfterExecutionParams params)
        Description copied from interface: INodeHandler
        Controls whether a protocol entry is created after the node was executed.

        The default implementation returns true iff result was created by the current node.

        When some action throws an exception, all parent control flow node such as if-else statements also throw an exception. This would result in multiple protocol entries for a single error.

        Specified by:
        isCreateProtocolEntryAfterExecution in interface INodeHandler<com.alibaba.fastjson.JSONObject>
        Parameters:
        params - Parameters with the node that was executed and the result of the node's execution.
        Returns:
        true to create a protocol entry, or false otherwise.
      • validateLocal

        public IWorkflowElementValidationResult validateLocal​(IElementLocalValidationParams<com.alibaba.fastjson.JSONObject,​WorkflowNode> params)
                                                       throws WorkflowValidationException
        Description copied from interface: IElementHandler
        Performs 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 IBeanValidatingElement and annotating your properties model class with the annotation from the bean annotation API javax.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:
        validateLocal in interface IElementHandler<com.alibaba.fastjson.JSONObject,​WorkflowNode>
        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 call build on 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 FcEmptyHandler getInstance()
        Returns:
        The immutable, stateless instance of this handler.