Subversion Repositories general

Rev

Rev 1051 | 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;
1028 dev 4
import java.util.Collection;
919 dev 5
import java.util.Collections;
6
import java.util.ArrayList;
949 dev 7
import java.util.HashSet;
919 dev 8
 
9
import javax.servlet.http.HttpServletRequest;
10
import javax.servlet.http.HttpServletResponse;
11
 
12
import org.apache.struts.action.Action;
13
import org.apache.struts.action.ActionMapping;
14
import org.apache.struts.action.ActionForm;
15
import org.apache.struts.action.DynaActionForm;
16
import org.apache.struts.action.ActionForward;
17
import org.apache.struts.action.ActionMessages;
18
import org.apache.struts.action.ActionErrors;
19
import org.apache.struts.action.ActionError;
20
 
21
import ak.strutsx.RequestUtilsX;
911 dev 22
import ak.strutsx.ErrorHandlerX;
919 dev 23
import ak.backpath.BackPath;
24
 
924 dev 25
import ak.hostadmiral.util.StringConverter;
26
import ak.hostadmiral.util.UserException;
1028 dev 27
import ak.hostadmiral.util.CollectionInfo;
1051 dev 28
import ak.hostadmiral.core.resources.CoreResources;
924 dev 29
import ak.hostadmiral.core.model.User;
30
import ak.hostadmiral.core.model.UserManager;
1056 dev 31
import ak.hostadmiral.core.servlet.SessionKeys;
919 dev 32
 
33
public final class UserAction
34
	extends Action
911 dev 35
	implements ErrorHandlerX
