1 4 package com.nightlabs.ipanema.organisation; 5 6 import java.io.Serializable ; 7 import java.util.Collection ; 8 import java.util.Date ; 9 10 import javax.jdo.JDOHelper; 11 import javax.jdo.PersistenceManager; 12 import javax.jdo.Query; 13 14 import com.nightlabs.ipanema.security.User; 15 16 43 public class RegistrationStatus 44 implements Serializable  45 { 46 public static String DIRECTION_WE_APPLY = "we"; 47 public static String DIRECTION_THEY_APPLY = "they"; 48 49 public static String STATUS_PENDING = "pending"; 50 public static String STATUS_ACCEPTED = "accepted"; 51 public static String STATUS_REJECTED = "rejected"; 52 public static String STATUS_CANCELLED = "cancelled"; 53 54 public static void ensureRegisterability( 55 PersistenceManager pm, 56 LocalOrganisation localOrganisation, 57 String otherOrganisationID) 58 throws OrganisationAlreadyRegisteredException 59 { 60 Query query = pm.newQuery(RegistrationStatus.class, "this.organisationID == applicantOrganisationID && this.status == statusAccepted"); 61 query.declareImports("import "+String .class.getName()); 62 query.declareParameters("String applicantOrganisationID, String statusAccepted"); 63 Collection c = (Collection )query.execute( 64 otherOrganisationID, RegistrationStatus.STATUS_ACCEPTED); 65 if (!c.isEmpty()) 66 throw new OrganisationAlreadyRegisteredException("The organisation \""+otherOrganisationID+"\" is already registered (status accepted) at organisation \""+localOrganisation.getOrganisationID()+"\"!"); 67 68 RegistrationStatus registrationStatus = localOrganisation.getPendingRegistration(otherOrganisationID); 69 if (registrationStatus != null) { 70 if (RegistrationStatus.STATUS_PENDING.equals(registrationStatus.getStatus())) 76 registrationStatus.cancel(null); 77 } 78 } 79 80 84 private String registrationID; 85 86 90 private String organisationID; 91 92 96 private String direction; 97 98 102 private Organisation organisation = null; 103 104 107 private String status; 108 109 115 private Date openDT; 116 123 private User openUser = null; 124 125 132 private Date closeDT = null; 133 139 private User closeUser = null; 140 141 144 private String initialContextFactory = null; 145 146 149 private String initialContextURL = null; 150 151 154 protected RegistrationStatus() 155 { 156 } 157 158 165 public RegistrationStatus( 166 String registrationID, String organisationID, User user, 167 String initialContextFactory, String initialContextURL) 168 { 169 if (registrationID == null) 170 throw new NullPointerException ("registrationID"); 171 172 this.registrationID = registrationID; 173 this.organisationID = organisationID; 174 this.openDT = new Date (); 175 this.openUser = user; 176 this.direction = DIRECTION_WE_APPLY; 177 this.status = STATUS_PENDING; 178 this.initialContextFactory = initialContextFactory; 179 this.initialContextURL = initialContextURL; 180 } 181 182 189 public RegistrationStatus(String registrationID, Organisation organisation) 190 { 191 if (registrationID == null) 192 throw new NullPointerException ("registrationID"); 193 194 if (organisation == null) 195 throw new NullPointerException ("organisation"); 196 197 this.registrationID = registrationID; 198 this.organisation = organisation; 199 this.organisationID = organisation.getOrganisationID(); 200 this.direction = DIRECTION_THEY_APPLY; 201 this.openDT = new Date (); 202 this.status = STATUS_PENDING; 203 } 204 207 public String getRegistrationID() 208 { 209 return registrationID; 210 } 211 214 public Organisation getOrganisation() 215 { 216 return organisation; 217 } 218 221 public String getOrganisationID() 222 { 223 return organisationID; 224 } 225 228 public String getDirection() 229 { 230 return direction; 231 } 232 235 public String getStatus() 236 { 237 return status; 238 } 239 240 246 public void accept(User user) 247 { 248 if (user == null) 249 throw new NullPointerException ("user"); 250 251 if (!STATUS_PENDING.equals(getStatus())) 252 throw new IllegalStateException ("Cannot accept, because status is not STATUS_PENDING!"); 253 254 this.closeDT = new Date (); 255 this.closeUser = user; 256 this.status = STATUS_ACCEPTED; 257 } 258 259 271 public void cancel(User user) 272 { 273 cancelOrReject(user, STATUS_CANCELLED); 274 } 275 276 282 public void reject(User user) 283 { 284 cancelOrReject(user, STATUS_REJECTED); 285 } 286 287 297 protected void cancelOrReject(User user, String status) 298 { 299 PersistenceManager pm = JDOHelper.getPersistenceManager(this); 300 if (pm == null) 301 throw new IllegalStateException ("This instance of RegistrationStatus is currently not persistent!"); 302 303 if (!STATUS_PENDING.equals(getStatus())) 304 throw new IllegalStateException ("Cannot change status, because current status is not STATUS_PENDING!"); 305 306 this.closeDT = new Date (); 307 this.closeUser = user; 308 this.status = status; 309 310 if (this.organisation != null) { 311 Organisation org = this.organisation; 312 nullifyOrganisation(); 313 pm.deletePersistent(org); 314 } 315 } 316 317 private void nullifyOrganisation() 318 { 319 this.organisation = null; 320 } 321 322 325 public Date getCloseDT() 326 { 327 return closeDT; 328 } 329 332 public User getCloseUser() 333 { 334 return closeUser; 335 } 336 339 public Date getOpenDT() 340 { 341 return openDT; 342 } 343 346 public User getOpenUser() 347 { 348 return openUser; 349 } 350 353 public String getInitialContextFactory() 354 { 355 return initialContextFactory; 356 } 357 360 public String getInitialContextURL() 361 { 362 return initialContextURL; 363 } 364 }
| Popular Tags
|