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 }