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 }