Package net.sf.jportlet.portlets.login

Source Code of net.sf.jportlet.portlets.login.LoginActionListener

/*
* Created on 21-Mar-2003
*/
package net.sf.jportlet.portlets.login;

import java.util.Locale;

import javax.mail.Address;
import javax.mail.internet.InternetAddress;

import net.sf.jportlet.impl.UserImpl;
import net.sf.jportlet.portlet.Portlet;
import net.sf.jportlet.portlet.PortletContext;
import net.sf.jportlet.portlet.PortletException;
import net.sf.jportlet.portlet.PortletRequest;
import net.sf.jportlet.portlet.PortletURI;
import net.sf.jportlet.portlet.PortletWindow;
import net.sf.jportlet.portlet.User;
import net.sf.jportlet.portlet.event.ActionEvent;
import net.sf.jportlet.portlet.event.ActionListener;
import net.sf.jportlet.portlets.ValidationHelper;
import net.sf.jportlet.service.login.LoginService;
import net.sf.jportlet.service.mail.MailService;
import net.sf.jportlet.service.user.UserEmailNotUniqueException;
import net.sf.jportlet.service.user.UserIdNotUniqueException;
import net.sf.jportlet.service.user.UserNotFoundException;
import net.sf.jportlet.service.user.UserService;
import net.sf.jportlet.util.LocaleHelper;


