View Javadoc

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   * Helper utils for admin project actions.
24   *
25   */
26  public class AdminProjectUtilities {
27  	private static final Logger log = Logger.getLogger(AdminProjectUtilities.class);
28  
29  	/**
30  	 * When creating project, initial set of users with specific set of rights
31  	 * can be defined.
32  	 * 
33  	 * @param project the project
34  	 * @param userIds the user IDs
35  	 * @param permissions the permissions
36  	 * @param projectService the project service
37  	 * @param userService the user service
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  			// process member-users
51  			for (User user: users) {
52  				userPermissionModels = userService.getUserPermissionsLocal(user);
53  
54  				// remove all user permissions for current project
55  				//				Iterator<Permission> userPIterator = userPermissionModels
56  				//						.iterator();
57  				//				while (userPIterator.hasNext()) {
58  				//					Permission permission = (Permission) userPIterator.next();
59  				//					if (project.equals(permission.getProject())) {
60  				//						userPermissionModels.remove(permission);
61  				//					}
62  				//				}
63  				// add all needed permissions
64  				for (Integer type: permissions) 
65  					userPermissionModels.add(new Permission(type, user, project));
66  
67  				// save the permissions
68  				userService.setUserPermissions(user.getId(), userPermissionModels);
69  				userService.updateAuthenticator(user.getId(), userPermissionModels);
70  			}
71  		}
72  
73  	}
74  
75  
76  	/**
77  	 * Setup permissions for updated project-owners.
78  	 * 
79  	 * @param project the project
80  	 * @param userIds the user IDs
81  	 * @param userService the user service
82  	 * @param locale the user language locale
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  		// cleanup current owners permissions
94  		// TODO: needed? If user is no more owner, he can still be admin
95  		//		Collection<User> currentOwners = projectService
96  		//				.getProjectOwners(project.getId());
97  
98  		//		Iterator<User> currentOwnersIt = currentOwners.iterator();
99  		//		while (currentOwnersIt.hasNext()) {
100 		//			User user = (User) currentOwnersIt.next();
101 		//			Iterator<Permission> currentPermissionsIt = userService.getUserPermissionsLocal(user).iterator();
102 		//			while (currentPermissionsIt.hasNext()) {
103 		//				Permission permission = (Permission) currentPermissionsIt
104 		//						.next();
105 		//				if (project.equals(permission.getProject()) && 
106 		//						permission.getPermissionType() == UserUtilities.PERMISSION_PRODUCT_ADMIN) {
107 		//					user.getPermissions().remove(permission);
108 		//				}
109 		//				userService.setUserPermissions(user.getId(), user.getPermissions());
110 		//			}
111 		//		}
112 
113 		// remove all owners
114 		//		projectService.setProjectOwners(project, new HashSet<Integer>(0));
115 
116 		// add all defined owners to project
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 //		if (projectService.isUniqueProjectName(projectName, project.getId())) {
154 			project.setName(projectName);
155 //		} else {
156 //			errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.project.duplicate.name"));
157 //			//			throw new ProjectException(
158 //			//					"Project already exist with this name.");
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 }