KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > cowsultants > itracker > ejb > beans > webservice > ProjectServiceBean


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.ejb.beans.webservice;
20
21 import java.util.*;
22 import java.rmi.*;
23 import javax.ejb.*;
24 import javax.jms.*;
25 import javax.naming.*;
26 import javax.rmi.*;
27
28 import cowsultants.itracker.ejb.beans.entity.*;
29 import cowsultants.itracker.ejb.beans.message.*;
30 import cowsultants.itracker.ejb.client.exceptions.*;
31 import cowsultants.itracker.ejb.client.interfaces.*;
32 import cowsultants.itracker.ejb.client.models.*;
33 import cowsultants.itracker.ejb.client.resources.*;
34 import cowsultants.itracker.ejb.client.util.*;
35
36
37 public class ProjectServiceBean implements SessionBean {
38     private InitialContext ic = null;
39     private ProjectHandlerHome phHome = null;
40     private SystemConfigurationHome scHome = null;
41     private UserHandlerHome uhHome = null;
42
43
44     public ProjectModel[] getAllProjects(String JavaDoc login, String JavaDoc authentication, int authType) throws ProjectException {
45         int[] requiredPermissions = new int[] { UserUtilities.PERMISSION_VIEW_ALL, UserUtilities.PERMISSION_VIEW_USERS, UserUtilities.PERMISSION_CREATE };
46         Vector projectVector = new Vector();
47         ProjectModel[] projectArray = new ProjectModel[0];
48
49         try {
50             UserHandler uh = uhHome.create();
51             UserModel user = uh.checkLogin(login, authentication, authType, AuthenticationConstants.REQ_SOURCE_API);
52
53             if(user == null) {
54                 throw new AuthenticatorException(AuthenticatorException.UNKNOWN_USER);
55             }
56
57             HashMap permissions = uh.getUserPermissions(user, AuthenticationConstants.REQ_SOURCE_API);
58
59             ProjectHandler ph = phHome.create();
60             ProjectModel[] projects = ph.getAllAvailableProjects();
61             for(int i = 0; i < projects.length; i++) {
62                 if(ProjectUtilities.hasProjectAccess(projects[i].getId(), permissions)) {
63                     projects[i].setComponents(ph.getProjectComponents(projects[i].getId()));
64                     projects[i].setVersions(ph.getProjectVersions(projects[i].getId()));
65                     projectVector.add(projects[i]);
66                 }
67             }
68
69             projectArray = new ProjectModel[projectVector.size()];
70             projectVector.copyInto(projectArray);
71         } catch(Exception JavaDoc e) {
72             Logger.logInfo("Exception while getting project list for user " + login, e);
73             throw new ProjectException("Exception while getting project list for user " + login + ". Message: " + e.getMessage());
74         }
75
76         return projectArray;
77     }
78
79     public ProjectModel getProject(Integer JavaDoc projectId, String JavaDoc login, String JavaDoc authentication, int authType) throws ProjectException {
80         ProjectModel project = null;
81
82         try {
83             UserHandler uh = uhHome.create();
84             UserModel user = uh.checkLogin(login, authentication, authType, AuthenticationConstants.REQ_SOURCE_API);
85
86             if(user == null) {
87                 throw new AuthenticatorException(AuthenticatorException.UNKNOWN_USER);
88             }
89
90             HashMap permissions = uh.getUserPermissions(user, AuthenticationConstants.REQ_SOURCE_API);
91
92             ProjectHandler ph = phHome.create();
93             project = ph.getProject(projectId);
94             if(project != null) {
95                 if(ProjectUtilities.hasProjectAccess(project.getId(), permissions)) {
96                     project.setComponents(ph.getProjectComponents(project.getId()));
97                     project.setVersions(ph.getProjectVersions(project.getId()));
98                 } else {
99                     throw new AuthenticationException("User does not have required permissions for this action.");
100                 }
101             }
102         } catch(Exception JavaDoc e) {
103             Logger.logInfo("Exception while getting project " + projectId + " for user " + login, e);
104             throw new ProjectException("Exception while getting project " + projectId + " for user " + login + ". Message: " + e.getMessage());
105         }
106
107         return project;
108     }
109
110     public ProjectModel[] getProjectsAvailableForCreate(String JavaDoc login, String JavaDoc authentication, int authType) throws ProjectException {
111         int requiredPermissions = UserUtilities.PERMISSION_CREATE;
112         Vector projectVector = new Vector();
113         ProjectModel[] projectArray = new ProjectModel[0];
114
115         try {
116             UserHandler uh = uhHome.create();
117             UserModel user = uh.checkLogin(login, authentication, authType, AuthenticationConstants.REQ_SOURCE_API);
118
119             if(user == null) {
120                 throw new AuthenticatorException(AuthenticatorException.UNKNOWN_USER);
121             }
122
123             HashMap permissions = uh.getUserPermissions(user, AuthenticationConstants.REQ_SOURCE_API);
124
125             ProjectHandler ph = phHome.create();
126             ProjectModel[] projects = ph.getAllAvailableProjects();
127             for(int i = 0; i < projects.length; i++) {
128                 if(projects[i].getStatus() == ProjectUtilities.STATUS_ACTIVE && UserUtilities.hasPermission(permissions, projects[i].getId(), requiredPermissions)) {
129                     projects[i].setComponents(ph.getProjectComponents(projects[i].getId()));
130                     projects[i].setVersions(ph.getProjectVersions(projects[i].getId()));
131                     projectVector.add(projects[i]);
132                 }
133             }
134
135             projectArray = new ProjectModel[projectVector.size()];
136             projectVector.copyInto(projectArray);
137         } catch(Exception JavaDoc e) {
138             Logger.logInfo("Exception while getting project list for user " + login, e);
139             throw new ProjectException("Exception while getting project list for user " + login + ". Message: " + e.getMessage());
140         }
141
142         return projectArray;
143     }
144
145     public CustomFieldModel[] getCustomFields(String JavaDoc login, String JavaDoc authentication, int authType, String JavaDoc locale) throws ProjectException {
146         try {
147             UserHandler uh = uhHome.create();
148             UserModel user = uh.checkLogin(login, authentication, authType, AuthenticationConstants.REQ_SOURCE_API);
149
150             if(user == null) {
151                 throw new AuthenticatorException(AuthenticatorException.UNKNOWN_USER);
152             }
153
154             HashMap permissions = uh.getUserPermissions(user, AuthenticationConstants.REQ_SOURCE_API);
155
156             Locale loc = ITrackerResources.getLocale(locale);
157
158             return getAvailableCustomFields(permissions, loc);
159         } catch(Exception JavaDoc e) {
160             Logger.logInfo("Exception while getting custom fields for user " + login, e);
161             throw new ProjectException("Exception while getting custom fields for user " + login + ". Message: " + e.getMessage());
162         }
163     }
164
165     public SystemConfigurationModel getSystemConfiguration(String JavaDoc login, String JavaDoc authentication, int authType, String JavaDoc locale) throws ProjectException {
166         try {
167             UserHandler uh = uhHome.create();
168             UserModel user = uh.checkLogin(login, authentication, authType, AuthenticationConstants.REQ_SOURCE_API);
169
170             if(user == null) {
171                 throw new AuthenticatorException(AuthenticatorException.UNKNOWN_USER);
172             }
173
174             HashMap permissions = uh.getUserPermissions(user, AuthenticationConstants.REQ_SOURCE_API);
175
176             Locale loc = ITrackerResources.getLocale(locale);
177             SystemConfiguration sc = scHome.create();
178             SystemConfigurationModel configuration = sc.getSystemConfiguration(loc);
179
180             return (configuration == null ? new SystemConfigurationModel() : configuration);
181         } catch(Exception JavaDoc e) {
182             Logger.logInfo("Exception while getting system configuration for user " + login, e);
183             throw new ProjectException("Exception while getting system configuration for user " + login + ". Message: " + e.getMessage());
184         }
185     }
186
187     public UserModel[] getProjectPossibleOwners(Integer JavaDoc projectId, String JavaDoc login, String JavaDoc authentication, int authType) throws ProjectException {
188         UserModel[] users = new UserModel[0];
189
190         try {
191             UserHandler uh = uhHome.create();
192             UserModel user = uh.checkLogin(login, authentication, authType, AuthenticationConstants.REQ_SOURCE_API);
193
194             if(user == null) {
195                 throw new AuthenticatorException(AuthenticatorException.UNKNOWN_USER);
196             }
197
198             HashMap permissions = uh.getUserPermissions(user, AuthenticationConstants.REQ_SOURCE_API);
199
200             ProjectHandler ph = phHome.create();
201             ProjectModel project = ph.getProject(projectId);
202             if(project != null) {
203                 if(UserUtilities.hasPermission(permissions, project.getId(), UserUtilities.PERMISSION_ASSIGN_OTHERS)) {
204                     users = uh.getUsersWithProjectPermission(projectId, UserUtilities.PERMISSION_EDIT);
205                 } else if(UserUtilities.hasPermission(permissions, project.getId(), UserUtilities.PERMISSION_ASSIGN_SELF) &&
206                           UserUtilities.hasPermission(permissions, project.getId(), UserUtilities.PERMISSION_EDIT)) {
207                     users = new UserModel[] { user };
208                 }
209             }
210         } catch(Exception JavaDoc e) {
211             Logger.logInfo("Exception while getting owners for project " + projectId + " for user " + login, e);
212             throw new ProjectException("Exception while getting owners for project " + projectId + " for user " + login + ". Message: " + e.getMessage());
213         }
214
215         return users;
216     }
217
218     private CustomFieldModel[] getAvailableCustomFields(HashMap permissions, Locale locale) {
219         CustomFieldModel[] availableFieldsArray = new CustomFieldModel[0];
220
221         try {
222             CustomFieldModel[] allFields = IssueUtilities.getCustomFields(locale);
223             HashSet availableFields = new HashSet();
224
225             if(allFields.length > 0) {
226                 ProjectHandler ph = phHome.create();
227                 ProjectModel[] projects = ph.getAllAvailableProjects();
228                 for(int i = 0; i < projects.length; i++) {
229                     Logger.logDebug("Checking project " + projects[i].getName());
230                     if(ProjectUtilities.hasProjectAccess(projects[i].getId(), permissions)) {
231                         for(int j = 0; j < projects[i].getCustomFields().length; j++) {
232                             Logger.logDebug("Adding field " + projects[i].getCustomFields()[j].getId());
233                             availableFields.add(projects[i].getCustomFields()[j]);
234                         }
235                         if(availableFields.size() == allFields.length) {
236                             break;
237                         }
238                     }
239                 }
240                 if(availableFields.size() > 0) {
241                     int i = 0;
242                     availableFieldsArray = new CustomFieldModel[availableFields.size()];
243                     for(Iterator iter = availableFields.iterator(); iter.hasNext(); i++) {
244                         availableFieldsArray[i] = (CustomFieldModel) iter.next();
245                     }
246                 }
247             }
248         } catch(Exception JavaDoc e) {
249             Logger.logInfo("Exception while getting custom fields.", e);
250         }
251
252         return availableFieldsArray;
253     }
254
255     public void ejbCreate() {
256         try {
257             ic = new InitialContext();
258             Object JavaDoc phRef = ic.lookup("java:comp/env/" + ProjectHandler.JNDI_NAME);
259             phHome = (ProjectHandlerHome) PortableRemoteObject.narrow(phRef, ProjectHandlerHome.class);
260
261             Object JavaDoc scRef = ic.lookup("java:comp/env/" + SystemConfiguration.JNDI_NAME);
262             scHome = (SystemConfigurationHome) PortableRemoteObject.narrow(scRef, SystemConfigurationHome.class);
263
264             Object JavaDoc uhRef = ic.lookup("java:comp/env/" + UserHandler.JNDI_NAME);
265             uhHome = (UserHandlerHome) PortableRemoteObject.narrow(uhRef, UserHandlerHome.class);
266         } catch(NamingException ne) {
267             Logger.logError("Exception while looking up home interfaces.", ne);
268         }
269     }
270
271     public void setSessionContext(SessionContext value) {}
272     public void ejbActivate() {}
273     public void ejbPassivate() {}
274     public void ejbRemove() {}
275 }
276   
Popular Tags