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 }