1 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 login, String 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 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 projectId, String login, String 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 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 login, String 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 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 login, String authentication, int authType, String 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 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 login, String authentication, int authType, String 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 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 projectId, String login, String 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 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 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 phRef = ic.lookup("java:comp/env/" + ProjectHandler.JNDI_NAME); 259 phHome = (ProjectHandlerHome) PortableRemoteObject.narrow(phRef, ProjectHandlerHome.class); 260 261 Object scRef = ic.lookup("java:comp/env/" + SystemConfiguration.JNDI_NAME); 262 scHome = (SystemConfigurationHome) PortableRemoteObject.narrow(scRef, SystemConfigurationHome.class); 263 264 Object 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 |