Subversion Repositories general

Rev

Rev 961 | Rev 1014 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package ak.hostadmiral.core.action;

import java.util.List;
import java.util.Collections;
import java.util.ArrayList;
import java.util.HashSet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;

import ak.strutsx.RequestUtilsX;
import ak.strutsx.ErrorHandlerX;
import ak.backpath.BackPath;

import ak.hostadmiral.util.StringConverter;
import ak.hostadmiral.util.UserException;
import ak.hostadmiral.core.CoreResources;
import ak.hostadmiral.core.model.User;
import ak.hostadmiral.core.model.UserManager;
import ak.hostadmiral.core.model.Mailbox;
import ak.hostadmiral.core.model.MailboxManager;
import ak.hostadmiral.core.model.SystemUserManager;
import ak.hostadmiral.core.model.InetDomainManager;

public final class MailboxAction
        extends Action
        implements ErrorHandlerX
{
        public void handleErrors(ActionMapping mapping, ActionForm form,
                         HttpServletRequest request, HttpServletResponse response)
                throws Exception
        {
                if("submit".equals(mapping.getParameter())) {
                        User user = (User)request.getSession().getAttribute("user");
                        initLists(request, user);
                }
        }

        public ActionForward execute(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response)
                throws Exception
        {
                User user = (User)request.getSession().getAttribute("user");
                if("list".equals(mapping.getParameter())) {
                        List list = new ArrayList(MailboxManager.getInstance().listMailboxes(user));
                        Collections.sort(list, MailboxManager.LOGIN_COMPARATOR);
                        request.setAttribute("mailboxes", list);
                        request.setAttribute("allowedToCreate",
                                Boolean.valueOf(MailboxManager.getInstance().allowedToCreate(user)));

                        return mapping.findForward("default");
                }
                else if("edit".equals(mapping.getParameter())) {
                        DynaActionForm theForm  = (DynaActionForm)form;
                        Long           boxId    = StringConverter.parseLong(theForm.get("id"));
                        Mailbox        mailbox;
                        DynaActionForm showForm = (DynaActionForm)RequestUtilsX.populateActionForm(
                                this, request, "MailboxEditForm");

                        if(boxId == null) {
                                mailbox = MailboxManager.getInstance().create(user);
                                showForm.set("enabled",    Boolean.TRUE);
                showForm.set("viruscheck", Boolean.TRUE);
                showForm.set("spamcheck",  Boolean.TRUE);
                        }
                        else {
                                mailbox = MailboxManager.getInstance().get(user, boxId);
                showForm.set("login", mailbox.getLogin());
                if(mailbox.getDomain() != null)
                        showForm.set("domain", StringConverter.toString(mailbox.getDomain().getId()));
                if(mailbox.getOwner() != null)
                        showForm.set("owner", StringConverter.toString(mailbox.getOwner().getId()));
                showForm.set("viruscheck", mailbox.getVirusCheck());
                showForm.set("spamcheck", mailbox.getSpamCheck());
                if(mailbox.getSystemUser() != null)
                        showForm.set("systemuser", StringConverter.toString(mailbox.getSystemUser().getId()));
                                showForm.set("enabled", mailbox.getEnabled());
                                showForm.set("comment", mailbox.getComment());
                        }

                        initLists(request, user);
                        request.setAttribute("mailbox", mailbox);
                        if(mailbox.editableBy(user))
                                return mapping.findForward("default");
                        else
                                return mapping.findForward("view");
                }
                else if("deleting".equals(mapping.getParameter())) {
                        DynaActionForm theForm  = (DynaActionForm)form;
                        Long           boxId    = StringConverter.parseLong(theForm.get("id"));
                        Mailbox        mailbox  = MailboxManager.getInstance().get(user, boxId);

                        request.setAttribute("action", "/mail/box/delete.do");
                        request.setAttribute("object", mailbox);
                        request.setAttribute("cascade",
                                MailboxManager.getInstance().beforeDelete(user, mailbox, new HashSet()));

                        return mapping.findForward("default");
                }
                else if("delete".equals(mapping.getParameter())) {
                        DynaActionForm theForm  = (DynaActionForm)form;
                        Long           boxId    = StringConverter.parseLong(theForm.get("id"));
                        Mailbox        mailbox  = MailboxManager.getInstance().get(user, boxId);

                        MailboxManager.getInstance().delete(user, mailbox);
                        response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl());
                        return null;
                }
                else if("submit".equals(mapping.getParameter())) {
                        DynaActionForm theForm  = (DynaActionForm)form;
                        Long           boxId    = StringConverter.parseLong(theForm.get("id"));
                        Mailbox        mailbox;
            String         password = (String)theForm.get("password");

                        if(boxId == null) {
                    if(password == null || password.equals("")) {
                                        handleErrors(mapping, form, request, response);
                        throw new UserException(CoreResources.PASSWORD_REQUIRED);
                    }

                                mailbox = MailboxManager.getInstance().create(user);

                                // FIXME: create an user as owner of the new mailbox here,
                                //        create a mail alias with the same name
                        }
                        else {
                                mailbox = MailboxManager.getInstance().get(user, boxId);
                        }

            mailbox.setDomain(user, InetDomainManager.getInstance().get(user,
                StringConverter.parseLong(theForm.get("domain"))));

                        String login = (String)theForm.get("login");
            if(MailboxManager.getInstance().loginExists(user, mailbox, login)) {
                                handleErrors(mapping, form, request, response);
                throw new UserException(CoreResources.NONUNIQUE_MAILBOX_LOGIN);
            }
            mailbox.setLogin(user, login);

            mailbox.setOwner(user, UserManager.getInstance().get(user,
                StringConverter.parseLong(theForm.get("owner"))));
            mailbox.setVirusCheck(user, (Boolean)theForm.get("viruscheck"));
            mailbox.setSpamCheck(user, (Boolean)theForm.get("spamcheck"));

            Long systemUserId = StringConverter.parseLong(theForm.get("systemuser"));
                        if(systemUserId == null) {
                mailbox.setSystemUser(user, null);
                        }
                        else {
                mailbox.setSystemUser(user, SystemUserManager.getInstance().get(user, systemUserId));
            }

            if(password != null && !password.equals(""))
                mailbox.setPassword(user, password);

                        mailbox.setEnabled(user, (Boolean)theForm.get("enabled"));
                        mailbox.setComment(user, (String)theForm.get("comment"));

                        MailboxManager.getInstance().save(user, mailbox);
                        response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl());
                        return null;
                }
                else {
                        throw new Exception("unknown mapping parameter");
                }
        }

        private void initLists(HttpServletRequest request, User user)
                throws Exception
        {
                List users = new ArrayList(UserManager.getInstance().listUsers(user));
                Collections.sort(users, UserManager.LOGIN_COMPARATOR);
                request.setAttribute("users", users);

                List systemUsers = new ArrayList(SystemUserManager.getInstance().listSystemUsers(user));
                Collections.sort(systemUsers, SystemUserManager.UID_COMPARATOR);
                request.setAttribute("systemusers", systemUsers);

                List domains = new ArrayList(InetDomainManager.getInstance().listInetDomains(user));
                Collections.sort(domains, InetDomainManager.NAME_COMPARATOR);
                request.setAttribute("domains", domains);
        }
}