001    package org.trails.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 IExtensible
011    {
012    
013            public boolean supportsExtension(String key);
014    
015            public void removeExtension(String key);
016    
017            public void addExtension(String key, IDescriptorExtension extension);
018    
019            public boolean supportsExtension(Class extensionType);
020    
021            public void removeExtension(Class extensionType);
022    
023            public void addExtension(Class extensionType, IDescriptorExtension extension);
024    
025            public IDescriptorExtension getExtension(String key);
026    
027            public <E extends IDescriptorExtension> E getExtension(Class<E> extensionType);
028    
029        Map<String, IDescriptorExtension> getExtensions();
030    }