KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > ipanema > person > edit > blockbased > PersonDataBlockEditorFactoryRegistry


1 /*
2  * Created on Jan 20, 2005
3  * by alex
4  *
5  */

6 package com.nightlabs.ipanema.person.edit.blockbased;
7
8 import java.util.HashMap JavaDoc;
9 import java.util.Map JavaDoc;
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 /**
20  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
21  *
22  */

23 public class PersonDataBlockEditorFactoryRegistry extends AbstractEPProcessor {
24     
25     public static final String JavaDoc EXTENSION_POINT_ID = "com.nightlabs.ipanema.base.person_edit_specializedDataBlockEditor";
26     public static final String JavaDoc EXTENSION_POINT_ELEMENT_NAME = "specializeddatablockeditor"; // lower case for error tolerance
27
public static final String JavaDoc EXTENSION_POINT_CLASS_ATTRIBUTE_NAME = "class"; // lower case for error tolerance
28

29     /**
30      * key: PersonStructBlockID: providerID<br/>
31      * value: PersonDataBlockEditorFactory provider
32      */

33     private Map JavaDoc providerRegistry = new HashMap JavaDoc();
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     /**
67      * @see com.nightlabs.rcp.extensionpoint.AbstractEPProcessor#getExtensionPointID()
68      */

69     public String JavaDoc getExtensionPointID() {
70         return EXTENSION_POINT_ID;
71     }
72
73     /**
74      * @see com.nightlabs.rcp.extensionpoint.AbstractEPProcessor#processElement(org.eclipse.core.runtime.IConfigurationElement)
75      */

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 JavaDoc("Element "+element.getName()+" is not supported by extension-point "+EXTENSION_POINT_ID);
84             }
85         }catch(Throwable JavaDoc e){
86             throw new EPProcessorException(e);
87         }
88     }
89
90 }
91
Popular Tags