// Path: src/main/java/org/springframework/extensions/workflow/instance/FlowInstanceDescriptor.java
// public interface FlowInstanceDescriptor {
// 
//     String getFlowDefinitionId();
// 
//     String getStateDefinitionId();
// 
//     void setStateDefinitionId(String stateDefinitionId);
// 
//     void setFlowDefinitionId(String flowDefinitionId);
// 
//     void setDateEntered(Date date);
// 
//     Date getDateEntered();
// 
//     boolean isWithTimeouts();
// 
//     void setWithTimeouts(boolean hasTimeouts);
//     
// }
// 
// Path: src/main/java/org/springframework/extensions/workflow/instance/DefaultFlowInstanceDescriptor.java
// public class DefaultFlowInstanceDescriptor implements FlowInstanceDescriptor, Serializable {
//     private static final long serialVersionUID = 2653308491709868450L;
//     private String flowDefinitionId;
//     private String stateDefinitionId;
//     private Date dateEntered;
//     private boolean withTimeouts;
// 
//     DefaultFlowInstanceDescriptor() {
// 
//     }
// 
//     public void setFlowDefinitionId(String flowDefinitionId) {
//         this.flowDefinitionId = flowDefinitionId;
//     }
// 
//     public String getFlowDefinitionId() {
//         return this.flowDefinitionId;
//     }
// 
//     public String getStateDefinitionId() {
//         return this.stateDefinitionId;
//     }
// 
//     public void setStateDefinitionId(String stateDefinitionId) {
//         this.stateDefinitionId = stateDefinitionId;
//     }
// 
//     public boolean isWithTimeouts() {
//         return withTimeouts;
//     }
// 
//     public void setWithTimeouts(boolean hasTimeouts) {
//         this.withTimeouts = hasTimeouts;
//     }
// 
//     public Date getDateEntered() {
//         return dateEntered;
//     }
// 
//     public void setDateEntered(Date dateEntered) {
//         this.dateEntered = dateEntered;
//     }
// 
//     /* (non-Javadoc)
//      * @see java.lang.Object#toString()
//      */
//     @Override
//     public String toString() {
//         return "DefaultFlowInstanceDescriptor [" +
//         		"flowId=" + flowDefinitionId + ", " +
//         		"stateId=" + stateDefinitionId + ", " +
//         		"dateEntered=" + dateEntered + ", " +
//         		"withTimeouts=" + withTimeouts + "]";
//     }
// }


import org.springframework.extensions.workflow.instance.FlowInstanceDescriptor;
import org.springframework.extensions.workflow.instance.DefaultFlowInstanceDescriptor;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
package org.springframework.extensions.workflow.annotation;



/**
 * This annotation is used to identify classes that represent a flow. Together
 * with the {@link org.springframework.extensions.workflow.support.FlowDefinitionPostProcessor},
 * the beans with this annotations are turned into appropriate {@link org.springframework.extensions.workflow.FlowDefinition}s.
 * @author janm
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Flow {
    /**
     * Set the flow's identity. If empty, the {@link org.springframework.extensions.workflow.support.naming.DefaultStateAndFlowNamingStrategy}
     * used by the <code>FlowDefinitionPostProcessor</code> will extract a name
     * from the class with this annotation.
     * @return The flow identity
     */
    String id() default "";

    /**
     * Set the FlowInstanceDescriptor implementation that represents they payload
     * of the flow.
     * @return The FlowInstanceDescriptor implementation
     */
// Path: src/main/java/org/springframework/extensions/workflow/instance/FlowInstanceDescriptor.java
// public interface FlowInstanceDescriptor {
// 
//     String getFlowDefinitionId();
// 
//     String getStateDefinitionId();
// 
//     void setStateDefinitionId(String stateDefinitionId);
// 
//     void setFlowDefinitionId(String flowDefinitionId);
// 
//     void setDateEntered(Date date);
// 
//     Date getDateEntered();
// 
//     boolean isWithTimeouts();
// 
//     void setWithTimeouts(boolean hasTimeouts);
//     
// }
// 
// Path: src/main/java/org/springframework/extensions/workflow/instance/DefaultFlowInstanceDescriptor.java
// public class DefaultFlowInstanceDescriptor implements FlowInstanceDescriptor, Serializable {
//     private static final long serialVersionUID = 2653308491709868450L;
//     private String flowDefinitionId;
//     private String stateDefinitionId;
//     private Date dateEntered;
//     private boolean withTimeouts;
// 
//     DefaultFlowInstanceDescriptor() {
// 
//     }
// 
//     public void setFlowDefinitionId(String flowDefinitionId) {
//         this.flowDefinitionId = flowDefinitionId;
//     }
// 
//     public String getFlowDefinitionId() {
//         return this.flowDefinitionId;
//     }
// 
//     public String getStateDefinitionId() {
//         return this.stateDefinitionId;
//     }
// 
//     public void setStateDefinitionId(String stateDefinitionId) {
//         this.stateDefinitionId = stateDefinitionId;
//     }
// 
//     public boolean isWithTimeouts() {
//         return withTimeouts;
//     }
// 
//     public void setWithTimeouts(boolean hasTimeouts) {
//         this.withTimeouts = hasTimeouts;
//     }
// 
//     public Date getDateEntered() {
//         return dateEntered;
//     }
// 
//     public void setDateEntered(Date dateEntered) {
//         this.dateEntered = dateEntered;
//     }
// 
//     /* (non-Javadoc)
//      * @see java.lang.Object#toString()
//      */
//     @Override
//     public String toString() {
//         return "DefaultFlowInstanceDescriptor [" +
//         		"flowId=" + flowDefinitionId + ", " +
//         		"stateId=" + stateDefinitionId + ", " +
//         		"dateEntered=" + dateEntered + ", " +
//         		"withTimeouts=" + withTimeouts + "]";
//     }
// }


// Path: src/main/java/org/springframework/extensions/workflow/annotation/Flow.java
import org.springframework.extensions.workflow.instance.FlowInstanceDescriptor;
import org.springframework.extensions.workflow.instance.DefaultFlowInstanceDescriptor;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;

package org.springframework.extensions.workflow.annotation;



/**
 * This annotation is used to identify classes that represent a flow. Together
 * with the {@link org.springframework.extensions.workflow.support.FlowDefinitionPostProcessor},
 * the beans with this annotations are turned into appropriate {@link org.springframework.extensions.workflow.FlowDefinition}s.
 * @author janm
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Flow {
    /**
     * Set the flow's identity. If empty, the {@link org.springframework.extensions.workflow.support.naming.DefaultStateAndFlowNamingStrategy}
     * used by the <code>FlowDefinitionPostProcessor</code> will extract a name
     * from the class with this annotation.
     * @return The flow identity
     */
    String id() default "";

    /**
     * Set the FlowInstanceDescriptor implementation that represents they payload
     * of the flow.
     * @return The FlowInstanceDescriptor implementation
     */
    Class<? extends FlowInstanceDescriptor> flowInstanceDescriptorClass() default DefaultFlowInstanceDescriptor.class;