/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.workflow.execution.headless.api; import java.io.File; import de.rcenvironment.core.component.execution.api.SingleConsoleRowsProcessor; import de.rcenvironment.core.component.workflow.execution.headless.api.HeadlessWorkflowExecutionService.DeletionBehavior; import de.rcenvironment.core.component.workflow.execution.headless.api.HeadlessWorkflowExecutionService.DisposalBehavior; import de.rcenvironment.core.component.workflow.execution.headless.internal.HeadlessWorkflowExecutionContextImpl; import de.rcenvironment.core.utils.common.CrossPlatformFilenameUtils; import de.rcenvironment.core.utils.common.InvalidFilenameException; import de.rcenvironment.core.utils.common.textstream.TextOutputReceiver; /** * Build {@link HeadlessWorkflowExecutionContext} instances. * * @author Doreen Seider * */ public final class HeadlessWorkflowExecutionContextBuilder { private HeadlessWorkflowExecutionContextImpl headlessWfExeCtx; /** * @param wfFile workflow file * @param logDirectory set the location for workflow log files * @throws InvalidFilenameException */ public HeadlessWorkflowExecutionContextBuilder(File wfFile, File logDirectory) throws InvalidFilenameException { headlessWfExeCtx = new HeadlessWorkflowExecutionContextImpl(); headlessWfExeCtx.setWfFile(wfFile); CrossPlatformFilenameUtils.throwExceptionIfFilenameNotValid(wfFile.getName()); headlessWfExeCtx.setLogDirectory(logDirectory); } /** * @param placeholdersFile an optional JSON file containing componentId->(key->value) placeholder values; pass <code>null</code> if no * one to consider * @return {@link HeadlessWorkflowExecutionContext} to support method chaining */ public HeadlessWorkflowExecutionContextBuilder setPlaceholdersFile(File placeholdersFile) { headlessWfExeCtx.setPlaceholdersFile(placeholdersFile); return this; } /** * @param outputReceiver an optional {@link TextOutputReceiver} to write status messages to * @return {@link HeadlessWorkflowExecutionContext} to support method chaining */ public HeadlessWorkflowExecutionContextBuilder setTextOutputReceiver(TextOutputReceiver outputReceiver) { headlessWfExeCtx.setTextOutputReceiver(outputReceiver); return this; } /** * @param outputReceiver an optional {@link TextOutputReceiver} to write status messages to * @param isCompactOutput <code>true</code> if output should be compact. Default is <code>false</code> * @return {@link HeadlessWorkflowExecutionContext} to support method chaining */ public HeadlessWorkflowExecutionContextBuilder setTextOutputReceiver(TextOutputReceiver outputReceiver, boolean isCompactOutput) { headlessWfExeCtx.setTextOutputReceiver(outputReceiver); headlessWfExeCtx.setIsCompactOutput(isCompactOutput); return this; } /** * @param consoleRowsProcessor an optional listener for all received ConsoleRows * @return {@link HeadlessWorkflowExecutionContext} to support method chaining */ public HeadlessWorkflowExecutionContextBuilder setSingleConsoleRowsProcessor(SingleConsoleRowsProcessor consoleRowsProcessor) { headlessWfExeCtx.setSingleConsoleRowsProcessor(consoleRowsProcessor); return this; } /** * @param disposalBehavior the {@link DisposalBehavior}. Default is {@link DisposalBehavior#OnFinished} * @return {@link HeadlessWorkflowExecutionContext} to support method chaining */ public HeadlessWorkflowExecutionContextBuilder setDisposalBehavior(DisposalBehavior disposalBehavior) { headlessWfExeCtx.setDisposeBehavior(disposalBehavior); return this; } /** * @param delete the {@link DeletionBehavior}. Default is {@link DeletionBehavior#OnFinished} * @return {@link HeadlessWorkflowExecutionContext} to support method chaining */ public HeadlessWorkflowExecutionContextBuilder setDeletionBehavior(DeletionBehavior delete) { headlessWfExeCtx.setDeletionBehavior(delete); return this; } /** * @param value set to true to refuse execution of workflow files that would need to be updated first */ public void setAbortIfWorkflowUpdateRequired(boolean value) { headlessWfExeCtx.setAbortIfWorkflowUpdateRequired(value); } /** * @return {@link HeadlessWorkflowExecutionContext} to support method chaining */ public HeadlessWorkflowExecutionContext build() { return headlessWfExeCtx; } }