KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > ipanema > person > edit > blockbased > PersonDataBlockEditor


1 /*
2  * Created on Nov 29, 2004
3  * by alex
4  *
5  */

6 package com.nightlabs.ipanema.person.edit.blockbased;
7
8 import java.util.Collection JavaDoc;
9 import java.util.Collections JavaDoc;
10 import java.util.HashMap JavaDoc;
11 import java.util.Iterator JavaDoc;
12 import java.util.LinkedList JavaDoc;
13 import java.util.List JavaDoc;
14 import java.util.Map JavaDoc;
15
16 import org.apache.log4j.Logger;
17 import org.eclipse.swt.widgets.Composite;
18
19 import com.nightlabs.ipanema.person.AbstractPersonDataField;
20 import com.nightlabs.ipanema.person.PersonDataBlock;
21 import com.nightlabs.ipanema.person.edit.DataFieldEditorChangeListener;
22 import com.nightlabs.ipanema.person.edit.PersonDataFieldEditor;
23 import com.nightlabs.ipanema.person.preferences.PersonStructOrderConfigModule;
24
25 /**
26  * A Composite presenting all fields a person has within a PersonDataBlock to
27  * the user for editing.
28  *
29  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
30  */

31 public abstract class PersonDataBlockEditor extends Composite implements DataFieldEditorChangeListener{
32     
33     private static Logger LOGGER = Logger.getLogger(PersonDataBlockEditor.class);
34     
35     protected PersonDataBlockEditor(PersonDataBlock dataBlock, Composite parent, int style) {
36         super(parent,style);
37         this.dataBlock = dataBlock;
38     }
39     
40     public abstract void refresh(PersonDataBlock block);
41     
42
43     protected PersonDataBlock dataBlock;
44     /**
45      * key: String AbstractPersonDataField.getPersonRelativePK<br/>
46      * value: PersonDataFieldEditor fieldEditor
47      *
48      */

49     private Map JavaDoc fieldEditors = new HashMap JavaDoc();
50     
51     
52     protected void addFieldEditor(AbstractPersonDataField dataField, PersonDataFieldEditor fieldEditor) {
53         addFieldEditor(dataField,fieldEditor, true);
54     }
55     
56     protected void addFieldEditor(AbstractPersonDataField dataField, PersonDataFieldEditor fieldEditor, boolean addListener) {
57         fieldEditors.put(dataField.getPersonRelativePK(),fieldEditor);
58         fieldEditor.addDataFieldEditorChangedListener(this);
59     }
60     
61     protected PersonDataFieldEditor getFieldEditor(AbstractPersonDataField dataField) {
62         return (PersonDataFieldEditor)fieldEditors.get(dataField.getPersonRelativePK());
63     }
64     
65     protected boolean hasFieldEditorFor(AbstractPersonDataField dataField) {
66         return fieldEditors.containsKey(dataField.getPersonRelativePK());
67     }
68     
69     private Collection JavaDoc changeListener = new LinkedList JavaDoc();
70     public synchronized void addPersonDataBlockEditorChangedListener(PersonDataBlockEditorChangedListener listener) {
71         changeListener.add(listener);
72     }
73     public synchronized void removePersonDataBlockEditorChangedListener(PersonDataBlockEditorChangedListener listener) {
74         changeListener.add(listener);
75     }
76     protected synchronized void notifyChangeListeners(PersonDataFieldEditor dataFieldEditor) {
77         for (Iterator JavaDoc it = changeListener.iterator(); it.hasNext(); ) {
78             PersonDataBlockEditorChangedListener listener = (PersonDataBlockEditorChangedListener)it.next();
79             listener.personDataBlockEditorChanged(this,dataFieldEditor);
80         }
81     }
82
83     public Map JavaDoc getStructFieldDisplayOrder() {
84         return PersonStructOrderConfigModule.getSharedInstance().structFieldDisplayOrder();
85     }
86     
87     /**
88      * @see com.nightlabs.ipanema.person.edit.DataFieldEditorChangeListener#dataFieldEditorChanged(com.nightlabs.ipanema.base.admin.widgets.person.edit.AbstractPersonDataFieldEditor)
89      */

90     public void dataFieldEditorChanged(PersonDataFieldEditor editor) {
91         notifyChangeListeners(editor);
92     }
93     
94     public Iterator JavaDoc getOrderedPersonDataFieldsIterator() {
95         List JavaDoc result = new LinkedList JavaDoc();
96         Map JavaDoc structFieldOrder = getStructFieldDisplayOrder();
97         for (Iterator JavaDoc it = dataBlock.getPersonDataFields().iterator(); it.hasNext(); ) {
98             AbstractPersonDataField dataField = (AbstractPersonDataField)it.next();
99             if (structFieldOrder.containsKey(dataField.getStructFieldPK())) {
100                 Integer JavaDoc index = (Integer JavaDoc)structFieldOrder.get(dataField.getStructFieldPK());
101                 dataField.setPriority(index.intValue());
102             }
103             result.add(dataField);
104         }
105         Collections.sort(result);
106         return result.iterator();
107     }
108     
109     
110     
111     public void dispose() {
112         Object JavaDoc[] editors = fieldEditors.values().toArray();
113         fieldEditors.clear();
114         for (int i=0; i<editors.length; i++) {
115             PersonDataFieldEditor editor = (PersonDataFieldEditor)editors[i];
116             editor.removeDataFieldEditorChangedListener(this);
117         }
118         super.dispose();
119     }
120     
121     /**
122      * Default implementation of updatePerson() iterates through all
123      * PersonDataFieldEditor s added by {@link #addFieldEditor(AbstractPersonDataField, PersonDataFieldEditor)}
124      * and calls their updatePerson method.<br/>
125      * Implementors might override if no registered PersonDataFieldEditors are used.
126      */

127     public void updatePerson() {
128         for (Iterator JavaDoc it = fieldEditors.values().iterator(); it.hasNext(); ) {
129             PersonDataFieldEditor fieldEditor = (PersonDataFieldEditor)it.next();
130             fieldEditor.updatePerson();
131         }
132     }
133     
134 }
135
Popular Tags