Subversion Repositories general

Rev

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