1 6 package com.nightlabs.ipanema.person.edit.blockbased; 7 8 import java.util.HashMap ; 9 import java.util.Map ; 10 11 import org.eclipse.core.runtime.IConfigurationElement; 12 import org.eclipse.swt.widgets.Composite; 13 14 import com.nightlabs.ipanema.person.PersonDataBlock; 15 import com.nightlabs.ipanema.person.id.PersonStructBlockID; 16 import com.nightlabs.rcp.extensionpoint.AbstractEPProcessor; 17 import com.nightlabs.rcp.extensionpoint.EPProcessorException; 18 19 23 public class PersonDataBlockEditorFactoryRegistry extends AbstractEPProcessor { 24 25 public static final String EXTENSION_POINT_ID = "com.nightlabs.ipanema.base.person_edit_specializedDataBlockEditor"; 26 public static final String EXTENSION_POINT_ELEMENT_NAME = "specializeddatablockeditor"; public static final String EXTENSION_POINT_CLASS_ATTRIBUTE_NAME = "class"; 29 33 private Map providerRegistry = new HashMap (); 34 35 public void addPersonDataBlockEditorProvider(PersonDataBlockEditorFactory provider) { 36 PersonStructBlockID blockID = provider.getProviderStructBlockID(); 37 providerRegistry.put(blockID,provider); 38 } 39 40 public PersonDataBlockEditor getPersonDataBlockEditor( 41 PersonDataBlock dataBlock, 42 Composite parent, 43 int style, 44 int columnHint 45 ) 46 throws EPProcessorException 47 { 48 if (!isProcessed()) 49 process(); 50 PersonStructBlockID blockID = PersonStructBlockID.create(dataBlock.getPersonStructBlockOrganisationID(),dataBlock.getPersonStructBlockID()); 51 PersonDataBlockEditorFactory provider = (PersonDataBlockEditorFactory)providerRegistry.get(blockID); 52 if (provider != null) 53 return provider.createPersonDataBlockEditor(dataBlock,parent,style); 54 else 55 return new GenericPersonDataBlockEditor(dataBlock,parent,style,columnHint); 56 } 57 58 private static PersonDataBlockEditorFactoryRegistry sharedInstance; 59 60 public static PersonDataBlockEditorFactoryRegistry getSharedInstace() { 61 if (sharedInstance == null) 62 sharedInstance = new PersonDataBlockEditorFactoryRegistry(); 63 return sharedInstance; 64 } 65 66 69 public String getExtensionPointID() { 70 return EXTENSION_POINT_ID; 71 } 72 73 76 public void processElement(IConfigurationElement element) throws EPProcessorException { 77 try{ 78 if (element.getName().toLowerCase().equals(EXTENSION_POINT_ELEMENT_NAME)){ 79 PersonDataBlockEditorFactory provider = (PersonDataBlockEditorFactory) element.createExecutableExtension(EXTENSION_POINT_CLASS_ATTRIBUTE_NAME); 80 addPersonDataBlockEditorProvider(provider); 81 } 82 else { 83 throw new IllegalArgumentException ("Element "+element.getName()+" is not supported by extension-point "+EXTENSION_POINT_ID); 84 } 85 }catch(Throwable e){ 86 throw new EPProcessorException(e); 87 } 88 } 89 90 } 91 | Popular Tags |