Subversion Repositories general

Rev

Rev 1012 | Rev 1020 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
924 dev 1
package ak.hostadmiral.core.action;
919 dev 2
 
3
import java.util.List;
4
import java.util.Collections;
5
import java.util.ArrayList;
1012 dev 6
import java.util.HashSet;
919 dev 7
 
8
import javax.servlet.http.HttpServletRequest;
9
import javax.servlet.http.HttpServletResponse;
10
 
11
import org.apache.struts.action.Action;
12
import org.apache.struts.action.ActionMapping;
13
import org.apache.struts.action.ActionForm;
14
import org.apache.struts.action.DynaActionForm;
15
import org.apache.struts.action.ActionForward;
16
import org.apache.struts.action.ActionMessages;
17
import org.apache.struts.action.ActionErrors;
18
import org.apache.struts.action.ActionError;
19
 
20
import ak.strutsx.RequestUtilsX;
21
import ak.strutsx.ErrorHandlerX;
22
import ak.backpath.BackPath;
23
 
924 dev 24
import ak.hostadmiral.util.StringConverter;
25
import ak.hostadmiral.util.UserException;
26
import ak.hostadmiral.core.CoreResources;
27
import ak.hostadmiral.core.model.User;
28
import ak.hostadmiral.core.model.UserManager;
29
import ak.hostadmiral.core.model.Mailbox;
30
import ak.hostadmiral.core.model.MailboxManager;
31
import ak.hostadmiral.core.model.SystemUserManager;
32
import ak.hostadmiral.core.model.InetDomainManager;
919 dev 33
 
34
public final class MailboxAction
35
	extends Action
36
	implements ErrorHandlerX
