1 4 package com.nightlabs.ipanema.person; 5 6 import java.io.Serializable ; 7 import java.util.Collection ; 8 import java.util.HashMap ; 9 import java.util.Iterator ; 10 import java.util.Map ; 11 12 19 20 public class PersonDataBlockGroup 21 implements 22 Serializable , 23 Comparable  24 { 25 26 protected PersonDataBlockGroup() { } 27 28 public PersonDataBlockGroup(Person _person, String _personStructBlockOrganisationID, String _personStructBlockID) { 29 this.person = _person; 30 this.personStructBlockOrganisationID = _personStructBlockOrganisationID; 31 this.personStructBlockID = _personStructBlockID; 32 this.structBlockKey = PersonStructBlock.getPrimaryKey(_personStructBlockOrganisationID,_personStructBlockID); 33 this.organisationID = _person.getOrganisationID(); 34 this.personID = _person.getPersonID(); 35 } 36 37 38 void addPersonDataFieldToStructure(AbstractPersonDataField field) { 39 PersonDataBlock fieldBlock = null; 40 if (!personDataBlocks.containsKey(field.getPersonDataBlockID())) { 41 for (int i=0; i<=field.getPersonDataBlockID().intValue(); i++) { 42 if (!personDataBlocks.containsKey(new Integer (i))) { 43 Integer blockID = new Integer (i); 44 PersonDataBlock block = new PersonDataBlock(this,new Integer (i)); 45 personDataBlocks.put(blockID, block); 46 if (blockID.equals(field.getPersonDataBlockID())) { 47 fieldBlock = block; 48 } 49 } 50 } 51 } else { 52 fieldBlock = (PersonDataBlock)personDataBlocks.get(field.getPersonDataBlockID()); 53 } 54 fieldBlock.addPersonDataFieldToStructure(field); 55 } 56 57 private String organisationID; 58 private long personID; 59 private String personStructBlockOrganisationID; 60 private String personStructBlockID; 61 62 public PersonStructBlock getPersonStructBlock(PersonStruct structure) { 63 try { 64 return structure.getPersonStructBlock(getPersonStructBlockOrganisationID(),getPersonStructBlockID()); 65 } catch (PersonStructBlockNotFoundException e) { 66 IllegalStateException ill = new IllegalStateException ("Caught Exception when accessing PersonStructFactory"); 67 ill.initCause(e); 68 throw ill; 69 } 70 } 71 72 private String structBlockKey; 73 74 public String getStructBlockKey() { 75 return structBlockKey; 76 } 77 78 private Person person; 79 80 public Person getPerson() { return person; } 81 82 void setPerson(Person person) { 83 this.person = person; 84 } 85 86 90 protected Map personDataBlocks = new HashMap (); 91 92 public boolean isEmpty() 93 { 94 if (personDataBlocks == null) return true; 95 return personDataBlocks.isEmpty(); 96 } 97 98 105 public PersonDataBlock getPersonDataBlock(int personDataBlockID) 106 throws PersonDataBlockNotFoundException 107 { 108 return getPersonDataBlock(personDataBlockID, true); 109 } 110 111 119 public PersonDataBlock getPersonDataBlock(int personDataBlockID, boolean throwExceptionIfNotFound) 120 throws PersonDataBlockNotFoundException 121 { 122 PersonDataBlock pdb = null; 123 if (personDataBlocks != null) { 124 pdb = (PersonDataBlock) personDataBlocks.get(new Integer (personDataBlockID)); 125 } 126 127 if (throwExceptionIfNotFound && pdb == null) 128 throw new PersonDataBlockNotFoundException("PersonDataBlock(organisationID=\""+organisationID+"\", personID=\""+personID+"\", personStructBlockID=\""+personStructBlockID+"\", personDataBlockID=\""+personDataBlockID+"\") not existent!"); 129 return pdb; 130 } 131 132 139 public PersonDataBlock newPersonDataBlock(PersonStruct structure) 140 throws PersonDataBlockUniqueException 141 { 142 int personDataBlockID = 0; 143 Integer personDataBlockIDInt = new Integer (personDataBlockID); 144 while (personDataBlocks.containsKey(personDataBlockIDInt)) { 145 ++personDataBlockID; 146 personDataBlockIDInt = new Integer (personDataBlockID); 147 } 148 if (personDataBlockID > 0) { 149 if (getPersonStructBlock(structure).isUnique()) 151 throw new PersonDataBlockUniqueException("Attempt to add second DataBlock for StructBlock "+getPersonStructBlock(structure).getPrimaryKey()+" wich is unique!"); 152 } 153 PersonDataBlock pdb = new PersonDataBlock(this, personDataBlockIDInt); 155 156 personDataBlocks.put(personDataBlockIDInt, pdb); 157 return pdb; 158 } 159 160 public Collection getPersonDataBlocks() 161 { 162 return personDataBlocks.values(); 163 } 164 165 166 169 public String getOrganisationID() { 170 return organisationID; 171 } 172 173 176 public long getPersonID() { 177 return personID; 178 } 179 180 184 void setPersonID(long _personID) { 185 this.personID = _personID; 186 } 187 188 191 public String getPersonStructBlockID() { 192 return personStructBlockID; 193 } 194 195 198 public String getPersonStructBlockOrganisationID() { 199 return personStructBlockOrganisationID; 200 } 201 202 206 public void implodeBlockGroup() { 207 for (Iterator it = personDataBlocks.entrySet().iterator(); it.hasNext(); ) { 208 Map.Entry entry = (Map.Entry )it.next(); 209 PersonDataBlock block = (PersonDataBlock)entry.getValue(); 210 block.implodeBlock(); 211 if (block.isEmpty()) 212 it.remove(); 213 } 214 } 215 216 220 public void explodeBlockGroup(PersonStruct structure) { 221 for (Iterator it = personDataBlocks.values().iterator(); it.hasNext(); ) { 222 PersonDataBlock block = (PersonDataBlock)it.next(); 223 block.explode(structure); 224 } 225 } 226 227 private int priority = Integer.MAX_VALUE; 228 229 public void setPriority(int priority) { 230 this.priority = priority; 231 } 232 233 236 public int compareTo(Object o) { 237 if (!(o instanceof PersonDataBlockGroup)) { 238 if (this.equals(o)) { 239 return 0; 241 } 242 else return 1; 243 } 244 PersonDataBlockGroup other = (PersonDataBlockGroup)o; 245 if (other.priority < this.priority) 246 return 1; 247 else if (other.priority > this.priority) 248 return -1; 249 else { 250 if (this.equals(o)) { 251 return 0; 253 } 254 else return 1; 255 } 256 } 257 258 } 259
| Popular Tags
|