Package mireka.pop.command

Source Code of mireka.pop.command.AbstractLoginCommand

package mireka.pop.command;

import static mireka.pop.SessionState.*;

import java.io.IOException;

import mireka.login.Principal;
import mireka.pop.Command;
import mireka.pop.CommandParser;
import mireka.pop.Pop3Exception;
import mireka.pop.Session;
import mireka.pop.store.Maildrop;
import mireka.pop.store.MaildropLockedException;
import mireka.pop.store.MaildropPopException;

/**
* Base class for commands which authenticate a user, it provides a function for
* going into the Transaction state by locking the maildrop associated with the
* user.
*/
public abstract class AbstractLoginCommand implements Command {

    protected final Session session;

    public abstract void execute(CommandParser commandParser)
            throws IOException, Pop3Exception;

    public AbstractLoginCommand(Session session) {
        this.session = session;
    }

    protected void startTransaction(Principal userPrincipal)
            throws MaildropPopException, IOException {
        String maildropName =
                session.getServer().getPrincipalMaildropTable()
                        .lookupMaildropName(userPrincipal);
        Maildrop maildrop =
                session.getServer().getMaildropRepository()
                        .borrowMaildrop(maildropName);
        try {
            maildrop.beginTransaction();
        } catch (MaildropLockedException e) {
            session.setSessionState(AUTHORIZATION);
            session.getServer().getMaildropRepository()
                    .releaseMaildrop(maildrop);
            session.getThread().sendResponse(e.toResponse());
            return;
        } catch (MaildropPopException e) {
            session.getServer().getMaildropRepository()
                    .releaseMaildrop(maildrop);
            throw e;
        }
        session.setMaildrop(maildrop);
        session.setSessionState(TRANSACTION);
        session.getThread().sendResponse("+OK Maildrop locked and ready");
    }

}
TOP

Related Classes of mireka.pop.command.AbstractLoginCommand

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.