37
{
38
	public void handleErrors(ActionMapping mapping, ActionForm form,
39
			 HttpServletRequest request, HttpServletResponse response)
40
		throws Exception
41
	{
1014 dev 42
		ActionUtils.prepare(request, response);
919 dev 43
		if("submit".equals(mapping.getParameter())) {
44
			User user = (User)request.getSession().getAttribute("user");
45
			initLists(request, user);
46
		}
47
	}
48
 
49
	public ActionForward execute(ActionMapping mapping, ActionForm form,
50
			HttpServletRequest request, HttpServletResponse response)
51
		throws Exception
52
	{
1014 dev 53
		ActionUtils.prepare(request, response);
919 dev 54
		User user = (User)request.getSession().getAttribute("user");
55
		if("list".equals(mapping.getParameter())) {
56
			List list = new ArrayList(MailboxManager.getInstance().listMailboxes(user));
57
			Collections.sort(list, MailboxManager.LOGIN_COMPARATOR);
58
			request.setAttribute("mailboxes", list);
59
			request.setAttribute("allowedToCreate",
951 dev 60
				Boolean.valueOf(MailboxManager.getInstance().allowedToCreate(user)));
919 dev 61
 
62
			return mapping.findForward("default");
63
		}
64
		else if("edit".equals(mapping.getParameter())) {
65
			DynaActionForm theForm  = (DynaActionForm)form;
66
			Long           boxId    = StringConverter.parseLong(theForm.get("id"));
923 dev 67
			Mailbox        mailbox;
919 dev 68
			DynaActionForm showForm = (DynaActionForm)RequestUtilsX.populateActionForm(
958 dev 69
				this, request, "MailboxEditForm");
919 dev 70
 
71
			if(boxId == null) {
923 dev 72
				mailbox = MailboxManager.getInstance().create(user);
951 dev 73
				showForm.set("enabled",    Boolean.TRUE);
74
            	showForm.set("viruscheck", Boolean.TRUE);
75
            	showForm.set("spamcheck",  Boolean.TRUE);
919 dev 76
			}
77
			else {
923 dev 78
				mailbox = MailboxManager.getInstance().get(user, boxId);
919 dev 79
            	showForm.set("login", mailbox.getLogin());
80
            	if(mailbox.getDomain() != null)
81
            		showForm.set("domain", StringConverter.toString(mailbox.getDomain().getId()));
82
            	if(mailbox.getOwner() != null)
83
	            	showForm.set("owner", StringConverter.toString(mailbox.getOwner().getId()));
84
            	showForm.set("viruscheck", mailbox.getVirusCheck());
85
            	showForm.set("spamcheck", mailbox.getSpamCheck());
86
            	if(mailbox.getSystemUser() != null)
87
	            	showForm.set("systemuser", StringConverter.toString(mailbox.getSystemUser().getId()));
88
				showForm.set("enabled", mailbox.getEnabled());
89
				showForm.set("comment", mailbox.getComment());
90
			}
91
 
92
			initLists(request, user);
923 dev 93
			request.setAttribute("mailbox", mailbox);
94
			if(mailbox.editableBy(user))
95
				return mapping.findForward("default");
96
			else
97
				return mapping.findForward("view");
919 dev 98
		}
1012 dev 99
		else if("deleting".equals(mapping.getParameter())) {
100
			DynaActionForm theForm  = (DynaActionForm)form;
101
			Long           boxId    = StringConverter.parseLong(theForm.get("id"));
102
			Mailbox        mailbox  = MailboxManager.getInstance().get(user, boxId);
103
 
104
			request.setAttribute("action", "/mail/box/delete.do");
105
			request.setAttribute("object", mailbox);
106
			request.setAttribute("cascade",
107
				MailboxManager.getInstance().beforeDelete(user, mailbox, new HashSet()));
108
 
109
			return mapping.findForward("default");
110
		}
919 dev 111
		else if("delete".equals(mapping.getParameter())) {
112
			DynaActionForm theForm  = (DynaActionForm)form;
113
			Long           boxId    = StringConverter.parseLong(theForm.get("id"));
114
			Mailbox        mailbox  = MailboxManager.getInstance().get(user, boxId);
115
 
116
			MailboxManager.getInstance().delete(user, mailbox);
117
			response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl());
118
			return null;
119
		}
120
		else if("submit".equals(mapping.getParameter())) {
121
			DynaActionForm theForm  = (DynaActionForm)form;
122
			Long           boxId    = StringConverter.parseLong(theForm.get("id"));
123
			Mailbox        mailbox;
124
            String         password = (String)theForm.get("password");
125
 
126
			if(boxId == null) {
923 dev 127
	            if(password == null || password.equals("")) {
128
					handleErrors(mapping, form, request, response);
919 dev 129
	            	throw new UserException(CoreResources.PASSWORD_REQUIRED);
923 dev 130
	            }
919 dev 131
 
132
				mailbox = MailboxManager.getInstance().create(user);
133
 
926 dev 134
				// FIXME: create an user as owner of the new mailbox here,
135
				//        create a mail alias with the same name
919 dev 136
			}
137
			else {
138
				mailbox = MailboxManager.getInstance().get(user, boxId);
139
			}
140
 
921 dev 141
            mailbox.setDomain(user, InetDomainManager.getInstance().get(user,
919 dev 142
            	StringConverter.parseLong(theForm.get("domain"))));
926 dev 143
 
144
			String login = (String)theForm.get("login");
145
            if(MailboxManager.getInstance().loginExists(user, mailbox, login)) {
146
				handleErrors(mapping, form, request, response);
147
            	throw new UserException(CoreResources.NONUNIQUE_MAILBOX_LOGIN);
148
            }
149
            mailbox.setLogin(user, login);
150
 
921 dev 151
            mailbox.setOwner(user, UserManager.getInstance().get(user,
919 dev 152
            	StringConverter.parseLong(theForm.get("owner"))));
921 dev 153
            mailbox.setVirusCheck(user, (Boolean)theForm.get("viruscheck"));
154
            mailbox.setSpamCheck(user, (Boolean)theForm.get("spamcheck"));
919 dev 155
 
156
            Long systemUserId = StringConverter.parseLong(theForm.get("systemuser"));
157
			if(systemUserId == null) {
921 dev 158
            	mailbox.setSystemUser(user, null);
919 dev 159
			}
160
			else {
921 dev 161
            	mailbox.setSystemUser(user, SystemUserManager.getInstance().get(user, systemUserId));
919 dev 162
            }
163
 
164
            if(password != null && !password.equals(""))
921 dev 165
            	mailbox.setPassword(user, password);
919 dev 166
 
921 dev 167
			mailbox.setEnabled(user, (Boolean)theForm.get("enabled"));
168
			mailbox.setComment(user, (String)theForm.get("comment"));
919 dev 169
 
170
			MailboxManager.getInstance().save(user, mailbox);
171
			response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl());
172
			return null;
173
		}
174
		else {
175
			throw new Exception("unknown mapping parameter");
176
		}
177
	}
178
 
179
	private void initLists(HttpServletRequest request, User user)
180
		throws Exception
181
	{
182
		List users = new ArrayList(UserManager.getInstance().listUsers(user));
183
		Collections.sort(users, UserManager.LOGIN_COMPARATOR);
184
		request.setAttribute("users", users);
185
 
186
		List systemUsers = new ArrayList(SystemUserManager.getInstance().listSystemUsers(user));
187
		Collections.sort(systemUsers, SystemUserManager.UID_COMPARATOR);
188
		request.setAttribute("systemusers", systemUsers);
189
 
190
		List domains = new ArrayList(InetDomainManager.getInstance().listInetDomains(user));
191
		Collections.sort(domains, InetDomainManager.NAME_COMPARATOR);
192
		request.setAttribute("domains", domains);
193
	}
194
}