All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.adobe.granite.offloading.workflow.api.WorkflowOffloadingHelper Maven / Gradle / Ivy

There is a newer version: 6.5.21
Show newest version
/*************************************************************************
 *
 * ADOBE CONFIDENTIAL
 * __________________
 *
 *  Copyright 2013 Adobe Systems Incorporated
 *  All Rights Reserved.
 *
 * NOTICE:  All information contained herein is, and remains
 * the property of Adobe Systems Incorporated and its suppliers,
 * if any.  The intellectual and technical concepts contained
 * herein are proprietary to Adobe Systems Incorporated and its
 * suppliers and are protected by trade secret or copyright law.
 * Dissemination of this information or reproduction of this material
 * is strictly forbidden unless prior written permission is obtained
 * from Adobe Systems Incorporated.
 *************************************************************************/
package com.adobe.granite.offloading.workflow.api;

import com.adobe.granite.workflow.metadata.MetaDataMap;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.wrappers.ValueMapDecorator;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * Helper class for integrating generic job execution and workflow offloading into workflow steps.
 */
public final class WorkflowOffloadingHelper {

    private static final String OFFLOADING_PAYLOAD_DELIMITER = "|";

    /**
     * 

Read the job topic from the given process arguments.

*

Expects the job topic be set using {@link JobOffloadingProcessArguments#JOB_TOPIC}.

* * @param arguments The workflow process arguments. * * @return The job topic, or null if the job topic is not set. */ public static String getJobTopic(MetaDataMap arguments) { if (arguments != null) { return arguments.get(JobOffloadingProcessArguments.JOB_TOPIC.getArgumentName(), String.class); } return null; } /** *

Read the job properties from the given process arguments.

*

Expects the job properties be set using {@link JobOffloadingProcessArguments#JOB_PROPERTIES}.

* * @param arguments The workflow process arguments. * * @return ValueMap containing the job properties from the process arguments. If the job properties are not set, an * empty ValueMap is returned. */ public static ValueMap getJobProperties(MetaDataMap arguments) { ValueMap jobProperties = new ValueMapDecorator(new HashMap()); if (arguments != null) { String[] properties = arguments.get(JobOffloadingProcessArguments.JOB_PROPERTIES.getArgumentName(), new String[0]); for (String property : properties) { String[] split = property.split("\\|"); if (split.length == 2) { jobProperties.put(split[0], split[1]); } } } return jobProperties; } /** *

Read the generic offloading input payload from the given process arguments.

*

Expects the offloading input payload be set using {@link JobOffloadingProcessArguments#OFFLOADING_INPUT}.

* * @param arguments The workflow process arguments. Must not be null. * * @return String array containing the offloading input payload, or an empty array, if the offloading input payload * is not set. */ public static String[] getOffloadingInput(MetaDataMap arguments) { if (arguments != null) { return arguments.get(JobOffloadingProcessArguments.OFFLOADING_INPUT.getArgumentName(), new String[0]); } return new String[0]; } /** *

Read the generic offloading output payload from the given process arguments.

*

* Expects the offloading output payload be set using {@link JobOffloadingProcessArguments#OFFLOADING_OUTPUT}. *

* * @param arguments The workflow process arguments. Must not be null. * * @return String array containing the offloading output payload, or an empty array, if the offloading output * payload is not set. */ public static String[] getOffloadingOutput(MetaDataMap arguments) { if (arguments != null) { return arguments.get(JobOffloadingProcessArguments.OFFLOADING_OUTPUT.getArgumentName(), new String[0]); } return new String[0]; } /** * Converts the given payload array into a flat string for use on the job properties. * * @param offloadingPayload The offloading payload array. * * @return Flat string representation of the given array. If the given payload array is null or empty, * an empty String is returned. */ public static String convertToOffloadingPayload(String[] offloadingPayload) { StringBuffer inputBuffer = new StringBuffer(); if (offloadingPayload != null && offloadingPayload.length > 0) { for (String path : offloadingPayload) { inputBuffer.append(path).append(OFFLOADING_PAYLOAD_DELIMITER); } } return inputBuffer.toString(); } /** *

Read the workflow model from the given process arguments.

*

* Expects the workflow model be set using {@link WorkflowOffloadingProcessArguments#WORKFLOW_MODEL}. *

* * @param arguments The workflow process arguments. * * @return The workflow model or null if the workflow model is not set. */ public static String getWorkflowModel(MetaDataMap arguments) { if (arguments != null) { return arguments.get(WorkflowOffloadingProcessArguments.WORKFLOW_MODEL.getArgumentName(), String.class); } return null; } /** *

Read the workflow payload from the given process argument or work item.

*

* Expects the workflow payload be set using {@link WorkflowOffloadingProcessArguments#WORKFLOW_PAYLOAD}. If not set * on the arguments, it falls back to use the fallback payload. *

* * @param fallbackPayload The workflow workflow payload to use as a fallback. * @param arguments The workflow process arguments. * * @return String The workflow payload or null if the fallback payload is not set. */ public static String getWorkflowPayload(String fallbackPayload, MetaDataMap arguments) { String payload = null; //first try from arguments if (arguments != null) { payload = arguments.get(WorkflowOffloadingProcessArguments.WORKFLOW_PAYLOAD.getArgumentName(), String.class); //fallback if (StringUtils.isBlank(payload)) { payload = fallbackPayload; } } return payload; } /** *

Whether to include the workflow model to the offloading input.

*

* Expects the flag be set using {@link WorkflowOffloadingProcessArguments#OFFLOADING_INPUT_WORKFLOW_MODEL}. *

* * @param arguments The workflow process arguments. * * @return true if the workflow model must be included, false otherwise. Returns * false if the property is not set at all. */ public static boolean doTransportWorkflowModelWithInput(MetaDataMap arguments) { if (arguments != null) { return arguments.get(WorkflowOffloadingProcessArguments.OFFLOADING_INPUT_WORKFLOW_MODEL.getArgumentName(), Boolean.FALSE); } return false; } /** *

Whether to include the workflow model to the offloading output.

*

* Expects the flag be set using {@link WorkflowOffloadingProcessArguments#OFFLOADING_OUTPUT_WORKFLOW_MODEL}. *

* * @param arguments The workflow process arguments. * * @return true if the workflow model must be included, false otherwise. Returns * false if the property is not set at all. */ public static boolean doTransportWorkflowModelWithOutput(MetaDataMap arguments) { if (arguments != null) { return arguments.get(WorkflowOffloadingProcessArguments.OFFLOADING_OUTPUT_WORKFLOW_MODEL.getArgumentName(), Boolean.FALSE); } return false; } /** *

Whether to include the workflow payload to the offloading input.

*

* Expects the flag be set using {@link JobOffloadingProcessArguments#OFFLOADING_INPUT_WORKFLOW_PAYLOAD}. *

* * @param arguments The workflow process arguments. * * @return true if the workflow payload must be included, false otherwise. Returns * false if the property is not set at all. */ public static boolean doTransportWorkflowPayloadWithInput(MetaDataMap arguments) { if (arguments != null) { return arguments.get(JobOffloadingProcessArguments.OFFLOADING_INPUT_WORKFLOW_PAYLOAD.getArgumentName(), Boolean.FALSE); } return false; } /** *

Whether to include the workflow payload to the offloading output.

*

* Expects the flag be set using {@link JobOffloadingProcessArguments#OFFLOADING_OUTPUT_WORKFLOW_PAYLOAD}. *

* * @param arguments The workflow process arguments. * * @return true if the workflow payload must be included, false otherwise. Returns * false if the property is not set at all. */ public static boolean doTransportWorkflowPayloadWithOutput(MetaDataMap arguments) { if (arguments != null) { return arguments.get(JobOffloadingProcessArguments.OFFLOADING_OUTPUT_WORKFLOW_PAYLOAD.getArgumentName(), Boolean.FALSE); } return false; } /** *

Builds the complete workflow offloading input payload.

*

* Puts the generic offloading input along with the given workflow payload and workflow model on the offloading * input payload. *

* * @param arguments The workflow process arguments. Must not be null. * @param workflowPayload The workflow payload to put on the offloading input. * @param workflowModel The workflow model to put on the offloading input. * * @return The workflow offloading input. Returns null if the given process arguments is * null. */ public static String getWorkflowOffloadingInput(MetaDataMap arguments, String workflowPayload, String workflowModel) { String offloadingInputPayload = null; if (arguments != null) { String[] fromArguments = WorkflowOffloadingHelper.getOffloadingInput(arguments); List offloadingInput = new ArrayList(); if (WorkflowOffloadingHelper.doTransportWorkflowPayloadWithInput(arguments) && StringUtils.isNotBlank(workflowPayload)) { offloadingInput.add(workflowPayload); } if (WorkflowOffloadingHelper.doTransportWorkflowModelWithInput(arguments) && StringUtils.isNotBlank(workflowModel)) { offloadingInput.add(workflowModel); } String[] offloadingInputArray = offloadingInput.toArray(new String[offloadingInput.size()]); String[] all = (String[]) ArrayUtils.addAll(fromArguments, offloadingInputArray); offloadingInputPayload = WorkflowOffloadingHelper.convertToOffloadingPayload(all); } return offloadingInputPayload; } /** *

Builds the complete workflow offloading output payload.

*

* Puts the generic offloading output along with the given workflow payload and workflow model on the offloading * output payload. *

* * @param arguments The workflow process arguments. Must not be null. * @param workflowPayload The workflow payload to put on the offloading output. * @param workflowModel The workflow model to put on the offloading output. * * @return The workflow offloading output. Returns null if the given process arguments is * null. */ public static String getWorkflowOffloadingOutput(MetaDataMap arguments, String workflowPayload, String workflowModel) { String offloadingOutputPayload = null; if (arguments != null) { String[] fromArguments = WorkflowOffloadingHelper.getOffloadingOutput(arguments); List offloadingOutput = new ArrayList(); if (WorkflowOffloadingHelper.doTransportWorkflowPayloadWithOutput(arguments) && StringUtils.isNotBlank(workflowPayload)) { offloadingOutput.add(workflowPayload); } if (WorkflowOffloadingHelper.doTransportWorkflowModelWithOutput(arguments) && StringUtils.isNotBlank(workflowModel)) { offloadingOutput.add(workflowModel); } String[] offloadingOutputArray = offloadingOutput.toArray(new String[offloadingOutput.size()]); String[] all = (String[]) ArrayUtils.addAll(fromArguments, offloadingOutputArray); offloadingOutputPayload = WorkflowOffloadingHelper.convertToOffloadingPayload(all); } return offloadingOutputPayload; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy