//$Id: Begin.java 9621 2008-11-24 17:31:44Z dan.j.allen $
package org.jboss.seam.annotations;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
 * Marks a method as beginning a long-running conversation, 
 * if none exists, and if the method returns a non-null value 
 * without throwing an exception.
 *  
 * A null outcome never begins a conversation.
 * If the method is of type void, a conversation always
 * begins.
 * 
 * @author Gavin King
 */
@Target(METHOD)
@Retention(RUNTIME)
@Documented
public @interface Begin 
{
	/**
	 * An empty outcome list is interpreted to mean any 
	 * outcome except for the null (redisplay) outcome.
    * 
    * @deprecated use Conversation.instance().begin();
	 */
	String[] ifOutcome() default {};
   /**
    * If enabled, and if a conversation is already active,
    * begin a nested conversation, instead of continuing
    * in the context of the existing conversation.
    */
   boolean nested() default false;
   /**
    * If false (the default), invocation of the begin
    * method in the scope of an existing conversation
    * will cause an exception to be thrown.
    */
   boolean join() default false;
   /**
    * The name of the jBPM process definition defining 
    * the page flow for this conversation.
    */
   String pageflow() default "";
   /**
    * An EL expression for the conversation id. If a 
    * conversation with the same id aready exists, Seam 
    * will redirect to that conversation.
    * 
    * @deprecated use <conversation/> in pages.xml
    */
   String id() default "";
   /**
    * Set the FlushMode for any EntityManager used in
    * this conversation.
    */
   FlushModeType flushMode() default FlushModeType.AUTO;

}
