1 6 package com.nightlabs.ipanema.person.edit.blockbased; 7 8 import java.util.Collections ; 9 import java.util.Iterator ; 10 import java.util.LinkedList ; 11 import java.util.List ; 12 import java.util.Map ; 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 34 public class GenericPersonDataBlockEditor extends PersonDataBlockEditor { 35 36 private static Logger LOGGER = Logger.getLogger(GenericPersonDataBlockEditor.class); 37 38 46 public GenericPersonDataBlockEditor( 47 PersonDataBlock dataBlock, 48 Composite parent, 49 int style, 50 int columnHint 51 ) { 52 super(dataBlock, parent, style); 53 54 GridData thisData = new GridData(GridData.FILL_HORIZONTAL); 56 thisData.grabExcessHorizontalSpace = true; 57 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 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 LOGGER.error("Editor not found for one field, continuing",e); 77 continue; 78 } 79 addFieldEditor(dataField, fieldEditor,true); 80 TightWrapperComposite wrapperComp = new TightWrapperComposite(this,SWT.PUSH,true); 84 ((GridLayout)wrapperComp.getLayout()).verticalSpacing = 5; 85 fieldEditor.createControl(wrapperComp); 87 } 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 ("Parameter dataBlock must not be null"); 100 this.dataBlock = dataBlock; 101 createFieldEditors(); 102 } 103 104 public Map getStructFieldDisplayOrder() { 105 return PersonStructOrderConfigModule.getSharedInstance().structFieldDisplayOrder(); 106 } 107 108 public Iterator getOrderedPersonDataFieldsIterator() { 109 List result = new LinkedList (); 110 Map structFieldOrder = getStructFieldDisplayOrder(); 111 for (Iterator it = dataBlock.getPersonDataFields().iterator(); it.hasNext(); ) { 112 AbstractPersonDataField dataField = (AbstractPersonDataField)it.next(); 113 if (structFieldOrder.containsKey(dataField.getStructFieldPK())) { 114 Integer index = (Integer )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 |