package org.holoeverywhere.addon; import java.util.List; public interface IAddonAttacher<V extends IAddonBase<?>> { public abstract static class AddonCallback<V> { public boolean mStopped = false; public boolean action(V addon) { justAction(addon); return false; } public void justAction(V addon) { } public void justPost() { } public boolean performAction(V addon) { if (action(addon)) { stop(); return true; } return false; } public boolean post() { justPost(); return false; } public void pre() { } public void stop() { mStopped = true; } } public static class AttachException extends RuntimeException { private static final long serialVersionUID = 4007240742116340485L; public AttachException(Object object, Class<? extends IAddon> clazz) { super("Couldn't attach addon " + clazz.getName() + " after init of object " + object); } } public <T extends V> T addon(Class<? extends IAddon> clazz); public void addon(List<Class<? extends IAddon>> classes); public <T extends V> T addon(String classname); public boolean isAddonAttached(Class<? extends IAddon> clazz); public void lockAttaching(); public List<Class<? extends IAddon>> obtainAddonsList(); public boolean performAddonAction(AddonCallback<V> callback); }