KickJava   Java API By Example, From Geeks To Geeks.

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


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.HashMap JavaDoc;
9 import java.util.Iterator JavaDoc;
10 import java.util.Map JavaDoc;
11
12 import org.apache.log4j.Logger;
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.graphics.Image;
15 import org.eclipse.swt.widgets.Composite;
16 import org.eclipse.swt.widgets.Control;
17 import org.eclipse.swt.widgets.Display;
18
19 import com.nightlabs.ipanema.person.Person;
20 import com.nightlabs.ipanema.person.PersonDataBlockGroup;
21 import com.nightlabs.ipanema.person.PersonStructCache;
22 import com.nightlabs.rcp.composite.groupedcontent.GroupedContentComposite;
23 import com.nightlabs.rcp.composite.groupedcontent.GroupedContentProvider;
24
25 /**
26  * @see com.nightlabs.ipanema.person.edit.blockbased.PersonDataBlockEditor
27  * @see com.nightlabs.ipanema.person.edit.blockbased.PersonEditorStructBlockRegistry
28  * @see com.nightlabs.ipanema.person.edit.PersonEditor
29  *
30  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
31  */

32 public class BlockBasedPersonEditor extends AbstractBlockBasedPersonEditor {
33     
34     private static Logger LOGGER = Logger.getLogger(BlockBasedPersonEditor.class);
35     public static final String JavaDoc EDITORTYPE_BLOCK_BASED = "block-based";
36     
37     private GroupedContentComposite groupedContentComposite;
38     
39     private class ContentProvider implements GroupedContentProvider {
40         private PersonDataBlockGroupEditor groupEditor;
41         private PersonDataBlockGroup blockGroup;
42         
43         public ContentProvider(PersonDataBlockGroup blockGroup) {
44             this.blockGroup = blockGroup;
45         }
46         
47         public Image getGroupIcon() {
48             return null;
49         }
50         public String JavaDoc getGroupTitle() {
51             return blockGroup.getPersonStructBlock(PersonStructCache.getPersonStructure()).getPersonStructBlockID();
52         }
53         public Composite createGroupContent(Composite parent) {
54             groupEditor = new PersonDataBlockGroupEditor(blockGroup, parent);
55             if (changeListener != null)
56                 groupEditor.addPersonDataBlockEditorChangedListener(changeListener);
57             return groupEditor;
58         }
59         public void refresh(PersonDataBlockGroup blockGroup) {
60             if (groupEditor != null) {
61                 groupEditor.refresh(blockGroup);
62             }
63             this.blockGroup = blockGroup;
64         }
65         public void updatePerson() {
66             if (groupEditor != null) {
67                 groupEditor.updatePerson();
68             }
69         }
70     }
71     
72     public BlockBasedPersonEditor() {
73         super (null);
74     }
75     
76     public BlockBasedPersonEditor(Person person) {
77         super(person);
78     }
79     
80     private Map JavaDoc groupContentProvider = new HashMap JavaDoc();
81     /**
82      * Refreshes the UI-Representation of the given Person.
83      *
84      * @param changeListener
85      */

86     public void refreshControl() {
87         Display.getDefault().asyncExec(
88             new Runnable JavaDoc() {
89                 public void run() {
90                     getPersonStructure().explodePerson(person);
91                     
92                     // get the ordered dataBlocks
93
for (Iterator JavaDoc it = BlockBasedPersonEditor.this.getOrderedDataBlockGroupsIterator(); it.hasNext(); ) {
94                         PersonDataBlockGroup blockGroup = (PersonDataBlockGroup)it.next();
95                         if (shouldDisplayStructBlock(blockGroup)) {
96                             if (!groupContentProvider.containsKey(blockGroup.getStructBlockKey())) {
97                                 ContentProvider contentProvider = new ContentProvider(blockGroup);
98                                 groupContentProvider.put(blockGroup.getStructBlockKey(),contentProvider);
99                                 groupedContentComposite.addGroupedContentProvider(contentProvider);
100                             }
101                             else {
102                                 ContentProvider contentProvider = (ContentProvider)groupContentProvider.get(blockGroup.getStructBlockKey());
103                                 contentProvider.refresh(blockGroup);
104                             }
105                         } // if (shouldDisplayStructBlock(blockGroup)) {
106
}
107                     groupedContentComposite.layout();
108                 }
109             }
110         );
111     }
112
113     private PersonDataBlockEditorChangedListener changeListener;
114     
115     public Control createControl(Composite parent, PersonDataBlockEditorChangedListener changeListener, boolean refresh) {
116         this.changeListener = changeListener;
117         return createControl(parent, refresh);
118     }
119     
120     /**
121      * @param changeListener The changeListener to set.
122      */

123     public void setChangeListener(
124             PersonDataBlockEditorChangedListener changeListener) {
125         this.changeListener = changeListener;
126     }
127
128     public Control createControl(Composite parent, boolean refresh) {
129         if (groupedContentComposite == null) {
130             groupedContentComposite = new GroupedContentComposite(parent, SWT.NONE, true);
131             groupedContentComposite.setGroupTitle("personTail");
132         }
133         if (refresh)
134             refreshControl();
135         return groupedContentComposite;
136     }
137
138     public void disposeControl() {
139         if (groupedContentComposite != null)
140             if (!groupedContentComposite.isDisposed())
141                 groupedContentComposite.dispose();
142         groupedContentComposite = null;
143     }
144
145     public void updatePerson() {
146         for (Iterator JavaDoc it = groupContentProvider.values().iterator(); it.hasNext(); ) {
147             ContentProvider contentProvider = (ContentProvider)it.next();
148             contentProvider.updatePerson();
149         }
150     }
151     
152 }
153
Popular Tags