KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * Created on Jun 17, 2004
3  * by alex
4  *
5  */

6 package com.nightlabs.ipanema.person.edit.blockbased;
7
8 import java.util.Collections JavaDoc;
9 import java.util.Iterator JavaDoc;
10 import java.util.LinkedList JavaDoc;
11 import java.util.List JavaDoc;
12 import java.util.Map JavaDoc;
13
14 import com.nightlabs.ipanema.person.Person;
15 import com.nightlabs.ipanema.person.PersonDataBlockGroup;
16 import com.nightlabs.ipanema.person.PersonStruct;
17 import com.nightlabs.ipanema.person.PersonStructCache;
18 import com.nightlabs.ipanema.person.edit.PersonEditor;
19 import com.nightlabs.ipanema.person.id.PersonStructBlockID;
20 import com.nightlabs.ipanema.person.preferences.PersonStructOrderConfigModule;
21
22 /**
23  * @see com.nightlabs.ipanema.person.edit.blockbased.PersonDataBlockEditor
24  * @see com.nightlabs.ipanema.person.edit.blockbased.PersonEditorStructBlockRegistry
25  * @see com.nightlabs.ipanema.person.edit.PersonEditor
26  *
27  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
28  */

29 public abstract class AbstractBlockBasedPersonEditor implements PersonEditor { // extends ScrolledComposite {
30

31     public AbstractBlockBasedPersonEditor() {
32         this (null);
33     }
34     
35     public AbstractBlockBasedPersonEditor(Person person) {
36         this.person = person;
37     }
38     
39     
40     protected Person person;
41     /**
42      * Sets the current person of thiss editor.
43      * If refresh is true {@link #refreshForm(PersonDataBlockEditorChangedListener)}
44      * is called.
45      * @param person
46      * @param refresh
47      */

48     public void setPerson(Person person, boolean refresh) {
49         this.person = person;
50         if (refresh)
51             refreshControl();
52     }
53     
54     /**
55      * Will only set the person, no changes to the UI will be made.
56      * @param person
57      */

58     public void setPerson(Person person) {
59         setPerson(person,false);
60     }
61     /**
62      * Returns the person.
63      * @return
64      */

65     public Person getPerson() {
66         return person;
67     }
68
69     /**
70      * Returns a cached version of the {@link PersonStruct}.
71      * @return
72      */

73     protected PersonStruct getPersonStructure() {
74         return PersonStructCache.getPersonStructure();
75     }
76     
77     
78     /**
79      * Refreshes the UI-Representation of the given Person.
80      *
81      * @param changeListener
82      */

83     public abstract void refreshControl();
84     
85     private String JavaDoc editorScope;
86     private String JavaDoc editorName;
87     
88     /**
89      * Set the scope and the name of the editor.
90      * This can be used by to limit the PersonStructBlocks
91      * a editor shows by registering it in the {@link PersonEditorStructBlockRegistry}
92      * and calling this function with the appropriate values.<br/>
93      * Default will be all PersonStructBlocks.
94      *
95      * @param editorScope
96      * @param editorName
97      */

98     public void setEditorDomain(String JavaDoc editorScope, String JavaDoc editorName) {
99         this.editorScope = editorScope;
100         this.editorName = editorName;
101     }
102     
103     /**
104      * Sets the editor domain for this editor and additionally
105      * registeres structBlocks to display in {@link PersonE}
106      * @param editorScope
107      * @param editorName
108      * @param personStructBlockKeys
109      */

110     public void setEditorDomain(String JavaDoc editorScope, String JavaDoc editorName, PersonStructBlockID[] personStructBlockKeys) {
111         setEditorDomain(editorScope,editorName);
112         PersonEditorStructBlockRegistry.getSharedInstance().addEditorStructBlocks(editorScope,editorName,personStructBlockKeys);
113     }
114     
115     private List JavaDoc domainPersonStructBlocks;
116     
117     protected boolean shouldDisplayStructBlock(PersonDataBlockGroup blockGroup) {
118         // default is all PersonStructBlocks
119
if (domainPersonStructBlocks == null)
120             return true;
121         else
122             return domainPersonStructBlocks.contains(PersonStructBlockID.create(blockGroup.getPersonStructBlockOrganisationID(),blockGroup.getPersonStructBlockID()));
123     }
124     
125     protected void buildDomainDataBlockGroups() {
126         if (domainPersonStructBlocks == null) {
127             if ((editorScope != null ) && (editorName != null)) {
128                 List JavaDoc structBlockList = PersonEditorStructBlockRegistry.getSharedInstance().getEditorStructBlocks(editorScope,editorName);
129                 if (!structBlockList.isEmpty())
130                     domainPersonStructBlocks = structBlockList;
131             }
132         }
133     }
134     
135     /**
136      * Shortcut of setting the list of PersonStructBlocks
137      * this editor should display.
138      * After this was set to a non null value this editor
139      * will not care about registrations in {@link PersonEditorStructBlockRegistry}.
140      *
141      * @param structBlockList
142      */

143     public void setEditorPersonStructBlockList(List JavaDoc structBlockList) {
144         if (structBlockList != null) {
145             if (structBlockList.size() > 0)
146                 domainPersonStructBlocks = structBlockList;
147             else
148                 domainPersonStructBlocks = null;
149         } else {
150             domainPersonStructBlocks = null;
151         }
152     }
153     
154     
155     protected Iterator JavaDoc getDataBlockGroupsIterator() {
156         buildDomainDataBlockGroups();
157         return person.getPersonDataBlockGroups().iterator();
158     }
159     
160     public Map JavaDoc getStructBlockDisplayOrder() {
161         return PersonStructOrderConfigModule.getSharedInstance().structBlockDisplayOrder();
162     }
163     
164     protected Iterator JavaDoc getOrderedDataBlockGroupsIterator() {
165         buildDomainDataBlockGroups();
166     
167         int allStructBlockCount = getPersonStructure().getPersonStructBlocks().size();
168         List JavaDoc result = new LinkedList JavaDoc();
169         Map JavaDoc structBlockOrder = getStructBlockDisplayOrder();
170         
171         int maxIndex = 0;
172         int unmentionedCount = 0;
173         // all datablocks of this person
174
for (Iterator JavaDoc it = person.getPersonDataBlockGroups().iterator(); it.hasNext(); ) {
175             PersonDataBlockGroup blockGroup = (PersonDataBlockGroup)it.next();
176             boolean orderedAdd = false;
177             if (structBlockOrder.containsKey(blockGroup.getStructBlockKey())) {
178                 // block mentioned in structBlockOrder
179
Integer JavaDoc index = (Integer JavaDoc)structBlockOrder.get(blockGroup.getStructBlockKey());
180                 blockGroup.setPriority(index.intValue());
181             }
182             else {
183                 blockGroup.setPriority(allStructBlockCount + (unmentionedCount++));
184             }
185             result.add(blockGroup);
186         }
187         Collections.sort(result);
188         return result.iterator();
189     }
190 }
191
Popular Tags