View Javadoc

1   package org.itracker.web.actions.project;
2   
3   import java.util.ArrayList;
4   import java.util.Collections;
5   import java.util.Iterator;
6   import java.util.List;
7   import java.util.Map;
8   import java.util.Set;
9   
10  import javax.servlet.http.HttpServletRequest;
11  import javax.servlet.http.HttpServletResponse;
12  
13  import org.apache.log4j.Logger;
14  import org.apache.struts.action.ActionForm;
15  import org.apache.struts.action.ActionForward;
16  import org.apache.struts.action.ActionMapping;
17  import org.itracker.model.PermissionType;
18  import org.itracker.model.Project;
19  import org.itracker.services.ProjectService;
20  import org.itracker.services.util.UserUtilities;
21  import org.itracker.web.actions.base.ItrackerBaseAction;
22  import org.itracker.web.ptos.ProjectPTO;
23  import org.itracker.web.util.RequestHelper;
24  
25  public class ListProjectsAction extends ItrackerBaseAction {
26  	private static final Logger log = Logger
27  			.getLogger(ListProjectsAction.class);
28  
29  	/**
30  	 * returns listing of ALL projects with given permissions. Also locked and
31  	 * view-only projects are selected.
32  	 * 
33  	 * @param projectService
34  	 * @param permissionFlags
35  	 * @param permissions
36  	 * @return
37  	 */
38  	protected static List<ProjectPTO> getAllPTOs(ProjectService projectService,
39  			int[] permissionFlags,
40  			final Map<Integer, Set<PermissionType>> permissions) {
41  		List<Project> projects = projectService.getAllProjects();
42  
43  		ArrayList<Project> projects_tmp = new ArrayList<Project>(projects);
44  		Iterator<Project> projectIt = projects.iterator();
45  		while (projectIt.hasNext()) {
46  			Project project = (Project) projectIt.next();
47  			if (!UserUtilities.hasPermission(permissions, project.getId(),
48  					permissionFlags)) {
49  				projects_tmp.remove(project);
50  			}
51  		}
52  
53  		projects = projects_tmp;
54  		Collections.sort(projects, new Project.ProjectComparator());
55  
56  		ArrayList<ProjectPTO> ptos = new ArrayList<ProjectPTO>(projects_tmp
57  				.size());
58  
59  		projectIt = projects.iterator();
60  
61  		while (projectIt.hasNext()) {
62  			Project project = projectIt.next();
63  			ptos.add(createProjectPTO(project, projectService, permissions));
64  		}
65  
66  		return ptos;
67  	}
68  
69  	/**
70  	 * returns PTOs of all AVAILABLE projects, ensured permissions are set.
71  	 * 
72  	 * @param projectService
73  	 * @param permissionFlags
74  	 * @param permissions
75  	 * @return
76  	 */
77  	protected static List<ProjectPTO> getPTOs(ProjectService projectService,
78  			int[] permissionFlags,
79  			final Map<Integer, Set<PermissionType>> permissions) {
80  		List<Project> projects = projectService.getAllAvailableProjects();
81  
82  		ArrayList<Project> projects_tmp = new ArrayList<Project>(projects);
83  		Iterator<Project> projectIt = projects.iterator();
84  		while (projectIt.hasNext()) {
85  			Project project = (Project) projectIt.next();
86  			if (!UserUtilities.hasPermission(permissions, project.getId(),
87  					permissionFlags)) {
88  				projects_tmp.remove(project);
89  			}
90  		}
91  
92  		projects = projects_tmp;
93  		Collections.sort(projects, new Project.ProjectComparator());
94  
95  		ArrayList<ProjectPTO> ptos = new ArrayList<ProjectPTO>(projects_tmp
96  				.size());
97  
98  		projectIt = projects.iterator();
99  
100 		while (projectIt.hasNext()) {
101 			Project project = projectIt.next();
102 			ptos.add(createProjectPTO(project, projectService, permissions));
103 		}
104 
105 		return ptos;
106 	}
107 
108 	public ActionForward execute(ActionMapping mapping, ActionForm form,
109 			HttpServletRequest request, HttpServletResponse response)
110 			throws Exception {
111 
112 		final Map<Integer, Set<PermissionType>> permissions = RequestHelper
113 				.getUserPermissions(request.getSession());
114 
115 		ProjectService projectService = this.getITrackerServices()
116 				.getProjectService();
117 
118 		request.setAttribute("projects", getPTOs(projectService, new int[] {
119 				UserUtilities.PERMISSION_VIEW_ALL,
120 				UserUtilities.PERMISSION_VIEW_USERS }, permissions));
121 
122 		String pageTitleKey = "itracker.web.listprojects.title";
123 		String pageTitleArg = "";
124 
125 		request.setAttribute("pageTitleKey", pageTitleKey);
126 		request.setAttribute("pageTitleArg", pageTitleArg);
127 
128 		log.info("ListProjectsAction: Forward: listprojects");
129 		return mapping.findForward("list_projects");
130 	}
131 
132 //	private static final void setupNumberOfIssues(ProjectPTO pto,
133 //			ProjectService service) {
134 //		pto.setTotalNumberIssues(service.getTotalNumberIssuesByProject(pto
135 //				.getId()));
136 //	}
137 //
138 //	private static final void setupNumberOfOpenIssues(ProjectPTO pto,
139 //			ProjectService service) {
140 //		pto.setTotalOpenIssues(service.getTotalNumberOpenIssuesByProject(pto
141 //				.getId()));
142 //	}
143 //
144 //	private static final void setupNumberOfResolvedIssues(ProjectPTO pto,
145 //			ProjectService service) {
146 //		pto.setTotalResolvedIssues(service
147 //				.getTotalNumberResolvedIssuesByProject(pto.getId()));
148 //	}
149 //
150 //	private static final void setupCanCreate(ProjectPTO pto,
151 //			final Map<Integer, Set<PermissionType>> permissions) {
152 //		pto.setCanCreate(UserUtilities.hasPermission(permissions, pto.getId(),
153 //				UserUtilities.PERMISSION_CREATE));
154 //	}
155 //
156 //	private static final void setupLastIssueUpdateDate(ProjectPTO pto,
157 //			ProjectService service) {
158 //		pto.setLastUpdatedIssueDate(service
159 //				.getLatestIssueUpdatedDateByProjectId(pto.getId()));
160 //	}
161 
162 	/**
163 	 * 
164 	 * Makes a page transfer object for the project in first argument.
165 	 * 
166 	 * @param project
167 	 *            - wrapped project for the pto
168 	 * @param projectService
169 	 *            - project-service
170 	 * @param permissions
171 	 *            - users permissions
172 	 * @param stats
173 	 *            - if true, additional stats will be generated
174 	 *            (performance-problem):
175 	 *            <ul>
176 	 *            <li>no. open issues</li>
177 	 *            <li>no. closed issues</li>
178 	 *            <li>lasst updated issues updated-date</li>
179 	 *            </ul>
180 	 * @return
181 	 */
182 	private static final ProjectPTO createProjectPTO(Project project,
183 			ProjectService projectService,
184 			final Map<Integer, Set<PermissionType>> permissions) {
185 		ProjectPTO pto = new ProjectPTO(project, projectService, permissions);
186 //		if (stats) {
187 //			setupNumberOfOpenIssues(pto, projectService);
188 //			setupNumberOfResolvedIssues(pto, projectService);
189 //			setupLastIssueUpdateDate(pto, projectService);
190 //		} else {
191 //			// just add a total-numbers issuess
192 //			setupNumberOfIssues(pto, projectService);
193 //		}
194 //		setupCanCreate(pto, permissions);
195 		return pto;
196 	}
197 }