package org.osgi.cdi.api.extension.events;
import javax.inject.Provider;
/**
*
* @author Mathieu ANCELIN - SERLI (mathieu.ancelin@serli.com)
*/
public class InterBundleEvent {
private final Object event;
private boolean sent = false;
private Class<?> type;
public InterBundleEvent(Object event) {
this.event = event;
}
public InterBundleEvent(Object event, Class<?> type) {
this.event = event;
this.type = type;
}
public Class<?> type() {
if (type != null) {
return type;
} else {
return event.getClass();
}
}
public boolean isTyped(Class<?> type) {
if (this.type != null) {
return this.type.equals(type);
} else {
return event.getClass().equals(type);
}
}
public <T> Provider<T> typed(Class<T> type) {
if (isTyped(type)) {
return new Provider<T>() {
@Override
public T get() {
return (T) event;
}
};
} else {
throw new RuntimeException("The event is not of type " + type.getName());
}
}
public Object get() {
return event;
}
public boolean isSent() {
return sent;
}
public void sent() {
this.sent = true;
}
}