001    package org.tynamo.descriptor;
002    
003    import java.util.Map;
004    
005    /**
006     * Implementation of the "Extension Object Pattern (Erich Gamma)"
007     * Participant: Subject.
008     * It declares the interface to query whether an object has a particular extension.
009     */
010    public interface Extensible
011    {
012    
013            public boolean supportsExtension(String key);
014    
015            public void removeExtension(String key);
016    
017            public void addExtension(String key, DescriptorExtension extension);
018    
019            public boolean supportsExtension(Class extensionType);
020    
021            public void removeExtension(Class extensionType);
022    
023            public void addExtension(Class extensionType, DescriptorExtension extension);
024    
025            public DescriptorExtension getExtension(String key);
026    
027            public <E extends DescriptorExtension> E getExtension(Class<E> extensionType);
028    
029        Map<String, DescriptorExtension> getExtensions();
030    }