com.amazonaws.services.simpleworkflow.model.WorkflowExecutionInfo Maven / Gradle / Ivy
Show all versions of aws-java-sdk-osgi Show documentation
/*
 * Copyright 2010-2016 Amazon.com, Inc. or its affiliates. All Rights
 * Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file 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 com.amazonaws.services.simpleworkflow.model;
import java.io.Serializable;
/**
 * 
 * Contains information about a workflow execution.
 * 
 */
public class WorkflowExecutionInfo implements Serializable, Cloneable {
    /**
     * 
     * The workflow execution this information is about.
     * 
     */
    private WorkflowExecution execution;
    /**
     * 
     * The type of the workflow execution.
     * 
     */
    private WorkflowType workflowType;
    /**
     * 
     * The time when the execution was started.
     * 
     */
    private java.util.Date startTimestamp;
    /**
     * 
     * The time when the workflow execution was closed. Set only if the
     * execution status is CLOSED.
     * 
     */
    private java.util.Date closeTimestamp;
    /**
     * 
     * The current status of the execution.
     * 
     */
    private String executionStatus;
    /**
     * 
     * If the execution status is closed then this specifies how the execution
     * was closed:
     * 
     * 
     * -  
COMPLETED: the execution was successfully completed. 
     * -  
CANCELED: the execution was canceled.Cancellation allows
     * the implementation to gracefully clean up before the execution is closed.
     *  
     * -  
TERMINATED: the execution was force terminated. 
     * -  
FAILED: the execution failed to complete. 
     * -  
TIMED_OUT: the execution did not complete in the alloted
     * time and was automatically timed out. 
     * -  
CONTINUED_AS_NEW: the execution is logically continued.
     * This means the current execution was completed and a new execution was
     * started to carry on the workflow. 
     * 
     */
    private String closeStatus;
    /**
     * 
     * If this workflow execution is a child of another execution then contains
     * the workflow execution that started this execution.
     * 
     */
    private WorkflowExecution parent;
    /**
     * 
     * The list of tags associated with the workflow execution. Tags can be used
     * to identify and list workflow executions of interest through the
     * visibility APIs. A workflow execution can have a maximum of 5 tags.
     * 
     */
    private java.util.List tagList;
    /**
     * 
     * Set to true if a cancellation is requested for this workflow execution.
     * 
     */
    private Boolean cancelRequested;
    /**
     * 
     * The workflow execution this information is about.
     * 
     * 
     * @param execution
     *        The workflow execution this information is about.
     */
    public void setExecution(WorkflowExecution execution) {
        this.execution = execution;
    }
    /**
     * 
     * The workflow execution this information is about.
     * 
     * 
     * @return The workflow execution this information is about.
     */
    public WorkflowExecution getExecution() {
        return this.execution;
    }
    /**
     * 
     * The workflow execution this information is about.
     * 
     * 
     * @param execution
     *        The workflow execution this information is about.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public WorkflowExecutionInfo withExecution(WorkflowExecution execution) {
        setExecution(execution);
        return this;
    }
    /**
     * 
     * The type of the workflow execution.
     * 
     * 
     * @param workflowType
     *        The type of the workflow execution.
     */
    public void setWorkflowType(WorkflowType workflowType) {
        this.workflowType = workflowType;
    }
    /**
     * 
     * The type of the workflow execution.
     * 
     * 
     * @return The type of the workflow execution.
     */
    public WorkflowType getWorkflowType() {
        return this.workflowType;
    }
    /**
     * 
     * The type of the workflow execution.
     * 
     * 
     * @param workflowType
     *        The type of the workflow execution.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public WorkflowExecutionInfo withWorkflowType(WorkflowType workflowType) {
        setWorkflowType(workflowType);
        return this;
    }
    /**
     * 
     * The time when the execution was started.
     * 
     * 
     * @param startTimestamp
     *        The time when the execution was started.
     */
    public void setStartTimestamp(java.util.Date startTimestamp) {
        this.startTimestamp = startTimestamp;
    }
    /**
     * 
     * The time when the execution was started.
     * 
     * 
     * @return The time when the execution was started.
     */
    public java.util.Date getStartTimestamp() {
        return this.startTimestamp;
    }
    /**
     * 
     * The time when the execution was started.
     * 
     * 
     * @param startTimestamp
     *        The time when the execution was started.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public WorkflowExecutionInfo withStartTimestamp(
            java.util.Date startTimestamp) {
        setStartTimestamp(startTimestamp);
        return this;
    }
    /**
     * 
     * The time when the workflow execution was closed. Set only if the
     * execution status is CLOSED.
     * 
     * 
     * @param closeTimestamp
     *        The time when the workflow execution was closed. Set only if the
     *        execution status is CLOSED.
     */
    public void setCloseTimestamp(java.util.Date closeTimestamp) {
        this.closeTimestamp = closeTimestamp;
    }
    /**
     * 
     * The time when the workflow execution was closed. Set only if the
     * execution status is CLOSED.
     * 
     * 
     * @return The time when the workflow execution was closed. Set only if the
     *         execution status is CLOSED.
     */
    public java.util.Date getCloseTimestamp() {
        return this.closeTimestamp;
    }
    /**
     * 
     * The time when the workflow execution was closed. Set only if the
     * execution status is CLOSED.
     * 
     * 
     * @param closeTimestamp
     *        The time when the workflow execution was closed. Set only if the
     *        execution status is CLOSED.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public WorkflowExecutionInfo withCloseTimestamp(
            java.util.Date closeTimestamp) {
        setCloseTimestamp(closeTimestamp);
        return this;
    }
    /**
     * 
     * The current status of the execution.
     * 
     * 
     * @param executionStatus
     *        The current status of the execution.
     * @see ExecutionStatus
     */
    public void setExecutionStatus(String executionStatus) {
        this.executionStatus = executionStatus;
    }
    /**
     * 
     * The current status of the execution.
     * 
     * 
     * @return The current status of the execution.
     * @see ExecutionStatus
     */
    public String getExecutionStatus() {
        return this.executionStatus;
    }
    /**
     * 
     * The current status of the execution.
     * 
     * 
     * @param executionStatus
     *        The current status of the execution.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     * @see ExecutionStatus
     */
    public WorkflowExecutionInfo withExecutionStatus(String executionStatus) {
        setExecutionStatus(executionStatus);
        return this;
    }
    /**
     * 
     * The current status of the execution.
     * 
     * 
     * @param executionStatus
     *        The current status of the execution.
     * @see ExecutionStatus
     */
    public void setExecutionStatus(ExecutionStatus executionStatus) {
        this.executionStatus = executionStatus.toString();
    }
    /**
     * 
     * The current status of the execution.
     * 
     * 
     * @param executionStatus
     *        The current status of the execution.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     * @see ExecutionStatus
     */
    public WorkflowExecutionInfo withExecutionStatus(
            ExecutionStatus executionStatus) {
        setExecutionStatus(executionStatus);
        return this;
    }
    /**
     * 
     * If the execution status is closed then this specifies how the execution
     * was closed:
     * 
     * 
     * -  
COMPLETED: the execution was successfully completed. 
     * -  
CANCELED: the execution was canceled.Cancellation allows
     * the implementation to gracefully clean up before the execution is closed.
     *  
     * -  
TERMINATED: the execution was force terminated. 
     * -  
FAILED: the execution failed to complete. 
     * -  
TIMED_OUT: the execution did not complete in the alloted
     * time and was automatically timed out. 
     * -  
CONTINUED_AS_NEW: the execution is logically continued.
     * This means the current execution was completed and a new execution was
     * started to carry on the workflow. 
     * 
     * 
     * @param closeStatus
     *        If the execution status is closed then this specifies how the
     *        execution was closed:
     *        
     *        -  
COMPLETED: the execution was successfully
     *        completed. 
     *        -  
CANCELED: the execution was canceled.Cancellation
     *        allows the implementation to gracefully clean up before the
     *        execution is closed. 
     *        -  
TERMINATED: the execution was force terminated. 
     *        -  
FAILED: the execution failed to complete. 
     *        -  
TIMED_OUT: the execution did not complete in the
     *        alloted time and was automatically timed out. 
     *        -  
CONTINUED_AS_NEW: the execution is logically
     *        continued. This means the current execution was completed and a
     *        new execution was started to carry on the workflow. 
     * @see CloseStatus
     */
    public void setCloseStatus(String closeStatus) {
        this.closeStatus = closeStatus;
    }
    /**
     * 
     * If the execution status is closed then this specifies how the execution
     * was closed:
     * 
     * 
     * -  
COMPLETED: the execution was successfully completed. 
     * -  
CANCELED: the execution was canceled.Cancellation allows
     * the implementation to gracefully clean up before the execution is closed.
     *  
     * -  
TERMINATED: the execution was force terminated. 
     * -  
FAILED: the execution failed to complete. 
     * -  
TIMED_OUT: the execution did not complete in the alloted
     * time and was automatically timed out. 
     * -  
CONTINUED_AS_NEW: the execution is logically continued.
     * This means the current execution was completed and a new execution was
     * started to carry on the workflow. 
     * 
     * 
     * @return If the execution status is closed then this specifies how the
     *         execution was closed:
     *         
     *         -  
COMPLETED: the execution was successfully
     *         completed. 
     *         -  
CANCELED: the execution was
     *         canceled.Cancellation allows the implementation to gracefully
     *         clean up before the execution is closed. 
     *         -  
TERMINATED: the execution was force terminated. 
     *         -  
FAILED: the execution failed to complete. 
     *         -  
TIMED_OUT: the execution did not complete in the
     *         alloted time and was automatically timed out. 
     *         -  
CONTINUED_AS_NEW: the execution is logically
     *         continued. This means the current execution was completed and a
     *         new execution was started to carry on the workflow. 
     * @see CloseStatus
     */
    public String getCloseStatus() {
        return this.closeStatus;
    }
    /**
     * 
     * If the execution status is closed then this specifies how the execution
     * was closed:
     * 
     * 
     * -  
COMPLETED: the execution was successfully completed. 
     * -  
CANCELED: the execution was canceled.Cancellation allows
     * the implementation to gracefully clean up before the execution is closed.
     *  
     * -  
TERMINATED: the execution was force terminated. 
     * -  
FAILED: the execution failed to complete. 
     * -  
TIMED_OUT: the execution did not complete in the alloted
     * time and was automatically timed out. 
     * -  
CONTINUED_AS_NEW: the execution is logically continued.
     * This means the current execution was completed and a new execution was
     * started to carry on the workflow. 
     * 
     * 
     * @param closeStatus
     *        If the execution status is closed then this specifies how the
     *        execution was closed:
     *        
     *        -  
COMPLETED: the execution was successfully
     *        completed. 
     *        -  
CANCELED: the execution was canceled.Cancellation
     *        allows the implementation to gracefully clean up before the
     *        execution is closed. 
     *        -  
TERMINATED: the execution was force terminated. 
     *        -  
FAILED: the execution failed to complete. 
     *        -  
TIMED_OUT: the execution did not complete in the
     *        alloted time and was automatically timed out. 
     *        -  
CONTINUED_AS_NEW: the execution is logically
     *        continued. This means the current execution was completed and a
     *        new execution was started to carry on the workflow. 
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     * @see CloseStatus
     */
    public WorkflowExecutionInfo withCloseStatus(String closeStatus) {
        setCloseStatus(closeStatus);
        return this;
    }
    /**
     * 
     * If the execution status is closed then this specifies how the execution
     * was closed:
     * 
     * 
     * -  
COMPLETED: the execution was successfully completed. 
     * -  
CANCELED: the execution was canceled.Cancellation allows
     * the implementation to gracefully clean up before the execution is closed.
     *  
     * -  
TERMINATED: the execution was force terminated. 
     * -  
FAILED: the execution failed to complete. 
     * -  
TIMED_OUT: the execution did not complete in the alloted
     * time and was automatically timed out. 
     * -  
CONTINUED_AS_NEW: the execution is logically continued.
     * This means the current execution was completed and a new execution was
     * started to carry on the workflow. 
     * 
     * 
     * @param closeStatus
     *        If the execution status is closed then this specifies how the
     *        execution was closed:
     *        
     *        -  
COMPLETED: the execution was successfully
     *        completed. 
     *        -  
CANCELED: the execution was canceled.Cancellation
     *        allows the implementation to gracefully clean up before the
     *        execution is closed. 
     *        -  
TERMINATED: the execution was force terminated. 
     *        -  
FAILED: the execution failed to complete. 
     *        -  
TIMED_OUT: the execution did not complete in the
     *        alloted time and was automatically timed out. 
     *        -  
CONTINUED_AS_NEW: the execution is logically
     *        continued. This means the current execution was completed and a
     *        new execution was started to carry on the workflow. 
     * @see CloseStatus
     */
    public void setCloseStatus(CloseStatus closeStatus) {
        this.closeStatus = closeStatus.toString();
    }
    /**
     * 
     * If the execution status is closed then this specifies how the execution
     * was closed:
     * 
     * 
     * -  
COMPLETED: the execution was successfully completed. 
     * -  
CANCELED: the execution was canceled.Cancellation allows
     * the implementation to gracefully clean up before the execution is closed.
     *  
     * -  
TERMINATED: the execution was force terminated. 
     * -  
FAILED: the execution failed to complete. 
     * -  
TIMED_OUT: the execution did not complete in the alloted
     * time and was automatically timed out. 
     * -  
CONTINUED_AS_NEW: the execution is logically continued.
     * This means the current execution was completed and a new execution was
     * started to carry on the workflow. 
     * 
     * 
     * @param closeStatus
     *        If the execution status is closed then this specifies how the
     *        execution was closed:
     *        
     *        -  
COMPLETED: the execution was successfully
     *        completed. 
     *        -  
CANCELED: the execution was canceled.Cancellation
     *        allows the implementation to gracefully clean up before the
     *        execution is closed. 
     *        -  
TERMINATED: the execution was force terminated. 
     *        -  
FAILED: the execution failed to complete. 
     *        -  
TIMED_OUT: the execution did not complete in the
     *        alloted time and was automatically timed out. 
     *        -  
CONTINUED_AS_NEW: the execution is logically
     *        continued. This means the current execution was completed and a
     *        new execution was started to carry on the workflow. 
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     * @see CloseStatus
     */
    public WorkflowExecutionInfo withCloseStatus(CloseStatus closeStatus) {
        setCloseStatus(closeStatus);
        return this;
    }
    /**
     * 
     * If this workflow execution is a child of another execution then contains
     * the workflow execution that started this execution.
     * 
     * 
     * @param parent
     *        If this workflow execution is a child of another execution then
     *        contains the workflow execution that started this execution.
     */
    public void setParent(WorkflowExecution parent) {
        this.parent = parent;
    }
    /**
     * 
     * If this workflow execution is a child of another execution then contains
     * the workflow execution that started this execution.
     * 
     * 
     * @return If this workflow execution is a child of another execution then
     *         contains the workflow execution that started this execution.
     */
    public WorkflowExecution getParent() {
        return this.parent;
    }
    /**
     * 
     * If this workflow execution is a child of another execution then contains
     * the workflow execution that started this execution.
     * 
     * 
     * @param parent
     *        If this workflow execution is a child of another execution then
     *        contains the workflow execution that started this execution.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public WorkflowExecutionInfo withParent(WorkflowExecution parent) {
        setParent(parent);
        return this;
    }
    /**
     * 
     * The list of tags associated with the workflow execution. Tags can be used
     * to identify and list workflow executions of interest through the
     * visibility APIs. A workflow execution can have a maximum of 5 tags.
     * 
     * 
     * @return The list of tags associated with the workflow execution. Tags can
     *         be used to identify and list workflow executions of interest
     *         through the visibility APIs. A workflow execution can have a
     *         maximum of 5 tags.
     */
    public java.util.List getTagList() {
        return tagList;
    }
    /**
     * 
     * The list of tags associated with the workflow execution. Tags can be used
     * to identify and list workflow executions of interest through the
     * visibility APIs. A workflow execution can have a maximum of 5 tags.
     * 
     * 
     * @param tagList
     *        The list of tags associated with the workflow execution. Tags can
     *        be used to identify and list workflow executions of interest
     *        through the visibility APIs. A workflow execution can have a
     *        maximum of 5 tags.
     */
    public void setTagList(java.util.Collection tagList) {
        if (tagList == null) {
            this.tagList = null;
            return;
        }
        this.tagList = new java.util.ArrayList(tagList);
    }
    /**
     * 
     * The list of tags associated with the workflow execution. Tags can be used
     * to identify and list workflow executions of interest through the
     * visibility APIs. A workflow execution can have a maximum of 5 tags.
     * 
     * 
     * NOTE: This method appends the values to the existing list (if
     * any). Use {@link #setTagList(java.util.Collection)} or
     * {@link #withTagList(java.util.Collection)} if you want to override the
     * existing values.
     * 
     * 
     * @param tagList
     *        The list of tags associated with the workflow execution. Tags can
     *        be used to identify and list workflow executions of interest
     *        through the visibility APIs. A workflow execution can have a
     *        maximum of 5 tags.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public WorkflowExecutionInfo withTagList(String... tagList) {
        if (this.tagList == null) {
            setTagList(new java.util.ArrayList(tagList.length));
        }
        for (String ele : tagList) {
            this.tagList.add(ele);
        }
        return this;
    }
    /**
     * 
     * The list of tags associated with the workflow execution. Tags can be used
     * to identify and list workflow executions of interest through the
     * visibility APIs. A workflow execution can have a maximum of 5 tags.
     * 
     * 
     * @param tagList
     *        The list of tags associated with the workflow execution. Tags can
     *        be used to identify and list workflow executions of interest
     *        through the visibility APIs. A workflow execution can have a
     *        maximum of 5 tags.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public WorkflowExecutionInfo withTagList(
            java.util.Collection tagList) {
        setTagList(tagList);
        return this;
    }
    /**
     * 
     * Set to true if a cancellation is requested for this workflow execution.
     * 
     * 
     * @param cancelRequested
     *        Set to true if a cancellation is requested for this workflow
     *        execution.
     */
    public void setCancelRequested(Boolean cancelRequested) {
        this.cancelRequested = cancelRequested;
    }
    /**
     * 
     * Set to true if a cancellation is requested for this workflow execution.
     * 
     * 
     * @return Set to true if a cancellation is requested for this workflow
     *         execution.
     */
    public Boolean getCancelRequested() {
        return this.cancelRequested;
    }
    /**
     * 
     * Set to true if a cancellation is requested for this workflow execution.
     * 
     * 
     * @param cancelRequested
     *        Set to true if a cancellation is requested for this workflow
     *        execution.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public WorkflowExecutionInfo withCancelRequested(Boolean cancelRequested) {
        setCancelRequested(cancelRequested);
        return this;
    }
    /**
     * 
     * Set to true if a cancellation is requested for this workflow execution.
     * 
     * 
     * @return Set to true if a cancellation is requested for this workflow
     *         execution.
     */
    public Boolean isCancelRequested() {
        return this.cancelRequested;
    }
    /**
     * Returns a string representation of this object; useful for testing and
     * debugging.
     *
     * @return A string representation of this object.
     *
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        if (getExecution() != null)
            sb.append("Execution: " + getExecution() + ",");
        if (getWorkflowType() != null)
            sb.append("WorkflowType: " + getWorkflowType() + ",");
        if (getStartTimestamp() != null)
            sb.append("StartTimestamp: " + getStartTimestamp() + ",");
        if (getCloseTimestamp() != null)
            sb.append("CloseTimestamp: " + getCloseTimestamp() + ",");
        if (getExecutionStatus() != null)
            sb.append("ExecutionStatus: " + getExecutionStatus() + ",");
        if (getCloseStatus() != null)
            sb.append("CloseStatus: " + getCloseStatus() + ",");
        if (getParent() != null)
            sb.append("Parent: " + getParent() + ",");
        if (getTagList() != null)
            sb.append("TagList: " + getTagList() + ",");
        if (getCancelRequested() != null)
            sb.append("CancelRequested: " + getCancelRequested());
        sb.append("}");
        return sb.toString();
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (obj instanceof WorkflowExecutionInfo == false)
            return false;
        WorkflowExecutionInfo other = (WorkflowExecutionInfo) obj;
        if (other.getExecution() == null ^ this.getExecution() == null)
            return false;
        if (other.getExecution() != null
                && other.getExecution().equals(this.getExecution()) == false)
            return false;
        if (other.getWorkflowType() == null ^ this.getWorkflowType() == null)
            return false;
        if (other.getWorkflowType() != null
                && other.getWorkflowType().equals(this.getWorkflowType()) == false)
            return false;
        if (other.getStartTimestamp() == null
                ^ this.getStartTimestamp() == null)
            return false;
        if (other.getStartTimestamp() != null
                && other.getStartTimestamp().equals(this.getStartTimestamp()) == false)
            return false;
        if (other.getCloseTimestamp() == null
                ^ this.getCloseTimestamp() == null)
            return false;
        if (other.getCloseTimestamp() != null
                && other.getCloseTimestamp().equals(this.getCloseTimestamp()) == false)
            return false;
        if (other.getExecutionStatus() == null
                ^ this.getExecutionStatus() == null)
            return false;
        if (other.getExecutionStatus() != null
                && other.getExecutionStatus().equals(this.getExecutionStatus()) == false)
            return false;
        if (other.getCloseStatus() == null ^ this.getCloseStatus() == null)
            return false;
        if (other.getCloseStatus() != null
                && other.getCloseStatus().equals(this.getCloseStatus()) == false)
            return false;
        if (other.getParent() == null ^ this.getParent() == null)
            return false;
        if (other.getParent() != null
                && other.getParent().equals(this.getParent()) == false)
            return false;
        if (other.getTagList() == null ^ this.getTagList() == null)
            return false;
        if (other.getTagList() != null
                && other.getTagList().equals(this.getTagList()) == false)
            return false;
        if (other.getCancelRequested() == null
                ^ this.getCancelRequested() == null)
            return false;
        if (other.getCancelRequested() != null
                && other.getCancelRequested().equals(this.getCancelRequested()) == false)
            return false;
        return true;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int hashCode = 1;
        hashCode = prime * hashCode
                + ((getExecution() == null) ? 0 : getExecution().hashCode());
        hashCode = prime
                * hashCode
                + ((getWorkflowType() == null) ? 0 : getWorkflowType()
                        .hashCode());
        hashCode = prime
                * hashCode
                + ((getStartTimestamp() == null) ? 0 : getStartTimestamp()
                        .hashCode());
        hashCode = prime
                * hashCode
                + ((getCloseTimestamp() == null) ? 0 : getCloseTimestamp()
                        .hashCode());
        hashCode = prime
                * hashCode
                + ((getExecutionStatus() == null) ? 0 : getExecutionStatus()
                        .hashCode());
        hashCode = prime
                * hashCode
                + ((getCloseStatus() == null) ? 0 : getCloseStatus().hashCode());
        hashCode = prime * hashCode
                + ((getParent() == null) ? 0 : getParent().hashCode());
        hashCode = prime * hashCode
                + ((getTagList() == null) ? 0 : getTagList().hashCode());
        hashCode = prime
                * hashCode
                + ((getCancelRequested() == null) ? 0 : getCancelRequested()
                        .hashCode());
        return hashCode;
    }
    @Override
    public WorkflowExecutionInfo clone() {
        try {
            return (WorkflowExecutionInfo) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new IllegalStateException(
                    "Got a CloneNotSupportedException from Object.clone() "
                            + "even though we're Cloneable!", e);
        }
    }
}