KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > ipanema > person > PersonDataBlock


1 /*
2  * Created on 18.03.2004
3  */

4 package com.nightlabs.ipanema.person;
5
6 import java.io.Serializable JavaDoc;
7 import java.util.Collection JavaDoc;
8 import java.util.HashMap JavaDoc;
9 import java.util.Iterator JavaDoc;
10 import java.util.Map JavaDoc;
11
12 import com.nightlabs.ipanema.base.DuplicateKeyException;
13 import com.nightlabs.ipanema.person.id.PersonStructFieldID;
14
15 /**
16  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
17  * @author marco
18  */

19
20 public class PersonDataBlock implements Serializable JavaDoc//, InstanceCallbacks
21
{
22
23     protected PersonDataBlock() { }
24     
25     /**
26      * Constructor allowing control of the initialization of fields.
27      *
28      * @param _personDataBlockGroup
29      * @param _personDataBlockID
30      * @param initFields
31      */

32     public PersonDataBlock(PersonDataBlockGroup _personDataBlockGroup, Integer JavaDoc _personDataBlockID)
33     {
34         this.personDataBlockGroup = _personDataBlockGroup;
35     
36         this.organisationID = _personDataBlockGroup.getOrganisationID();
37         this.personID = _personDataBlockGroup.getPersonID();
38         this.personStructBlockOrganisationID = _personDataBlockGroup.getPersonStructBlockOrganisationID();
39         this.personStructBlockID = _personDataBlockGroup.getPersonStructBlockID();
40
41         this.personDataBlockID = _personDataBlockID;
42     }
43     
44     void addPersonDataFieldToStructure(AbstractPersonDataField field) {
45         boolean found = false;
46         Object JavaDoc key = null;
47         for (Iterator JavaDoc iter = personDataFields.entrySet().iterator(); iter.hasNext();) {
48             Map.Entry JavaDoc entry = (Map.Entry JavaDoc)iter.next();
49             AbstractPersonDataField containedField = (AbstractPersonDataField) entry.getValue();
50             if (containedField.equals(field)) {
51                 key = entry.getKey();
52                 found = true;
53                 break;
54             }
55         }
56         if (found) {
57             // found same field -> replace it
58
personDataFields.put(key,field);
59         }
60         else {
61             // not found -> add it
62
personDataFields.put(
63                 AbstractPersonStructField.getStructFieldKey(field.getPersonStructFieldOrganisationID(),field.getPersonStructFieldID()),
64                 field
65             );
66         }
67     }
68     
69     
70     /**
71      * Checks if this block has a data representation
72      * of the given structField.
73      *
74      * @param structField
75      * @return
76      */

77     public boolean haveStructFieldRepresentation(AbstractPersonStructField structField) {
78         return personDataFields.containsKey(structField.getStructFieldKey());
79     }
80     
81     /**
82      * Adds dataFields if neccessary.
83      */

84     public void explode(PersonStruct structure) {
85         if (this.personDataBlockGroup == null)
86             return;
87         PersonStructBlock psb;
88         try {
89             psb = structure.getPersonStructBlock(
90                     this.personStructBlockOrganisationID, this.personStructBlockID
91             );
92         } catch (PersonStructBlockNotFoundException e) {
93             IllegalStateException JavaDoc ill = new IllegalStateException JavaDoc("Could not find StructBlock for DataBlock!");
94             ill.initCause(e);
95             throw ill;
96         }
97         for (Iterator JavaDoc it = psb.getPersonStructFields().iterator(); it.hasNext(); ) {
98             AbstractPersonStructField structField = (AbstractPersonStructField)it.next();
99             if (!haveStructFieldRepresentation(structField))
100                 structField.addNewDataFieldInstance(this);
101         }
102     }
103     
104     private PersonDataBlockGroup personDataBlockGroup;
105
106     private String JavaDoc organisationID;
107     
108     private long personID;
109     
110     private String JavaDoc personStructBlockOrganisationID;
111     
112     private String JavaDoc personStructBlockID;
113
114     private Integer JavaDoc personDataBlockID;
115     
116
117     /**
118      * @return Returns the organisationID.
119      */

120     public String JavaDoc getOrganisationID() {
121         return organisationID;
122     }
123
124     /**
125      * @return Returns the personDataBlockGroup.
126      */

127     public PersonDataBlockGroup getPersonDataBlockGroup() {
128         return personDataBlockGroup;
129     }
130
131     /**
132      * @return Returns the personDataBlockID.
133      */

134     public Integer JavaDoc getPersonDataBlockID() {
135         return personDataBlockID;
136     }
137
138     /**
139      * @return Returns the personID.
140      */

141     public long getPersonID() {
142         return personID;
143     }
144     
145     /**
146      * Package visible modifier for the personID.
147      *
148      * @param _personID
149      */

150     void setPersonID(long _personID) {
151         this.personID = _personID;
152     }
153
154     /**
155      * @return Returns the personStructBlockOrganisationID.
156      */

157     public String JavaDoc getPersonStructBlockOrganisationID() {
158         return personStructBlockOrganisationID;
159     }
160     
161     /**
162      * @return Returns the personStructBlockID.
163      */

164     public String JavaDoc getPersonStructBlockID() {
165         return personStructBlockID;
166     }
167     
168     
169     
170     /**
171      * key: String AbstractStructField.getStructFieldKey<br/>
172      * value: AbstractPersonDataField personDataField
173      *
174      */

175     protected Map JavaDoc personDataFields = new HashMap JavaDoc();
176     
177     
178     public Collection JavaDoc getPersonDataFields() {
179         return personDataFields.values();
180     }
181     
182     /**
183      * Adds the passed implementor of {@link AbstractPersonDataField}
184      * to the list of fields.<br/>
185      * If a field corresponding to the structFieldKey of the passed
186      * dataField is already contained in this block a
187      * {@link DuplicateKeyException}.
188      *
189      * @param dataField
190      * @throws DuplicateKeyException
191      */

192     public void addPersonDataField(AbstractPersonDataField dataField)
193     throws DuplicateKeyException
194     {
195         if (dataField == null)
196             throw new IllegalArgumentException JavaDoc("Parameter dataField must not be null!");
197         String JavaDoc structFieldKey = AbstractPersonStructField.getStructFieldKey(dataField.getPersonStructFieldOrganisationID(),dataField.getPersonStructFieldID());
198         if (personDataFields.containsKey(structFieldKey))
199             throw new DuplicateKeyException("DataBlock "+this+" already contains a field with structFiedKey = "+structFieldKey);
200         personDataFields.put(structFieldKey,dataField);
201         // add it to the persistent list in person as well
202
personDataBlockGroup.getPerson().putDataFieldToPersistentList(dataField);
203     }
204     
205     public AbstractPersonDataField getPersonDataField(PersonStructFieldID personStructFieldID)
206     throws PersonDataFieldNotFoundException
207     {
208         return getPersonDataField(personStructFieldID.personStructFieldOrganisationID, personStructFieldID.personStructFieldID);
209     }
210     
211     public AbstractPersonDataField getPersonDataField(String JavaDoc personStructFieldOrganisationID, String JavaDoc personStructFieldID)
212     throws PersonDataFieldNotFoundException
213     {
214         String JavaDoc structFieldKey = AbstractPersonStructField.getStructFieldKey(personStructFieldOrganisationID,personStructFieldID);
215         AbstractPersonDataField field = (AbstractPersonDataField)personDataFields.get(structFieldKey);
216         if (field == null)
217             throw new PersonDataFieldNotFoundException("No field "+structFieldKey+" found in this DataBlock for StructBlock "+PersonStructBlock.getPrimaryKey(personStructBlockOrganisationID,personStructBlockID));
218         return field;
219     }
220
221     /**
222      * Scans all DataFields
223      * and removes all entries where isEmpty() retruns true.
224      */

225     public void implodeBlock() {
226         for (Iterator JavaDoc it = personDataFields.entrySet().iterator(); it.hasNext(); ) {
227             Map.Entry JavaDoc entry = (Map.Entry JavaDoc)it.next();
228             AbstractPersonDataField field = (AbstractPersonDataField)entry.getValue();
229             if (field.isEmpty()) {
230                 personDataBlockGroup.getPerson().removeDataFieldFromPersistentList(field);
231                 it.remove();
232             }
233         }
234     }
235     
236     /**
237      *
238      * @return
239      */

240     public boolean isEmpty() {
241         return personDataFields.isEmpty();
242     }
243     
244     
245     /**
246      * @see javax.jdo.InstanceCallbacks#jdoPostLoad()
247      */

248     public void jdoPostLoad() {
249         System.out.println(this.getClass().getName()+"|"+this+": jdoPostLoad()");
250 // initPK();
251
}
252
253     /**
254      * @see javax.jdo.InstanceCallbacks#jdoPreStore()
255      */

256     public void jdoPreStore() {
257     }
258
259     /**
260      * @see javax.jdo.InstanceCallbacks#jdoPreClear()
261      */

262     public void jdoPreClear() {
263     }
264
265     /**
266      * @see javax.jdo.InstanceCallbacks#jdoPreDelete()
267      */

268     public void jdoPreDelete() {
269     }
270
271 }
272
Popular Tags