//$Id: ComponentType.java 5355 2007-06-20 20:42:22Z gavin $
package org.jboss.seam;

import static org.jboss.seam.ScopeType.APPLICATION;
import static org.jboss.seam.ScopeType.CONVERSATION;
import static org.jboss.seam.ScopeType.EVENT;
import static org.jboss.seam.ScopeType.STATELESS;


/**
 * The types of components understood by Seam.
 * 
 * @author Gavin King
 */
public enum ComponentType
{
   ENTITY_BEAN, 
   STATELESS_SESSION_BEAN,
   STATEFUL_SESSION_BEAN,
   SINGLETON_SESSION_BEAN,
   MESSAGE_DRIVEN_BEAN,
   JAVA_BEAN;
   
   public boolean isEjb()
   {
      return this!=JAVA_BEAN;
   }
   
   public boolean isSessionBean()
   {
      return this==STATELESS_SESSION_BEAN || this==STATEFUL_SESSION_BEAN || this==SINGLETON_SESSION_BEAN;
   }
   
   public boolean isStateless()
   {
      return this==STATELESS_SESSION_BEAN || this==MESSAGE_DRIVEN_BEAN;
   }
   
   public ScopeType getDefaultScope()
   {
      switch (this)
      {
         case SINGLETON_SESSION_BEAN:
            return APPLICATION;
         case STATEFUL_SESSION_BEAN:
         case ENTITY_BEAN:
            return CONVERSATION;
         case STATELESS_SESSION_BEAN:
         case MESSAGE_DRIVEN_BEAN:
            return STATELESS;
         case JAVA_BEAN:
            return EVENT;
         default:
            throw new IllegalStateException();
      }
   }

}
