KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > cowsultants > itracker > web > actions > MoveIssueFormAction


1 /*
2  * This software was designed and created by Jason Carroll.
3  * Copyright (c) 2002, 2003, 2004 Jason Carroll.
4  * The author can be reached at jcarroll@cowsultants.com
5  * ITracker website: http://www.cowsultants.com
6  * ITracker forums: http://www.cowsultants.com/phpBB/index.php
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it only under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  */

18
19 package cowsultants.itracker.web.actions;
20
21 import java.io.*;
22 import java.rmi.*;
23 import java.util.*;
24 import javax.ejb.*;
25 import javax.rmi.*;
26 import javax.naming.*;
27 import javax.servlet.*;
28 import javax.servlet.http.*;
29
30 import org.apache.commons.beanutils.*;
31 import org.apache.struts.action.*;
32 import org.apache.struts.upload.*;
33 import org.apache.struts.util.*;
34 import org.apache.struts.validator.*;
35
36 import cowsultants.itracker.ejb.client.exceptions.*;
37 import cowsultants.itracker.ejb.client.interfaces.*;
38 import cowsultants.itracker.ejb.client.models.*;
39 import cowsultants.itracker.ejb.client.util.*;
40 import cowsultants.itracker.web.util.*;
41
42
43 public class MoveIssueFormAction extends ITrackerAction {
44
45     public MoveIssueFormAction() {
46     }
47
48     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
49         ActionErrors errors = new ActionErrors();
50
51         if(! isLoggedIn(request, response)) {
52             return mapping.findForward("login");
53         }
54
55         try {
56             InitialContext ic = new InitialContext();
57
58             Object JavaDoc ihRef = ic.lookup("java:comp/env/" + IssueHandler.JNDI_NAME);
59             IssueHandlerHome ihHome = (IssueHandlerHome) PortableRemoteObject.narrow(ihRef, IssueHandlerHome.class);
60             IssueHandler ih = ihHome.create();
61
62             Object JavaDoc phRef = ic.lookup("java:comp/env/" + ProjectHandler.JNDI_NAME);
63             ProjectHandlerHome phHome = (ProjectHandlerHome) PortableRemoteObject.narrow(phRef, ProjectHandlerHome.class);
64             ProjectHandler ph = phHome.create();
65
66             Integer JavaDoc issueId = new Integer JavaDoc((request.getParameter("id") == null ? "-1" : (request.getParameter("id"))));
67             IssueModel issue = ih.getIssue(issueId);
68             if(issue == null) {
69                 errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("itracker.web.error.invalidissue"));
70             }
71
72             if(errors.isEmpty()) {
73                 HttpSession session = request.getSession(true);
74                 HashMap userPermissions = (HashMap) session.getAttribute(Constants.PERMISSIONS_KEY);
75
76                 if(! UserUtilities.hasPermission(userPermissions, issue.getProjectId(), UserUtilities.PERMISSION_EDIT)) {
77                     Logger.logDebug("Unauthorized user requested access to move issue for issue " + issueId);
78                     return mapping.findForward("unauthorized");
79                 }
80
81                 Vector availableProjects = new Vector();
82                 ProjectModel[] projects = ph.getAllAvailableProjects();
83                 for(int i = 0; i < projects.length; i++) {
84                     if(projects[i].getId() != null && issue.getProjectId() != null && projects[i].getId().intValue() != issue.getProjectId().intValue()) {
85                         if(UserUtilities.hasPermission(userPermissions, issue.getProjectId(), new int[] {UserUtilities.PERMISSION_EDIT, UserUtilities.PERMISSION_CREATE})) {
86                             availableProjects.addElement(projects[i]);
87                         }
88                     }
89                 }
90                 if(availableProjects.size() == 0) {
91                     errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("itracker.web.error.noprojects"));
92                 }
93
94                 if(errors.isEmpty()) {
95                     DynaValidatorForm moveIssueForm = (DynaValidatorForm) form;
96                     if(moveIssueForm == null) {
97                         moveIssueForm = new DynaValidatorForm();
98                     }
99                     moveIssueForm.set("issueId", issueId);
100                     moveIssueForm.set("caller", request.getParameter("caller"));
101
102                     ProjectModel[] availableProjectsArray = new ProjectModel[availableProjects.size()];
103                     availableProjects.copyInto(availableProjectsArray);
104                     request.setAttribute("moveIssueForm", moveIssueForm);
105                     session.setAttribute(Constants.PROJECTS_KEY, availableProjectsArray);
106                     session.setAttribute(Constants.ISSUE_KEY, issue);
107                     saveToken(request);
108                     Logger.logDebug("No errors while moving issue. Forwarding to move issue form.");
109                     return mapping.getInputForward();
110                 }
111             }
112         } catch(Exception JavaDoc e) {
113             Logger.logError("Exception while creating move issue form.", e);
114             errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("itracker.web.error.system"));
115         }
116
117         if(! errors.isEmpty()) {
118             saveErrors(request, errors);
119         }
120         return mapping.findForward("error");
121     }
122
123 }
124   
Popular Tags