package org.jdiameter.client.impl.app.cca; import org.jdiameter.api.app.AppAnswerEvent; import org.jdiameter.api.app.AppEvent; import org.jdiameter.api.app.AppRequestEvent; import org.jdiameter.api.app.StateEvent; import org.jdiameter.api.cca.events.JCreditControlAnswer; import org.jdiameter.api.cca.events.JCreditControlRequest; public class Event implements StateEvent { public enum Type { SEND_INITIAL_REQUEST, RECEIVED_INITIAL_ANSWER, SEND_UPDATE_REQUEST, RECEIVED_UPDATE_ANSWER, SEND_TERMINATE_REQUEST,RECEIVED_TERMINATED_ANSWER, RECEIVED_RAR,SEND_RAA,Tx_TIMER_FIRED, SEND_EVENT_REQUEST, RECEIVE_EVENT_ANSWER; } Type type; AppRequestEvent request; AppAnswerEvent answer; Event(Type type) { this.type = type; } Event(Type type, AppRequestEvent request, AppAnswerEvent answer) { this.type = type; this.answer = answer; this.request = request; } Event(boolean isRequest, JCreditControlRequest request, JCreditControlAnswer answer) { this.answer = answer; this.request = request; if(isRequest) { switch(request.getRequestTypeAVPValue()) { case 1: type=Type.SEND_INITIAL_REQUEST; break; case 2: type=Type.SEND_UPDATE_REQUEST; break; case 3: type=Type.SEND_TERMINATE_REQUEST; break; case 4: type=Type.SEND_EVENT_REQUEST; break; default: throw new RuntimeException("Wrong CC-Request-Type value: " + request.getRequestTypeAVPValue()); } }else { switch(answer.getRequestTypeAVPValue()) { case 1: type=Type.RECEIVED_INITIAL_ANSWER; break; case 2: type=Type.RECEIVED_UPDATE_ANSWER; break; case 3: type=Type.RECEIVED_TERMINATED_ANSWER; break; case 4: type=Type.RECEIVE_EVENT_ANSWER; break; default: throw new RuntimeException("Wrong CC-Request-Type value: " + answer.getRequestTypeAVPValue()); } } } public Enum getType() { return type; } public int compareTo(Object o) { return 0; } public Object getData() { return request != null ? request : answer; } public void setData(Object data) { // FIXME: What should we do here?! Is it request or answer? } public AppEvent getRequest() { return request; } public AppEvent getAnswer() { return answer; } public <E> E encodeType(Class<E> eClass) { return eClass == Event.Type.class ? (E) type : null; } }