/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License * at: * * http://opensource.org/licenses/ecl2.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * */ package org.opencastproject.workflow.api; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.XmlAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** * See {@link WorkflowOperationDefinition} */ @XmlType(name = "operation-definition", namespace = "http://workflow.opencastproject.org") @XmlRootElement(name = "operation-definition", namespace = "http://workflow.opencastproject.org") @XmlAccessorType(XmlAccessType.FIELD) public class WorkflowOperationDefinitionImpl implements WorkflowOperationDefinition { @XmlAttribute(name = "id") protected String id; @XmlAttribute(name = "description") protected String description; @XmlAttribute(name = "fail-on-error") protected boolean failWorkflowOnException; @XmlAttribute(name = "if") protected String executeCondition; @XmlAttribute(name = "unless") protected String skipCondition; @XmlAttribute(name = "exception-handler-workflow") protected String exceptionHandlingWorkflow; @XmlElement(name = "configuration") @XmlElementWrapper(name = "configurations") protected Set<WorkflowConfiguration> configurations; @XmlAttribute(name = "max-attempts") protected int maxAttempts; @XmlJavaTypeAdapter(RetryStrategy.Adapter.class) @XmlAttribute(name = "retry-strategy") protected RetryStrategy retryStrategy; /** A no-arg constructor is needed by JAXB */ public WorkflowOperationDefinitionImpl() { super(); this.maxAttempts = 1; this.failWorkflowOnException = true; this.retryStrategy = RetryStrategy.NONE; } /** * @param id * The unique name of this operation * @param description * The description of what this operation does * @param exceptionHandlingWorkflow * The workflow to run when a workflow operation exception is thrown * @param failWorkflowOnException * Whether an exception thrown by this operation should fail the entire {@link WorkflowInstance} */ public WorkflowOperationDefinitionImpl(String id, String description, String exceptionHandlingWorkflow, boolean failWorkflowOnException) { this(); this.id = id; this.description = description; this.exceptionHandlingWorkflow = exceptionHandlingWorkflow; this.failWorkflowOnException = failWorkflowOnException; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public void setExecutionCondition(String condition) { this.executeCondition = condition; } public String getExecutionCondition() { return executeCondition; } public void setSkipCondition(String condition) { this.skipCondition = condition; } public String getSkipCondition() { return skipCondition; } /** * {@inheritDoc} * * @see org.opencastproject.workflow.api.WorkflowOperationDefinition#getExceptionHandlingWorkflow() */ public String getExceptionHandlingWorkflow() { return exceptionHandlingWorkflow; } public void setExceptionHandlingWorkflow(String exceptionHandlingWorkflow) { this.exceptionHandlingWorkflow = exceptionHandlingWorkflow; } /** * {@inheritDoc} * * @see org.opencastproject.workflow.api.WorkflowOperationDefinition#isFailWorkflowOnException() */ public boolean isFailWorkflowOnException() { return failWorkflowOnException; } public void setFailWorkflowOnException(boolean failWorkflowOnException) { this.failWorkflowOnException = failWorkflowOnException; } /** * Allows JAXB handling of {@link WorkflowOperationDefinition} interfaces. */ static class Adapter extends XmlAdapter<WorkflowOperationDefinitionImpl, WorkflowOperationDefinition> { public WorkflowOperationDefinitionImpl marshal(WorkflowOperationDefinition op) throws Exception { return (WorkflowOperationDefinitionImpl) op; } public WorkflowOperationDefinition unmarshal(WorkflowOperationDefinitionImpl op) throws Exception { return op; } } /** * {@inheritDoc} * * @see org.opencastproject.workflow.api.WorkflowInstance#getConfiguration(java.lang.String) */ public String getConfiguration(String key) { if (key == null || configurations == null) return null; for (WorkflowConfiguration config : configurations) { if (config.getKey().equals(key)) return config.getValue(); } return null; } /** * {@inheritDoc} * * @see org.opencastproject.workflow.api.WorkflowInstance#removeConfiguration(java.lang.String) */ public void removeConfiguration(String key) { if (key == null || configurations == null) return; for (Iterator<WorkflowConfiguration> configIter = configurations.iterator(); configIter.hasNext();) { WorkflowConfiguration config = configIter.next(); if (config.getKey().equals(key)) { configIter.remove(); return; } } } /** * {@inheritDoc} * * @see org.opencastproject.workflow.api.WorkflowInstance#setConfiguration(java.lang.String, java.lang.String) */ public void setConfiguration(String key, String value) { if (key == null || configurations == null) return; for (WorkflowConfiguration config : configurations) { if (config.getKey().equals(key)) { ((WorkflowConfigurationImpl) config).setValue(value); return; } } // No configurations were found, so add a new one configurations.add(new WorkflowConfigurationImpl(key, value)); } /** * {@inheritDoc} * * @see org.opencastproject.workflow.api.WorkflowOperationDefinition#getConfigurationKeys() */ @Override public Set<String> getConfigurationKeys() { Set<String> set = new TreeSet<String>(); if (configurations != null) { for (WorkflowConfiguration config : configurations) { set.add(config.getKey()); } } return set; } /** * * {@inheritDoc} * * @see org.opencastproject.workflow.api.WorkflowOperationDefinition#getRetryStrategy() */ @Override public RetryStrategy getRetryStrategy() { return retryStrategy; } /** * @param retryStrategy * the retry strategy to set */ public void setRetryStrategy(RetryStrategy retryStrategy) { this.retryStrategy = retryStrategy; } /** * {@inheritDoc} * * @see org.opencastproject.workflow.api.WorkflowOperationDefinition#getMaxAttempts() */ @Override public int getMaxAttempts() { return maxAttempts; } /** * @param maxAttempts * the maxAttempts to set */ public void setMaxAttempts(int maxAttempts) { this.maxAttempts = maxAttempts; } /** * {@inheritDoc} * * @see java.lang.Object#toString() */ @Override public String toString() { return "operation definition:'" + id + "'"; } }