KickJava   Java API By Example, From Geeks To Geeks.

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


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.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 org.apache.log4j.Logger;
15 import org.eclipse.swt.SWT;
16 import org.eclipse.swt.layout.GridData;
17 import org.eclipse.swt.layout.GridLayout;
18 import org.eclipse.swt.widgets.Composite;
19
20 import com.nightlabs.ipanema.person.AbstractPersonDataField;
21 import com.nightlabs.ipanema.person.PersonDataBlock;
22 import com.nightlabs.ipanema.person.edit.PersonDataFieldEditor;
23 import com.nightlabs.ipanema.person.edit.PersonDataFieldEditorFactoryRegistry;
24 import com.nightlabs.ipanema.person.edit.PersonDataFieldEditorNotFoundException;
25 import com.nightlabs.ipanema.person.preferences.PersonStructOrderConfigModule;
26 import com.nightlabs.rcp.composite.TightWrapperComposite;
27
28 /**
29  * A Composite presenting all fields a person has within a PersonDataBlock to
30  * the user for editing.
31  *
32  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
33  */

34 public class GenericPersonDataBlockEditor extends PersonDataBlockEditor {
35     
36     private static Logger LOGGER = Logger.getLogger(GenericPersonDataBlockEditor.class);
37
38     /**
39      * Assumes to have a parent with GridLayout.
40      * Adds its controls to the parent.
41      *
42      * @param parent Should be a ExpandablePersonDataBlockGroupEditor
43      * @param style SWT-style for the container-Composite
44      * @param columnHint A hint for the column count the Editor should use
45      */

46     public GenericPersonDataBlockEditor(
47         PersonDataBlock dataBlock,
48         Composite parent,
49         int style,
50         int columnHint
51     ) {
52         super(dataBlock, parent, style);
53         
54         // set grid data for this
55
GridData thisData = new GridData(GridData.FILL_HORIZONTAL);
56         thisData.grabExcessHorizontalSpace = true;
57 // thisData.grabExcessVerticalSpace = true;
58
this.setLayoutData(thisData);
59         
60         GridLayout thisLayout = new GridLayout();
61         thisLayout.numColumns = columnHint;
62         setLayout(thisLayout);
63         createFieldEditors();
64     }
65     
66     
67     public void createFieldEditors() {
68         for (Iterator JavaDoc it = getOrderedPersonDataFieldsIterator(); it.hasNext(); ) {
69             AbstractPersonDataField dataField = (AbstractPersonDataField)it.next();
70             if (!hasFieldEditorFor(dataField)) {
71                 PersonDataFieldEditor fieldEditor;
72                 try {
73                     fieldEditor = PersonDataFieldEditorFactoryRegistry.getSharedInstance().getNewEditorInstance(dataField,ExpandableBlocksPersonEditor.EDITORTYPE_BLOCK_BASED_EXPANDABLE);
74                 } catch (PersonDataFieldEditorNotFoundException e) {
75                     // could not find editor for class log the error
76
LOGGER.error("Editor not found for one field, continuing",e);
77                     continue;
78                 }
79                 addFieldEditor(dataField, fieldEditor,true);
80                 // have an editor, store it
81
// fieldEditors.put(dataFieldKey,fieldEditor);
82
// wrap the editor in a Composite to make it easier to layout
83
TightWrapperComposite wrapperComp = new TightWrapperComposite(this,SWT.PUSH,true);
84                 ((GridLayout)wrapperComp.getLayout()).verticalSpacing = 5;
85                 // add the field editor
86
fieldEditor.createControl(wrapperComp);
87 // fieldEditor.addDataFieldEditorChangedListener(this);
88
}
89             else {
90                 PersonDataFieldEditor fieldEditor = getFieldEditor(dataField);
91                 fieldEditor.setData(dataField);
92                 fieldEditor.refresh();
93             }
94         }
95     }
96     
97     public void refresh(PersonDataBlock dataBlock) {
98         if (dataBlock == null)
99             throw new IllegalStateException JavaDoc("Parameter dataBlock must not be null");
100         this.dataBlock = dataBlock;
101         createFieldEditors();
102     }
103     
104     public Map JavaDoc getStructFieldDisplayOrder() {
105         return PersonStructOrderConfigModule.getSharedInstance().structFieldDisplayOrder();
106     }
107     
108     public Iterator JavaDoc getOrderedPersonDataFieldsIterator() {
109         List JavaDoc result = new LinkedList JavaDoc();
110         Map JavaDoc structFieldOrder = getStructFieldDisplayOrder();
111         for (Iterator JavaDoc it = dataBlock.getPersonDataFields().iterator(); it.hasNext(); ) {
112             AbstractPersonDataField dataField = (AbstractPersonDataField)it.next();
113             if (structFieldOrder.containsKey(dataField.getStructFieldPK())) {
114                 Integer JavaDoc index = (Integer JavaDoc)structFieldOrder.get(dataField.getStructFieldPK());
115                 dataField.setPriority(index.intValue());
116             }
117             result.add(dataField);
118         }
119         Collections.sort(result);
120         return result.iterator();
121     }
122     
123 }
124
Popular Tags