1 6 package com.nightlabs.ipanema.person.edit; 7 8 import java.util.Collection ; 9 import java.util.Iterator ; 10 import java.util.LinkedList ; 11 12 import org.eclipse.swt.events.ModifyEvent; 13 import org.eclipse.swt.events.ModifyListener; 14 import org.eclipse.swt.widgets.Composite; 15 import org.eclipse.swt.widgets.Control; 16 17 import com.nightlabs.ipanema.person.AbstractPersonDataField; 18 import com.nightlabs.ipanema.person.AbstractPersonStructField; 19 import com.nightlabs.ipanema.person.PersonStructCache; 20 21 29 public abstract class AbstractPersonDataFieldEditor implements PersonDataFieldEditor, ModifyListener { 30 31 34 public AbstractPersonDataFieldEditor() { } 35 36 39 public abstract Control createControl(Composite parent); 40 41 private AbstractPersonDataField _data; 42 43 50 public void setData(AbstractPersonDataField data) { 51 refreshing = true; 52 try { 53 _data = data; 54 doSetData(data); 55 } finally { 56 refreshing = false; 57 } 58 59 } 60 61 62 63 68 public abstract void doSetData(AbstractPersonDataField data); 69 70 76 public abstract void doRefresh(); 77 78 private boolean refreshing = false; 79 80 86 public void refresh() { 87 refreshing = true; 88 try { 89 doRefresh(); 90 } finally { 91 refreshing = false; 92 } 93 } 94 95 private Collection changeListener = new LinkedList (); 96 100 public synchronized void addDataFieldEditorChangedListener(DataFieldEditorChangeListener listener) { 101 changeListener.add(listener); 102 } 103 107 public synchronized void removeDataFieldEditorChangedListener(DataFieldEditorChangeListener listener) { 108 changeListener.add(listener); 109 } 110 111 protected synchronized void notifyChangeListeners() { 112 for (Iterator it = changeListener.iterator(); it.hasNext(); ) { 114 DataFieldEditorChangeListener listener = (DataFieldEditorChangeListener)it.next(); 115 listener.dataFieldEditorChanged(this); 116 } 117 } 118 119 private boolean changed; 120 121 126 public void setChanged(boolean changed) { 127 this.changed = changed; 128 if (!refreshing) { 129 if (changed) { 130 notifyChangeListeners(); 131 } 132 } 133 } 134 135 140 public boolean isChanged() { 141 return changed; 142 } 143 144 150 public AbstractPersonStructField getPersonStructField() { 151 try { 152 return PersonStructCache.getPersonStructure().getPersonStructField( 153 _data.getPersonStructBlockOrganisationID(), 154 _data.getPersonStructBlockID(), 155 _data.getPersonStructFieldOrganisationID(), 156 _data.getPersonStructFieldID() 157 ); 158 } catch (Exception e) { 159 IllegalStateException ill = new IllegalStateException ("Caught exception while accessing PresonStructFactory."); 160 ill.initCause(e); 161 throw ill; 162 } 163 } 164 165 public void modifyText(ModifyEvent arg0) { 166 setChanged(true); 167 } 168 169 protected PersonDataFieldEditorFactory factory; 170 171 175 public PersonDataFieldEditorFactory getPersonDataFieldEditorFactory() { 176 return factory; 177 } 178 179 183 public void setPersonDataFieldEditorFactory(PersonDataFieldEditorFactory factory) { 184 this.factory = factory; 185 } 186 187 188 189 } 190 | Popular Tags |