1 package org.itracker.web.actions.admin.project;
2
3 import java.lang.reflect.InvocationTargetException;
4 import java.util.ArrayList;
5 import java.util.Arrays;
6 import java.util.HashSet;
7 import java.util.List;
8 import java.util.Set;
9
10 import org.apache.commons.beanutils.PropertyUtils;
11 import org.apache.log4j.Logger;
12 import org.apache.struts.action.ActionForm;
13 import org.apache.struts.action.ActionMessages;
14 import org.itracker.model.Permission;
15 import org.itracker.model.Project;
16 import org.itracker.model.Status;
17 import org.itracker.model.User;
18 import org.itracker.services.ProjectService;
19 import org.itracker.services.UserService;
20 import org.itracker.services.util.UserUtilities;
21
22
23
24
25
26 public class AdminProjectUtilities {
27 private static final Logger log = Logger.getLogger(AdminProjectUtilities.class);
28
29
30
31
32
33
34
35
36
37
38
39 public static void handleInitialProjectMembers(Project project,
40 Set<Integer> userIds, Set<Integer> permissions,
41 ProjectService projectService, UserService userService) {
42 List<Permission> userPermissionModels = new ArrayList<Permission>();
43 if (userIds != null && permissions != null && userIds.size() > 0
44 && permissions.size() > 0) {
45
46 Set<User> users = new HashSet<User>(userIds.size());
47 for (Integer userId: userIds)
48 users.add(userService.getUser(userId));
49
50
51 for (User user: users) {
52 userPermissionModels = userService.getUserPermissionsLocal(user);
53
54
55
56
57
58
59
60
61
62
63
64 for (Integer type: permissions)
65 userPermissionModels.add(new Permission(type, user, project));
66
67
68 userService.setUserPermissions(user.getId(), userPermissionModels);
69 userService.updateAuthenticator(user.getId(), userPermissionModels);
70 }
71 }
72
73 }
74
75
76
77
78
79
80
81
82
83
84 public static final void updateProjectOwners(Project project,
85 Set<Integer> userIds, ProjectService projectService,
86 UserService userService) {
87 Set<Permission> userPermissionModels;
88
89 if (log.isDebugEnabled()) {
90 log.debug("updateProjectOwners: setting new owners: " + userIds);
91 }
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117 for (Integer userId: userIds) {
118 User usermodel = userService.getUser(userId);
119 boolean newPermissions = false;
120 userPermissionModels = new HashSet<Permission>(userService.getUserPermissionsLocal(usermodel));
121 if (log.isDebugEnabled()) {
122 log.debug("updateProjectOwners: setting owner " + usermodel + " to " + project);
123 }
124 for (Integer permission: UserUtilities.ALL_PERMISSIONS_SET) {
125 if (userPermissionModels.add(new Permission(permission,
126 usermodel, project))) {
127 newPermissions = true;
128 }
129 }
130 if (newPermissions) {
131 userService.addUserPermissions(usermodel.getId(),
132 new ArrayList<Permission>(userPermissionModels));
133 if (log.isDebugEnabled()) {
134 log.debug("updateProjectOwners: updated permissions for " + usermodel + " to " + userPermissionModels);
135 }
136 }
137 }
138
139 projectService.setProjectOwners(project, userIds);
140 }
141
142 public static final void setFormProperties(Project project, ProjectService projectService,
143 ActionForm form, ActionMessages errors)
144 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
145 project.setDescription((String) PropertyUtils.getSimpleProperty(
146 form, "description"));
147 project.setName((String) PropertyUtils.getSimpleProperty(form,
148 "name"));
149 Integer projectStatus = (Integer) PropertyUtils.getSimpleProperty(
150 form, "status");
151
152 String projectName = (String) PropertyUtils.getSimpleProperty(form, "name");
153
154 project.setName(projectName);
155
156
157
158
159
160
161 if (errors.isEmpty()) {
162 if (projectStatus != null) {
163 project.setStatus(Status.valueOf(projectStatus));
164 } else {
165 project.setStatus(Status.ACTIVE);
166 }
167
168 Integer[] optionValues = (Integer[]) PropertyUtils
169 .getSimpleProperty(form, "options");
170 int optionmask = 0;
171 if (optionValues != null) {
172 for (int i = 0; i < optionValues.length; i++) {
173 optionmask += optionValues[i].intValue();
174 }
175 }
176 project.setOptions(optionmask);
177
178 Integer[] fieldsArray = (Integer[]) PropertyUtils.getSimpleProperty(form, "fields");
179 Set<Integer> fields = null == fieldsArray? new HashSet<Integer>(0):
180 new HashSet<Integer>(Arrays.asList(fieldsArray));
181
182 projectService.setProjectFields(project, fields);
183
184 }
185 }
186 }