Subversion Repositories general

Rev

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