1 6 package com.nightlabs.ipanema.person.edit.blockbased; 7 8 import java.util.HashMap ; 9 import java.util.Iterator ; 10 import java.util.Map ; 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 32 public class BlockBasedPersonEditor extends AbstractBlockBasedPersonEditor { 33 34 private static Logger LOGGER = Logger.getLogger(BlockBasedPersonEditor.class); 35 public static final String 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 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 groupContentProvider = new HashMap (); 81 86 public void refreshControl() { 87 Display.getDefault().asyncExec( 88 new Runnable () { 89 public void run() { 90 getPersonStructure().explodePerson(person); 91 92 for (Iterator 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 } } 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 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 it = groupContentProvider.values().iterator(); it.hasNext(); ) { 147 ContentProvider contentProvider = (ContentProvider)it.next(); 148 contentProvider.updatePerson(); 149 } 150 } 151 152 } 153 | Popular Tags |