package org.japanosample.action;

import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.japano.Session;
import org.japano.View;
import org.japano.action.ActionConfig;
import org.japano.action.ActionParameter;
import org.japano.action.ActionParameterValidator;
import org.japano.action.DefaultView;
import org.japanosample.SampleSession;
import org.japano.metadata.annotation.*;
import org.japanosample.User;

/**
 Logs a user into the session.
 
 @author  Sven Helmberger ( sven dot helmberger at gmx dot de )
 @version $Id: Login.java,v 1.10 2005/09/27 04:36:00 fforw Exp $
 */
 ( library="/user" )
public class Login implements org.japano.action.Action, DefaultView
{    
  private static org.apache.log4j.Logger logger=org.apache.log4j.Logger.getLogger(  Login.class);
  
  /** email address of the user to log in. */
  private String EMail;  
  /** password of the user to log in. */
  private String password;
  /** view to show after login*/
  private String view="/editUser.jsp";
    
  /**
   email address for the Login action.
   @param EMail email address  
   */
   ( maxLength=256)
   ( regex="[A-Za-z\\.0-9-]+@[A-Za-z\\.0-9-]+",
    errorMessage="Invalid email address", required=true )
  public void setEMail(String EMail)
  {
    this.EMail = EMail;
  }
  
  /**
   password for the Login action.
   @param password password  
   */
   ( maxLength=100 )
   ( required=true )
  public void setPassword(String password) 
  {
    this.password = password;
  }
  
  /**
   View to show after login.
   */
   
  public void setView(String view)
  {
    this.view=view;
  }

  /**
   Sends back the default view.
   */
  public void defaultView(HttpServletRequest request, HttpServletResponse response)
  {
    SampleSession session=(SampleSession)request.getSession();
    User u=session.getUser();    
    
    // clear errormessages
    View v=session.getView();
    v.clearMessages();
    
    if (u == null)
    { // no -> go to login.jsp
      session.setView("/login.jsp");
    }
    else
    {
      session.setView(view);
    }    

    if (logger.isDebugEnabled())
      logger.debug("defaultView(request, response) => "+session.getView());
  }
  
  /**
   Logs in the user.
   */
  public void perform(HttpServletRequest request, HttpServletResponse response) throws IOException
  {         
    SampleSession session=(SampleSession)request.getSession();    
    if (session.getUser() == null)
    {
      if (EMail == null || password == null)
      {
        session.getView().clearMessages();
        session.setView("/login.jsp");
        return;
      }
      
      if (session.login( EMail, password))
      {
        session.setView(view);
      }
      else
      {
        session.setView("/login.jsp");
        session.addViewMessage("Login failed.");
      }
    }
    else
    {      
      session.setView(view);
    }
  }
}