Subversion Repositories general

Rev

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