package org.holoeverywhere.addon; import java.util.Collection; /** * Interface for interaction with objects which can handle addons * * @param <V> addon class */ public interface IAddonAttacher<V extends IAddonBase<?>> { public <T extends V> T addon(Class<? extends IAddon> clazz); public void addon(Collection<Class<? extends IAddon>> classes); public <T extends V> T addon(String classname); public boolean isAddonAttached(Class<? extends IAddon> clazz); public void lockAttaching(); public Collection<Class<? extends IAddon>> obtainAddonsList(); public boolean performAddonAction(AddonCallback<V> callback); public abstract static class AddonCallback<V> { public boolean action(V addon) { justAction(addon); return false; } public void justAction(V addon) { } public void justPost() { } public boolean post() { justPost(); return false; } } public static class AttachException extends RuntimeException { private static final long serialVersionUID = 4007240742116340485L; private AttachException(String message) { super(message); } public static AttachException afterInit(Object object, Class<? extends IAddon> clazz) { return new AttachException("Couldn't attach addon " + clazz.getName() + " after init of object " + object); } public static AttachException conflict(String message) { return new AttachException("Couldn't attach some addons because conflicts is found: \n" + message); } } }