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