package org.mobicents.slee.runtime.eventrouter;
import javax.slee.Address;
import javax.slee.EventTypeID;
import javax.slee.ServiceID;
import javax.slee.resource.EventFlags;
import javax.slee.resource.FailureReason;
import org.mobicents.slee.container.SleeContainer;
import org.mobicents.slee.runtime.activity.ActivityContext;
import org.mobicents.slee.runtime.activity.ActivityContextHandle;
import org.mobicents.slee.runtime.activity.ActivityType;
/**
* A differed event. When an SBB posts an event, it winds up as one of these.
* When the tx commits, it actually makes it into the event queue.
*
* @author M. Ranganathan
* @author Ivelin Ivanov (refactoring)
* @author eduardomartins
*
*/
public class DeferredEvent {
private final SleeContainer sleeContainer;
private final EventRouterActivity era;
private final EventTypeID eventTypeId;
private final ActivityContextHandle ach;
private final Object event;
private final Address address;
private final ServiceID serviceID;
private final int eventFlags;
public DeferredEvent(EventTypeID eventTypeId, Object event,
ActivityContext ac, Address address, ServiceID serviceID,
int eventFlags, EventRouterActivity era, SleeContainer sleeContainer) {
this.sleeContainer = sleeContainer;
this.era = era;
this.eventTypeId = eventTypeId;
this.event = event;
this.ach = ac.getActivityContextHandle();
this.address = address;
this.serviceID = serviceID;
this.eventFlags = eventFlags;
}
public ActivityContextHandle getActivityContextHandle() {
return ach;
}
/**
* @return Returns the address.
*/
public Address getAddress() {
return address;
}
/**
* @return Returns the event.
*/
public Object getEvent() {
return event;
}
/**
* @return Returns the eventTypeId.
*/
public EventTypeID getEventTypeId() {
return eventTypeId;
}
public int getEventFlags() {
return eventFlags;
}
public ServiceID getService() {
return serviceID;
}
public EventRouterActivity getEventRouterActivity() {
return era;
}
// call backs
public void eventProcessingSucceed() {
if (EventFlags.hasRequestProcessingSuccessfulCallback(eventFlags)
&& ach.getActivityType() == ActivityType.RA) {
sleeContainer.getResourceManagement().getResourceAdaptorEntity(
ach.getActivitySource()).eventProcessingSucceed(this);
}
}
public void eventProcessingFailed(FailureReason failureReason) {
if (EventFlags.hasRequestProcessingFailedCallback(eventFlags)
&& ach.getActivityType() == ActivityType.RA) {
sleeContainer.getResourceManagement().getResourceAdaptorEntity(
ach.getActivitySource()).eventProcessingFailed(this,
failureReason);
}
}
public void eventUnreferenced() {
sleeContainer.getResourceManagement().getResourceAdaptorEntity(
ach.getActivitySource()).eventUnreferenced(this);
}
@Override
public String toString() {
return "DeferredEvent[ eventTypeId = "+eventTypeId+" , event = "+event+" , ach = "+ach+" , address = "+address+" , serviceID = "+serviceID+" , eventFlags = "+EventFlags.toString(eventFlags)+" ]";
}
}