919 dev 36
{
1028 dev 37
	public static final int PAGE_SIZE = 20;
38
 
911 dev 39
	public void handleErrors(ActionMapping mapping, ActionForm form,
40
			 HttpServletRequest request, HttpServletResponse response)
41
		throws Exception
42
	{
1014 dev 43
		ActionUtils.prepare(request, response);
1045 dev 44
		if("submit".equals(mapping.getParameter()) || "partsubmit".equals(mapping.getParameter())) {
1056 dev 45
			User user = (User)request.getSession().getAttribute(SessionKeys.USER);
915 dev 46
			initUserList(request, user);
919 dev 47
 
48
			DynaActionForm theForm = (DynaActionForm)form;
49
			Long           userId;
50
			User           u;
51
 
52
			try {
53
				userId = StringConverter.parseLong(theForm.get("id"));
54
			}
55
			catch(NumberFormatException ex) {
56
				userId = null;
57
			}
58
 
59
			if(userId == null)
60
				u = UserManager.getInstance().create(user);
61
			else
62
				u = UserManager.getInstance().get(user, userId);
63
 
64
			request.setAttribute("u", u);
911 dev 65
		}
66
	}
67
 
919 dev 68
	public ActionForward execute(ActionMapping mapping, ActionForm form,
69
			HttpServletRequest request, HttpServletResponse response)
70
		throws Exception
71
	{
1014 dev 72
		ActionUtils.prepare(request, response);
1056 dev 73
		User user = (User)request.getSession().getAttribute(SessionKeys.USER);
919 dev 74
 
75
		if("list".equals(mapping.getParameter())) {
1028 dev 76
			DynaActionForm theForm  = (DynaActionForm)form;
77
			Long           page     = StringConverter.parseLong(theForm.get("pg"));
78
			CollectionInfo listInfo = new CollectionInfo();
79
			Collection     list     = UserManager.getInstance().listUsers(
80
				listInfo, PAGE_SIZE, (page == null) ? 0 : page.intValue(),
81
				new Integer[] { UserManager.SORT_LOGIN }, user);
82
 
83
			request.setAttribute("users",    list);
84
			request.setAttribute("listInfo", listInfo);
1010 dev 85
			request.setAttribute("allowedToCreate",
86
				Boolean.valueOf(UserManager.getInstance().allowedToCreate(user)));
87
			request.setAttribute("mayViewAllLogins", Boolean.valueOf(user.mayViewAllLogins()));
919 dev 88
 
89
			return mapping.findForward("default");
90
		}
91
		else if("edit".equals(mapping.getParameter())) {
92
			DynaActionForm theForm  = (DynaActionForm)form;
93
			Long           userId   = StringConverter.parseLong(theForm.get("id"));
94
			User           u;
95
			DynaActionForm showForm = (DynaActionForm)RequestUtilsX.populateActionForm(
958 dev 96
				this, request, "UserEditForm");
919 dev 97
 
98
			if(userId == null) {
99
				u = UserManager.getInstance().create(user);
951 dev 100
				showForm.set("enabled", Boolean.TRUE);
919 dev 101
			}
102
			else {
103
				u = UserManager.getInstance().get(user, userId);
104
				showForm.set("login",     u.getLogin());
911 dev 105
				if(u.getBoss() != null)
106
					showForm.set("boss", StringConverter.toString(u.getBoss().getId()));
919 dev 107
				showForm.set("superuser", u.getSuperuser());
950 dev 108
				showForm.set("locale",    u.getLocale().toString());
919 dev 109
				showForm.set("enabled",   u.getEnabled());
110
				showForm.set("comment",   u.getComment());
111
			}
112
 
915 dev 113
			initUserList(request, user);
919 dev 114
			request.setAttribute("u", u);
923 dev 115
			if(u.editableBy(user))
116
				return mapping.findForward("default");
117
			else
118
				return mapping.findForward("view");
919 dev 119
		}
950 dev 120
		else if("partedit".equals(mapping.getParameter())) {
121
			DynaActionForm theForm  = (DynaActionForm)form;
122
			Long           userId   = StringConverter.parseLong(theForm.get("id"));
123
			User           u        = UserManager.getInstance().get(user, userId);
124
			DynaActionForm showForm = (DynaActionForm)RequestUtilsX.populateActionForm(
958 dev 125
				this, request, "UserPartEditForm");
950 dev 126
 
127
			showForm.set("locale", u.getLocale().toString());
128
			initUserList(request, user);
129
			request.setAttribute("u", u);
130
			return mapping.findForward("default");
131
		}
946 dev 132
		else if("deleting".equals(mapping.getParameter())) {
133
			DynaActionForm theForm  = (DynaActionForm)form;
134
			Long           userId   = StringConverter.parseLong(theForm.get("id"));
135
			User           u        = UserManager.getInstance().get(user, userId);
136
 
137
			request.setAttribute("action",  "/user/delete.do");
138
			request.setAttribute("object",  u);
949 dev 139
			request.setAttribute("cascade",
140
				UserManager.getInstance().beforeDelete(user, u, new HashSet()));
946 dev 141
 
142
			return mapping.findForward("default");
143
		}
919 dev 144
		else if("delete".equals(mapping.getParameter())) {
145
			DynaActionForm theForm  = (DynaActionForm)form;
146
			Long           userId   = StringConverter.parseLong(theForm.get("id"));
147
			User           u        = UserManager.getInstance().get(user, userId);
148
			request.setAttribute("u", u);
149
 
923 dev 150
			if(u.equals(user)) {
151
				handleErrors(mapping, form, request, response);
919 dev 152
				throw new UserException(CoreResources.DELETE_ME_SELF);
923 dev 153
            }
919 dev 154
 
155
			// FIXME: invalidate session of deleted user if it is logged in
156
            // FIXME: if two admins delete each other at the same time
157
 
158
			UserManager.getInstance().delete(user, u);
159
			response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl());
160
			return null;
161
		}
162
		else if("submit".equals(mapping.getParameter())) {
163
			DynaActionForm theForm  = (DynaActionForm)form;
164
			Long           userId   = StringConverter.parseLong(theForm.get("id"));
165
			User           u;
166
            String         password = (String)theForm.get("password");
167
 
168
			if(userId == null) {
923 dev 169
	            if(password == null || password.equals("")) {
170
					handleErrors(mapping, form, request, response);
919 dev 171
	            	throw new UserException(CoreResources.PASSWORD_REQUIRED);
923 dev 172
    			}
919 dev 173
 
174
				u = UserManager.getInstance().create(user);
175
			}
176
			else {
177
				u = UserManager.getInstance().get(user, userId);
178
			}
179
			request.setAttribute("u", u);
180
 
923 dev 181
			String login = (String)theForm.get("login");
182
            if(UserManager.getInstance().loginExists(user, u, login)) {
183
				handleErrors(mapping, form, request, response);
184
            	throw new UserException(CoreResources.NONUNIQUE_USER_LOGIN);
185
            }
186
			u.setLogin(user, login);
919 dev 187
 
1010 dev 188
			if(u.mayChangeBoss(user)) {
918 dev 189
				Long bossId = StringConverter.parseLong(theForm.get("boss"));
190
				if(bossId == null)
919 dev 191
					u.setBoss(user, null);
918 dev 192
				else
193
					u.setBoss(user, UserManager.getInstance().get(user, bossId));
1010 dev 194
			}
911 dev 195
 
1010 dev 196
			if(u.editableBy(user)) {
950 dev 197
				u.setLocaleName(user, (String)theForm.get("locale"));
919 dev 198
				u.setEnabled(user, (Boolean)theForm.get("enabled"));
199
				u.setComment(user, (String)theForm.get("comment"));
200
			}
201
 
918 dev 202
			if(u.mayChangeSuperuser(user))
919 dev 203
				u.setSuperuser(user, (Boolean)theForm.get("superuser"));
911 dev 204
 
919 dev 205
            if(password != null && !password.equals("")
206
            	&& u.editableBy(user)          // more strong condition, because normal
950 dev 207
            	&& u.partEditableBy(user))     // user have to enter first the old password
919 dev 208
            {
209
            	u.setPassword(user, password);
210
            }
211
 
212
			UserManager.getInstance().save(user, u);
213
			response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl());
214
			return null;
215
		}
950 dev 216
		else if("partsubmit".equals(mapping.getParameter())) {
217
			DynaActionForm theForm = (DynaActionForm)form;
218
			Long           userId  = StringConverter.parseLong(theForm.get("id"));
219
			User           u       = UserManager.getInstance().get(user, userId);
220
 
221
			u.setLocaleName(user, (String)theForm.get("locale"));
222
			UserManager.getInstance().save(user, u);
223
			response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl());
224
			return null;
225
		}
919 dev 226
		else {
227
			throw new Exception("unknown mapping parameter");
228
		}
229
	}
230
 
915 dev 231
	private void initUserList(HttpServletRequest request, User user)
911 dev 232
		throws Exception
233
	{
915 dev 234
		List list = new ArrayList(UserManager.getInstance().listUsers(user));
911 dev 235
		Collections.sort(list, UserManager.LOGIN_COMPARATOR);
236
		request.setAttribute("users", list);
237
	}
919 dev 238
}