1 6 package com.nightlabs.ipanema.person.edit.blockbased; 7 8 import java.util.Collection ; 9 import java.util.Collections ; 10 import java.util.HashMap ; 11 import java.util.Iterator ; 12 import java.util.LinkedList ; 13 import java.util.List ; 14 import java.util.Map ; 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 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 49 private Map fieldEditors = new HashMap (); 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 changeListener = new LinkedList (); 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 it = changeListener.iterator(); it.hasNext(); ) { 78 PersonDataBlockEditorChangedListener listener = (PersonDataBlockEditorChangedListener)it.next(); 79 listener.personDataBlockEditorChanged(this,dataFieldEditor); 80 } 81 } 82 83 public Map getStructFieldDisplayOrder() { 84 return PersonStructOrderConfigModule.getSharedInstance().structFieldDisplayOrder(); 85 } 86 87 90 public void dataFieldEditorChanged(PersonDataFieldEditor editor) { 91 notifyChangeListeners(editor); 92 } 93 94 public Iterator getOrderedPersonDataFieldsIterator() { 95 List result = new LinkedList (); 96 Map structFieldOrder = getStructFieldDisplayOrder(); 97 for (Iterator it = dataBlock.getPersonDataFields().iterator(); it.hasNext(); ) { 98 AbstractPersonDataField dataField = (AbstractPersonDataField)it.next(); 99 if (structFieldOrder.containsKey(dataField.getStructFieldPK())) { 100 Integer index = (Integer )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 [] 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 127 public void updatePerson() { 128 for (Iterator it = fieldEditors.values().iterator(); it.hasNext(); ) { 129 PersonDataFieldEditor fieldEditor = (PersonDataFieldEditor)it.next(); 130 fieldEditor.updatePerson(); 131 } 132 } 133 134 } 135 | Popular Tags |