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
31
32
33
34
35
36
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
71
72
73
74
75
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
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
187
188
189
190
191
192
193
194
195 return pto;
196 }
197 }