package ameba.core;
import ameba.container.event.ShutdownEvent;
import ameba.event.Event;
import ameba.event.EventBus;
import ameba.event.Listener;
import ameba.event.SystemEventBus;
/**
* <p>Abstract Addon class.</p>
*
* @author icode
* @since 0.1.6e
*
*/
public abstract class Addon {
private static EventBus EVENT_BUS;
static {
init();
}
protected String version = "1.0.0";
private static void init() {
EVENT_BUS = EventBus.createMix();
SystemEventBus.subscribe(ShutdownEvent.class, event -> {
synchronized (Addon.class) {
EVENT_BUS = null;
}
});
}
private static EventBus getEventBus() {
if (EVENT_BUS == null) {
synchronized (Addon.class) {
if (EVENT_BUS == null) {
init();
}
}
}
return EVENT_BUS;
}
/**
* <p>subscribeEvent.</p>
*
* @param eventClass a {@link java.lang.Class} object.
* @param listener a {@link ameba.event.Listener} object.
* @param <E> a E object.
*/
protected static <E extends Event> void subscribeEvent(Class<E> eventClass, final Listener<E> listener) {
getEventBus().subscribe(eventClass, listener);
}
/**
* <p>unsubscribeEvent.</p>
*
* @param eventClass a {@link java.lang.Class} object.
* @param listener a {@link ameba.event.Listener} object.
* @param <E> a E object.
*/
protected static <E extends Event> void unsubscribeEvent(Class<E> eventClass, final Listener<E> listener) {
getEventBus().unsubscribe(eventClass, listener);
}
/**
* <p>subscribeEvent.</p>
*
* @param object a {@link java.lang.Object} object.
*/
public static void subscribeEvent(Object object) {
getEventBus().subscribe(object);
}
/**
* <p>subscribeSystemEvent.</p>
*
* @param eventClass a {@link java.lang.Class} object.
* @param listener a {@link ameba.event.Listener} object.
* @param <E> a E object.
*/
protected static <E extends Event> void subscribeSystemEvent(Class<E> eventClass, final Listener<E> listener) {
SystemEventBus.subscribe(eventClass, listener);
}
/**
* <p>unsubscribeSystemEvent.</p>
*
* @param eventClass a {@link java.lang.Class} object.
* @param listener a {@link ameba.event.Listener} object.
* @param <E> a E object.
*/
protected static <E extends Event> void unsubscribeSystemEvent(Class<E> eventClass, final Listener<E> listener) {
SystemEventBus.unsubscribe(eventClass, listener);
}
/**
* <p>subscribeSystemEvent.</p>
*
* @param object a {@link java.lang.Object} object.
*/
public static void subscribeSystemEvent(Object object) {
SystemEventBus.subscribe(object);
}
/**
* <p>publishEvent.</p>
*
* @param event a {@link ameba.event.Event} object.
*/
public static void publishEvent(Event event) {
getEventBus().publish(event);
}
/**
* <p>Getter for the field <code>version</code>.</p>
*
* @return a {@link java.lang.String} object.
*/
public String getVersion() {
return version;
}
/**
* <p>setup.</p>
*
* @param application a {@link ameba.core.Application} object.
*/
public void setup(Application application) {
}
/**
* <p>done.</p>
*
* @param application a {@link ameba.core.Application} object.
*/
public void done(Application application) {
}
/**
* <p>isEnabled.</p>
*
* @param application a {@link ameba.core.Application} object.
* @return a boolean.
*/
public boolean isEnabled(Application application) {
return true;
}
}