/**
* @author <a href="mailto:tchbansi@sourceforge.net">Herve Tchepannou</a>
*/
public class LoginActionListener
    implements ActionListener
{
    //~ Methods ----------------------------------------------------------------

    public void actionPerformed( ActionEvent event )
        throws PortletException
    {
        PortletRequest request = event.getPortletRequest(  );
        String         action = event.getAction(  );
        String         command = request.getParameter( "command" );

        if ( ActionEvent.ACTION_VIEW.equals( action ) )
        {
            if ( "signin".equals( command ) )
            {
                doSignin( event, request );
            }
            else if ( "myprofile".equals( command ) )
            {
                doMyProfile( event, request );
            }
            else if ( "register".equals( command ) )
            {
                doRegister( event, request );
            }
            else if ( "logout".equals( command ) )
            {
                doLogout( event, request );
            }
            else if ( "login".equals( command ) )
            {
                doLogin( event, request );
            }
            else if ( "forgot_password".equals( command ) )
            {
                doForgotPassword( event, request );
            }
            else
            {
                throw new PortletException( "Unknown command: " + action + "/" + command );
            }
        }
        else if ( ActionEvent.ACTION_EDIT.equals( action ) )
        {
            if ( "save".equals( command ) )
            {
                doSave( event, request, "true".equals( request.getParameter( "register" ) ) );
            }
            else if ( "cancel".equals( command ) )
            {
                doCancel( event, request, "true".equals( request.getParameter( "register" ) ) );
            }
            else if ( "send_email".equals( command ) )
            {
                doSendEmail( event, request );
            }
            else
            {
                throw new PortletException( "Unknown command: " + action + "/" + command );
            }
        }
        else
        {
            throw new PortletException( "Unknown action: " + action );
        }
    }

    private void doForgotPassword( ActionEvent    event,
                                   PortletRequest request )
    {
        PortletURI uri = event.getPortletResponse(  ).createURI( Portlet.Mode.EDIT, PortletWindow.State.MAXIMIZED );
        uri.addParameter( LoginPortlet.KEY_TEMPLATE, "forgot_password.vm" );
        event.setNextURI( uri );
    }

    private void doSendEmail( ActionEvent    event,
                              PortletRequest request )
        throws PortletException
    {
        /* Validation */
        String email = request.getParameter( "email" );
        if ( email == null )
        {
            ValidationHelper.addError( "error_email_required", event );
        }

        if ( event.hasErrors(  ) )
        {
            doForgotPassword( event, request );
            return;
        }

        /* Send */
        PortletContext ctx = event.getPortlet(  ).getPortletConfig(  ).getPortletContext(  );
        UserService    usr = ( UserService ) ctx.getService( UserService.NAME );
        try
        {
            /* Get the user */
            UserImpl u = ( UserImpl ) usr.getUserByEmail( email );

            /* Generate the email message */
            String subject = "Password Requested";
            StringBuffer body = new StringBuffer();
            body.append( u.getFirstname(  ) + " " + u.getLastname(  ) + "\n" );
            body.append( "Here is your requested password\n" );
            body.append( " Login: " + u.getId(  ) + "\n" );
            body.append( " Password: " + u.getPassword(  ) + "\n\n" );

            /* Send the message */
            MailService mailer = ( MailService ) ctx.getService( MailService.NAME );
            mailer.send( null, new Address[] { new InternetAddress( u.getEmail(  ) ) }, subject, body.toString(), MailService.MIME_TEXT );
        }
        catch ( UserNotFoundException u )
        {
            ctx.getLog(  ).warn( email + " not found", u );
        }
        catch ( Exception e )
        {
            throw new PortletException( e );
        }
        doSignin(event, request);
    }

    private void doLogin( ActionEvent    event,
                          PortletRequest request )
        throws PortletException
    {
        PortletContext context = event.getPortlet(  ).getPortletConfig(  ).getPortletContext(  );
        LoginService   service = ( LoginService ) context.getService( LoginService.NAME );
        if ( !service.login( request ) )
        {
            ValidationHelper.addError( "error_login_failed", event );
            doSignin( event, request );
        }
        else
        {
            event.setReturnCode( "login" );
            notifyDataChanged( event );
        }
    }

    private void doSignin( ActionEvent    event,
                           PortletRequest request )
        throws PortletException
    {
        PortletURI uri = event.getPortletResponse(  ).createURI( Portlet.Mode.VIEW, PortletWindow.State.MAXIMIZED );
        uri.addParameter( LoginPortlet.KEY_TEMPLATE, "signin.vm" );
        event.setNextURI( uri );
    }

    private void doLogout( ActionEvent    event,
                           PortletRequest request )
        throws PortletException
    {
        PortletContext context = event.getPortlet(  ).getPortletConfig(  ).getPortletContext(  );
        LoginService   service = ( LoginService ) context.getService( LoginService.NAME );
        service.logout( request );

        event.setReturnCode( "logout" );
        notifyDataChanged( event );
    }

    private void doMyProfile( ActionEvent    event,
                              PortletRequest request )
        throws PortletException
    {
        if ( request.getAttribute( "user" ) == null )
        {
            User user = request.getUser(  );
            if ( user == null )
            {
                doSignin( event, request );
                return;
            }

            request.setAttribute( "user", user );
        }

        PortletURI uri = event.getPortletResponse(  ).createURI( Portlet.Mode.EDIT, PortletWindow.State.MAXIMIZED );
        event.setNextURI( uri );
    }

    private void doRegister( ActionEvent    event,
                             PortletRequest request )
        throws PortletException
    {
        PortletURI uri = event.getPortletResponse(  ).createURI( Portlet.Mode.EDIT, PortletWindow.State.MAXIMIZED );
        event.setNextURI( uri );
    }

    private void doSave( ActionEvent    event,
                         PortletRequest request,
                         boolean        register )
        throws PortletException
    {
        String userId = request.getParameter( UserService.USER_ID ).trim(  );
        String password = request.getParameter( UserService.PASSWORD ).trim(  );
        String email = request.getParameter( UserService.EMAIL ).trim(  );
        String firstname = request.getParameter( UserService.FIRSTNAME ).trim(  );
        String lastname = request.getParameter( UserService.LASTNAME ).trim(  );
        Locale locale = LocaleHelper.getLocale( request.getParameter( UserService.LOCALE ).trim(  ), null );

        try
        {
            if ( validate( userId, password, email, firstname, lastname, locale, event ) )
            {
                PortletContext ctx = event.getPortlet(  ).getPortletConfig(  ).getPortletContext(  );
                UserService    srv = ( UserService ) ctx.getService( UserService.NAME );
                if ( register )
                {
                    srv.addUser( request );
                    event.setReturnCode( "register" );
                }
                else
                {
                    srv.updateUser( request );
                    event.setReturnCode( "update" );
                }

                notifyDataChanged( event );
                return;
            }
        }
        catch ( UserIdNotUniqueException e )
        {
            ValidationHelper.addError( "error_duplicate_userId", event );
        }
        catch ( UserEmailNotUniqueException e )
        {
            ValidationHelper.addError( "error_duplicate_email", event );
        }
        catch ( Exception e )
        {
            throw new PortletException( "Unexpected error", e );
        }

        /* Handle Errors */
        UserImpl user = new UserImpl( userId, password, email, firstname, lastname, locale );
        request.setAttribute( "user", user );
        if ( register )
        {
            doRegister( event, request );
        }
        else
        {
            doMyProfile( event, request );
        }
    }

    private void doCancel( ActionEvent    event,
                           PortletRequest request,
                           boolean        register )
        throws PortletException
    {
        event.setReturnCode( "cancel" );
    }

    private boolean validate( String      userId,
                              String      password,
                              String      email,
                              String      firsname,
                              String      lastname,
                              Locale      locale,
                              ActionEvent event )
    {
        ValidationHelper.assertNotEmpty( userId, "error_empty_userId", event );
        ValidationHelper.assertNotEmpty( password, "error_empty_password", event );
        ValidationHelper.assertNotEmpty( email, "error_empty_email", event );

        return !event.hasErrors(  );
    }

    private void notifyDataChanged( ActionEvent event )
    {
        ( ( LoginPortlet ) event.getPortlet(  ) ).dataChanged(  );
    }
}
TOP

Related Classes of net.sf.jportlet.portlets.login.LoginActionListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.