1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.itracker.web.actions.admin.project;
20
21 import java.io.IOException;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Set;
25
26 import javax.servlet.ServletException;
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.http.HttpServletResponse;
29 import javax.servlet.http.HttpSession;
30
31 import org.apache.log4j.Logger;
32 import org.apache.struts.action.ActionForm;
33 import org.apache.struts.action.ActionForward;
34 import org.apache.struts.action.ActionMapping;
35 import org.apache.struts.action.ActionMessage;
36 import org.apache.struts.action.ActionMessages;
37 import org.itracker.model.CustomField;
38 import org.itracker.model.PermissionType;
39 import org.itracker.model.Project;
40 import org.itracker.model.User;
41 import org.itracker.services.ProjectService;
42 import org.itracker.services.util.ProjectUtilities;
43 import org.itracker.services.util.UserUtilities;
44 import org.itracker.web.actions.base.ItrackerBaseAction;
45 import org.itracker.web.forms.ProjectForm;
46 import org.itracker.web.util.Constants;
47
48
49 public class EditProjectFormAction extends ItrackerBaseAction {
50
51 private static final Logger log = Logger.getLogger(EditProjectFormAction.class);
52
53
54 public ActionForward execute(ActionMapping mapping,
55 ActionForm form,
56 HttpServletRequest request,
57 HttpServletResponse response)
58 throws ServletException, IOException {
59
60 ActionMessages errors = new ActionMessages();
61
62 try {
63 ProjectService projectService = getITrackerServices().getProjectService();
64
65 HttpSession session = request.getSession(true);
66
67
68 Map<Integer, Set<PermissionType>> userPermissions = getUserPermissions(session);
69 User user = (User) session.getAttribute(Constants.USER_KEY);
70
71 ProjectForm projectForm = (ProjectForm) form;
72
73 if (projectForm == null) {
74
75 projectForm = new ProjectForm();
76 }
77
78 Project project;
79 if (projectForm.getAction() != null && projectForm.getAction().equals("update")) {
80 project = null;
81 if (null == projectForm.getId()) {
82 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidproject"));
83 } else {
84 project = projectService.getProject(projectForm.getId());
85 if (null == project) {
86 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidproject"));
87 }
88 }
89
90 } else {
91 project = new Project();
92 }
93
94
95 if ("create".equals(projectForm.getAction())) {
96 if (!user.isSuperUser()) {
97 return mapping.findForward("unauthorized");
98 }
99
100
101 projectForm.setId(project.getId());
102 } else if ("update".equals(projectForm.getAction())) {
103
104
105 if (errors.isEmpty()) {
106
107 if (!UserUtilities.hasPermission(userPermissions, project.getId(), UserUtilities.PERMISSION_PRODUCT_ADMIN)) {
108 return mapping.findForward("unauthorized");
109 } else if (errors.isEmpty()) {
110
111 projectForm.setId(project.getId());
112 projectForm.setName(project.getName());
113 projectForm.setDescription(project.getDescription());
114 projectForm.setStatus(project.getStatus().getCode());
115 int currentOptions = project.getOptions();
116 projectForm.setOptions(ProjectUtilities.getOptions(currentOptions));
117
118 List<CustomField> fields = project.getCustomFields();
119 Integer[] fieldIds = new Integer[fields.size()];
120 for (int i = 0; i < fields.size(); i++) {
121 fieldIds[i] = fields.get(i).getId();
122 }
123 projectForm.setFields(fieldIds);
124
125 List<User> owners = project.getOwners();
126 Integer[] ownerIds = new Integer[owners.size()];
127
128 for (int i = 0; i < owners.size(); i++) {
129 ownerIds[i] = owners.get(i).getId();
130 }
131
132 projectForm.setOwners(ownerIds);
133 }
134 }
135
136 } else {
137 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidaction"));
138 }
139
140 if (errors.isEmpty()) {
141 request.setAttribute("projectForm", projectForm);
142 session.setAttribute(Constants.PROJECT_KEY, project);
143 saveToken(request);
144 ActionForward af = new EditProjectFormActionUtil().init(mapping, request, projectForm);
145 if (af != null) {
146 return af;
147 }
148 return mapping.getInputForward();
149 }
150
151 } catch (Exception e) {
152 log.error("Exception while creating edit project form.", e);
153 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
154 }
155
156 if (!errors.isEmpty()) {
157 saveErrors(request, errors);
158 }
159
160 return mapping.findForward("error");
161
162 }
163
164 }