1 6 package com.nightlabs.ipanema.person; 7 8 import java.io.Serializable ; 9 import java.util.ArrayList ; 10 import java.util.Collection ; 11 import java.util.HashMap ; 12 import java.util.Iterator ; 13 import java.util.List ; 14 import java.util.Map ; 15 16 import javax.jdo.PersistenceManager; 17 18 import com.nightlabs.ipanema.base.DuplicateKeyException; 19 import com.nightlabs.ipanema.organisation.Organisation; 20 import com.nightlabs.ipanema.person.id.PersonStructBlockID; 21 import com.nightlabs.ipanema.person.id.PersonStructFieldID; 22 23 30 31 40 public class PersonStruct implements Serializable { 41 protected PersonStruct() { } 42 43 58 protected Map personStructBlocks = new HashMap (); 59 60 61 public void addPersonStructBlock(PersonStructBlock personStructBlock) 62 throws DuplicateKeyException 63 { 64 String primaryKey = personStructBlock.getPrimaryKey(); 65 if (personStructBlocks.containsKey(primaryKey)) 66 throw new DuplicateKeyException("A personStructBlock with key "+primaryKey+" already exists for this PersonsStruct."); 67 personStructBlocks.put(primaryKey,personStructBlock); 68 } 69 70 74 public Collection getPersonStructBlocks() { 75 return personStructBlocks.values(); 76 } 77 78 85 public PersonStructBlock getPersonStructBlock(PersonStructBlockID personStructBlockID) 86 throws PersonStructBlockNotFoundException 87 { 88 return getPersonStructBlock(personStructBlockID.personStructBlockOrganisationID, personStructBlockID.personStructBlockID); 89 } 90 91 100 public PersonStructBlock getPersonStructBlock(String personStructBlockOrganisationID, String personStructBlockID) 101 throws PersonStructBlockNotFoundException 102 { 103 String primaryKey = PersonStructBlock.getPrimaryKey(personStructBlockOrganisationID,personStructBlockID); 104 PersonStructBlock psb = (PersonStructBlock)personStructBlocks.get(primaryKey); 105 if (psb == null) 106 throw new PersonStructBlockNotFoundException("No PersonStructBlock found with key "+primaryKey); 107 return psb; 108 } 109 110 public AbstractPersonStructField getPersonStructField( 111 PersonStructBlock personStructBlock, 112 String personStructFieldOrganisationID, 113 String personStructFieldID 114 ) throws PersonStructFieldNotFoundException 115 { 116 return personStructBlock.getPersonStructField(personStructFieldOrganisationID,personStructFieldID); 117 } 118 119 public AbstractPersonStructField getPersonStructField( 120 PersonStructBlockID personStructBlockID, 121 PersonStructFieldID personStructFieldID 122 ) 123 throws PersonStructFieldNotFoundException, PersonStructBlockNotFoundException 124 { 125 return getPersonStructField( 126 personStructBlockID.personStructBlockOrganisationID, 127 personStructBlockID.personStructBlockID, 128 personStructFieldID.personStructFieldOrganisationID, 129 personStructFieldID.personStructFieldID 130 ); 131 } 132 133 public AbstractPersonStructField getPersonStructField( 134 String personStructBlockOrganisationID, 135 String personStructBlockID, 136 String personStructFieldOrganisationID, 137 String personStructFieldID 138 ) 139 throws PersonStructFieldNotFoundException, PersonStructBlockNotFoundException 140 { 141 PersonStructBlock personStructBlock = getPersonStructBlock(personStructBlockOrganisationID,personStructBlockID); 142 return personStructBlock.getPersonStructField(personStructFieldOrganisationID,personStructFieldID); 143 } 144 145 146 156 protected List personDisplayNameParts = new ArrayList (); 157 158 public Collection getPersonDisplayNameParts() { 159 return personDisplayNameParts; 160 } 161 162 public void addPersonDisplayNamePart(PersonDisplayNamePart part) { 163 getPersonDisplayNameParts().add(part); 164 } 165 166 public void removePersonDisplayNamePart(PersonDisplayNamePart part) { 167 getPersonDisplayNameParts().remove(part); 168 } 169 170 private PersonStructBlock internalPersonStructBlock; 171 public PersonStructBlock getInternalPersonStructBlock() { 172 return internalPersonStructBlock; 173 } 174 175 176 184 public static PersonStruct getPersonStruct(PersistenceManager pm) { 185 Iterator it = pm.getExtent(PersonStruct.class).iterator(); 186 if (it.hasNext()) { 187 return (PersonStruct)it.next(); 188 } 189 else { 190 PersonStruct ps = new PersonStruct(); 191 pm.makePersistent(ps); 192 createStandardStructure(ps); 193 return ps; 194 } 195 } 196 197 204 public void explodePerson(Person person) { 205 for (Iterator it = personStructBlocks.values().iterator(); it.hasNext(); ) { 206 PersonStructBlock structBlock = (PersonStructBlock)it.next(); 208 if (!person.hasStructBlockRepresentation(structBlock.getPersonStructBlockOrganisationID(),structBlock.getPersonStructBlockID())) { 209 try { 211 PersonDataBlockGroup blockGroup = person.addDataBlockGroup(structBlock,this); 214 blockGroup.explodeBlockGroup(this); 215 } catch (DuplicateKeyException e) { 216 IllegalStateException ill = new IllegalStateException ("Added not represented structBlock but still caught DuplicateKeyException"); 217 e.initCause(e); 218 throw ill; 219 } 220 } 221 else { 222 try { 224 PersonDataBlockGroup blockGroup = (PersonDataBlockGroup)person.getPersonDataBlockGroup(structBlock.getPersonStructBlockOrganisationID(),structBlock.getPersonStructBlockID()); 225 blockGroup.explodeBlockGroup(this); 226 } catch (PersonDataBlockGroupNotFoundException e) { 227 continue; 229 } 230 } 231 } 232 } 233 234 239 public void implodePerson(Person person) { 240 for (Iterator it = person.personDataBlockGroups.entrySet().iterator(); it.hasNext(); ) { 241 Map.Entry entry = (Map.Entry )it.next(); 242 PersonDataBlockGroup blockGroup = (PersonDataBlockGroup)entry.getValue(); 243 blockGroup.implodeBlockGroup(); 244 if (blockGroup.isEmpty()) 245 it.remove(); 246 } 247 } 248 249 250 251 protected static void createStandardStructure(PersonStruct ps) { 252 try { 253 254 PersonStructBlock psb = new PersonStructBlock(ps,INTERNALBLOCK); 255 psb.addPersonStructField(new InternalPersonStructField(psb,INTERNALBLOCK_DISPLAYNAME)); 256 ps.internalPersonStructBlock = psb; 257 258 psb = new PersonStructBlock(ps,PERSONALDATA); 259 psb.setUnique(true); 260 TextPersonStructField companyField = new TextPersonStructField(psb,PERSONALDATA_COMPANY); 261 TextPersonStructField nameField = new TextPersonStructField(psb,PERSONALDATA_NAME); 262 TextPersonStructField firstNameField = new TextPersonStructField(psb,PERSONALDATA_FIRSTNAME); 263 264 psb.addPersonStructField(companyField); 265 psb.addPersonStructField(nameField); 266 psb.addPersonStructField(firstNameField); 267 psb.addPersonStructField(new TextPersonStructField(psb,PERSONALDATA_SALUTATION)); 268 psb.addPersonStructField(new TextPersonStructField(psb,PERSONALDATA_TITLE)); 269 psb.addPersonStructField(new TextPersonStructField(psb,PERSONALDATA_DATEOFBIRTH)); 270 ps.addPersonStructBlock(psb); 271 272 psb = new PersonStructBlock(ps,POSTADDRESS); 273 psb.addPersonStructField(new TextPersonStructField(psb,POSTADDRESS_ADDRESS)); 274 psb.addPersonStructField(new TextPersonStructField(psb,POSTADDRESS_POSTCODE)); 275 psb.addPersonStructField(new TextPersonStructField(psb,POSTADDRESS_CITY)); 276 psb.addPersonStructField(new TextPersonStructField(psb,POSTADDRESS_REGION)); 277 psb.addPersonStructField(new TextPersonStructField(psb,POSTADDRESS_COUNTRY)); 278 ps.addPersonStructBlock(psb); 279 280 psb = new PersonStructBlock(ps,PHONE); 281 psb.addPersonStructField(new TextPersonStructField(psb,PHONE_COUNTRYCODE)); 282 psb.addPersonStructField(new TextPersonStructField(psb,PHONE_AREACODE)); 283 psb.addPersonStructField(new TextPersonStructField(psb,PHONE_LOCALNUMBER)); 284 ps.addPersonStructBlock(psb); 285 286 psb = new PersonStructBlock(ps,FAX); 287 psb.addPersonStructField(new TextPersonStructField(psb,FAX_COUNTRYCODE)); 288 psb.addPersonStructField(new TextPersonStructField(psb,FAX_AREACODE)); 289 psb.addPersonStructField(new TextPersonStructField(psb,FAX_LOCALNUMBER)); 290 ps.addPersonStructBlock(psb); 291 292 psb = new PersonStructBlock(ps,INTERNET); 293 psb.addPersonStructField(new TextPersonStructField(psb,INTERNET_EMAIL)); 294 psb.addPersonStructField(new TextPersonStructField(psb,INTERNET_HOMEPAGE)); 295 ps.addPersonStructBlock(psb); 296 297 psb = new PersonStructBlock(ps,BANKDATA); 298 psb.addPersonStructField(new TextPersonStructField(psb,BANKDATA_ACCOUNTHOLDER)); 299 psb.addPersonStructField(new TextPersonStructField(psb,BANKDATA_ACCOUNTNUMBER)); 300 psb.addPersonStructField(new TextPersonStructField(psb,BANKDATA_BANKCODE)); 301 psb.addPersonStructField(new TextPersonStructField(psb,BANKDATA_BANKNAME)); 302 ps.addPersonStructBlock(psb); 303 304 psb = new PersonStructBlock(ps,CREDITCARD); 305 psb.addPersonStructField(new TextPersonStructField(psb,CREDITCARD_CREDITCARDHOLDER)); 306 psb.addPersonStructField(new TextPersonStructField(psb,CREDITCARD_NUMBER)); 307 psb.addPersonStructField(new TextPersonStructField(psb,CREDITCARD_EXPIRYYEAR)); 308 psb.addPersonStructField(new TextPersonStructField(psb,CREDITCARD_EXPIRYMONTH)); 309 ps.addPersonStructBlock(psb); 310 311 psb = new PersonStructBlock(ps,COMMENT); 312 psb.addPersonStructField(new TextPersonStructField(psb,COMMENT_COMMENT)); 313 ps.addPersonStructBlock(psb); 314 315 ps.addPersonDisplayNamePart(new PersonDisplayNamePart(companyField, ": ")); 316 ps.addPersonDisplayNamePart(new PersonDisplayNamePart(nameField, ", ")); 317 ps.addPersonDisplayNamePart(new PersonDisplayNamePart(firstNameField, "")); 318 319 } catch (Throwable t) { 320 throw new RuntimeException (t); 321 } 322 } 323 324 325 327 public static final String ROOT_ORGANISATIONID = Organisation.ROOT_ORGANISATIONID; 328 329 public static final PersonStructBlockID INTERNALBLOCK = PersonStructBlockID.create(ROOT_ORGANISATIONID,"InternalBlock"); 330 public static final PersonStructFieldID INTERNALBLOCK_DISPLAYNAME = PersonStructFieldID.create(INTERNALBLOCK,"DisplayName"); 331 332 public static final PersonStructBlockID PERSONALDATA = PersonStructBlockID.create(ROOT_ORGANISATIONID,"PersonalData"); 333 public static final PersonStructFieldID PERSONALDATA_COMPANY = PersonStructFieldID.create(PERSONALDATA,"Company"); 334 public static final PersonStructFieldID PERSONALDATA_NAME = PersonStructFieldID.create(PERSONALDATA,"Name"); 335 public static final PersonStructFieldID PERSONALDATA_FIRSTNAME = PersonStructFieldID.create(PERSONALDATA,"FirstName"); 336 public static final PersonStructFieldID PERSONALDATA_SALUTATION = PersonStructFieldID.create(PERSONALDATA,"Salutation"); 337 public static final PersonStructFieldID PERSONALDATA_TITLE = PersonStructFieldID.create(PERSONALDATA,"Title"); 338 public static final PersonStructFieldID PERSONALDATA_DATEOFBIRTH = PersonStructFieldID.create(PERSONALDATA,"DateOfBirth"); 339 340 public static final PersonStructBlockID POSTADDRESS = PersonStructBlockID.create(ROOT_ORGANISATIONID,"PostAddress"); 341 public static final PersonStructFieldID POSTADDRESS_ADDRESS = PersonStructFieldID.create(POSTADDRESS,"Address"); 342 public static final PersonStructFieldID POSTADDRESS_POSTCODE = PersonStructFieldID.create(POSTADDRESS,"PostCode"); 343 public static final PersonStructFieldID POSTADDRESS_CITY = PersonStructFieldID.create(POSTADDRESS,"City"); 344 public static final PersonStructFieldID POSTADDRESS_REGION = PersonStructFieldID.create(POSTADDRESS,"Region"); 345 public static final PersonStructFieldID POSTADDRESS_COUNTRY = PersonStructFieldID.create(POSTADDRESS,"Country"); 346 347 public static final PersonStructBlockID INTERNET = PersonStructBlockID.create(ROOT_ORGANISATIONID,"Internet"); 348 public static final PersonStructFieldID INTERNET_EMAIL = PersonStructFieldID.create(INTERNET,"EMail"); 349 public static final PersonStructFieldID INTERNET_HOMEPAGE = PersonStructFieldID.create(INTERNET,"Homepage"); 350 351 public static final PersonStructBlockID PHONE = PersonStructBlockID.create(ROOT_ORGANISATIONID,"Phone"); 352 public static final PersonStructFieldID PHONE_COUNTRYCODE = PersonStructFieldID.create(PHONE,"CountryCode"); 353 public static final PersonStructFieldID PHONE_AREACODE = PersonStructFieldID.create(PHONE,"AreaCode"); 354 public static final PersonStructFieldID PHONE_LOCALNUMBER = PersonStructFieldID.create(PHONE,"LocalNumber"); 355 356 public static final PersonStructBlockID FAX = PersonStructBlockID.create(ROOT_ORGANISATIONID,"Fax"); 357 public static final PersonStructFieldID FAX_COUNTRYCODE = PersonStructFieldID.create(FAX,"CountryCode"); 358 public static final PersonStructFieldID FAX_AREACODE = PersonStructFieldID.create(FAX,"AreaCode"); 359 public static final PersonStructFieldID FAX_LOCALNUMBER = PersonStructFieldID.create(FAX,"LocalNumber"); 360 361 public static final PersonStructBlockID BANKDATA = PersonStructBlockID.create(ROOT_ORGANISATIONID,"BankData"); 362 public static final PersonStructFieldID BANKDATA_ACCOUNTHOLDER = PersonStructFieldID.create(BANKDATA,"AccountHolder"); 363 public static final PersonStructFieldID BANKDATA_BANKCODE = PersonStructFieldID.create(BANKDATA,"BankCode"); 364 public static final PersonStructFieldID BANKDATA_BANKNAME = PersonStructFieldID.create(BANKDATA,"BankName"); 365 public static final PersonStructFieldID BANKDATA_ACCOUNTNUMBER = PersonStructFieldID.create(BANKDATA,"AccountNumber"); 366 367 public static final PersonStructBlockID CREDITCARD = PersonStructBlockID.create(ROOT_ORGANISATIONID,"CreditCard"); 368 public static final PersonStructFieldID CREDITCARD_CREDITCARDHOLDER = PersonStructFieldID.create(CREDITCARD,"CreditCardHolder"); 369 public static final PersonStructFieldID CREDITCARD_NUMBER = PersonStructFieldID.create(CREDITCARD,"Number"); 370 public static final PersonStructFieldID CREDITCARD_EXPIRYYEAR = PersonStructFieldID.create(CREDITCARD,"ExpiryYear"); 371 public static final PersonStructFieldID CREDITCARD_EXPIRYMONTH = PersonStructFieldID.create(CREDITCARD,"ExpiryMonth"); 372 373 public static final PersonStructBlockID COMMENT = PersonStructBlockID.create(ROOT_ORGANISATIONID,"Comment"); 374 public static final PersonStructFieldID COMMENT_COMMENT = PersonStructFieldID.create(COMMENT,"Comment"); 375 376 377 } 378
| Popular Tags
|