/**
* Start time:14:23:48 2009-08-19<br>
* Project: diameter-parent-release<br>
*
* @author <a href="mailto:baranowb@gmail.com">Bartosz Baranowski </a>
*/
package org.jdiameter.common.impl.app.cxdx.test;
import java.util.logging.Logger;
import org.jdiameter.api.Answer;
import org.jdiameter.api.ApplicationId;
import org.jdiameter.api.Request;
import org.jdiameter.api.SessionFactory;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateChangeListener;
import org.jdiameter.api.cxdx.ClientCxDxSession;
import org.jdiameter.api.cxdx.ClientCxDxSessionListener;
import org.jdiameter.api.cxdx.ServerCxDxSession;
import org.jdiameter.api.cxdx.ServerCxDxSessionListener;
import org.jdiameter.client.impl.app.cxdx.CxDxClientSessionImpl;
import org.jdiameter.common.api.app.IAppSessionFactory;
import org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory;
import org.jdiameter.common.impl.app.cxdx.JLocationInfoAnswerImpl;
import org.jdiameter.common.impl.app.cxdx.JLocationInfoRequestImpl;
import org.jdiameter.common.impl.app.cxdx.JMultimediaAuthAnswerImpl;
import org.jdiameter.common.impl.app.cxdx.JMultimediaAuthRequestImpl;
import org.jdiameter.common.impl.app.cxdx.JPushProfileAnswerImpl;
import org.jdiameter.common.impl.app.cxdx.JPushProfileRequestImpl;
import org.jdiameter.common.impl.app.cxdx.JRegistrationTerminationAnswerImpl;
import org.jdiameter.common.impl.app.cxdx.JRegistrationTerminationRequestImpl;
import org.jdiameter.common.impl.app.cxdx.JServerAssignmentAnswerImpl;
import org.jdiameter.common.impl.app.cxdx.JServerAssignmentRequestImpl;
import org.jdiameter.common.impl.app.cxdx.JUserAuthorizationAnswerImpl;
import org.jdiameter.common.impl.app.cxdx.JUserAuthorizationRequestImpl;
import org.jdiameter.server.impl.app.cxdx.CxDxServerSessionImpl;
/**
* Start time:14:23:48 2009-08-19<br>
* Project: diameter-parent-release<br>
*
* @author <a href="mailto:baranowb@gmail.com">Bartosz Baranowski
* </a>
*/
public abstract class SessionFactoryCXDX implements IAppSessionFactory,ClientCxDxSessionListener, StateChangeListener,ICxDxMessageFactory, ServerCxDxSessionListener{
protected SessionFactory sessionFactory = null;
protected Logger logger = Logger.getLogger(this.getClass().getName());
public SessionFactoryCXDX(SessionFactory sessionFactory) {
super();
this.sessionFactory = sessionFactory;
}
public AppSession getNewSession(String sessionId, Class<? extends AppSession> appSessionClass, ApplicationId applicationId, Object[] args) {
AppSession appSession = null;
if(appSessionClass == ClientCxDxSession.class)
{
CxDxClientSessionImpl clientSession = null;
if (args != null && args.length > 0 && args[0] instanceof Request) {
Request request = (Request) args[0];
clientSession = new CxDxClientSessionImpl(request.getSessionId(),this,this.sessionFactory,this);
}else
{
clientSession = new CxDxClientSessionImpl(sessionId,this,this.sessionFactory,this);
}
clientSession.getSessions().get(0).setRequestListener(clientSession);
clientSession.addStateChangeNotification(this);
appSession = clientSession;
}else if(appSessionClass == ServerCxDxSession.class)
{
CxDxServerSessionImpl serverSession = null;
if (args != null && args.length > 0 && args[0] instanceof Request) {
// This shouldnt happen but just in case
Request request = (Request) args[0];
serverSession = new org.jdiameter.server.impl.app.cxdx.CxDxServerSessionImpl(request.getSessionId(), this, sessionFactory, this);
} else {
serverSession = new org.jdiameter.server.impl.app.cxdx.CxDxServerSessionImpl(sessionId, this, sessionFactory, this);
}
serverSession.addStateChangeNotification(this);
serverSession.getSessions().get(0).setRequestListener(serverSession);
appSession = serverSession;
} else {
throw new IllegalArgumentException("Wrong session class!![" + appSessionClass + "]. Supported[" + ServerCxDxSession.class + "," + ClientCxDxSession.class + "]");
}
return appSession;
}
public void stateChanged(Enum oldState, Enum newState) {
logger
.info("Diameter CCA SessionFactory :: stateChanged :: oldState["+
oldState + "], newState[" + newState + "]");
System.out.println("Diameter CCA SessionFactory :: stateChanged :: oldState["+
oldState + "], newState[" + newState + "]");
}
public long[] getApplicationIds() {
//FIXME: ???
return new long[]{4};
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createLocationInfoAnswer(org.jdiameter.api.Answer)
*/
public AppAnswerEvent createLocationInfoAnswer(Answer answer) {
return new JLocationInfoAnswerImpl(answer);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createLocationInfoRequest(org.jdiameter.api.Request)
*/
public AppRequestEvent createLocationInfoRequest(Request request) {
return new JLocationInfoRequestImpl(request);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createMultimediaAuthAnswer(org.jdiameter.api.Answer)
*/
public AppAnswerEvent createMultimediaAuthAnswer(Answer answer) {
return new JMultimediaAuthAnswerImpl(answer);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createMultimediaAuthRequest(org.jdiameter.api.Request)
*/
public AppRequestEvent createMultimediaAuthRequest(Request request) {
return new JMultimediaAuthRequestImpl(request);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createPushProfileAnswer(org.jdiameter.api.Answer)
*/
public AppAnswerEvent createPushProfileAnswer(Answer answer) {
return new JPushProfileAnswerImpl(answer);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createPushProfileRequest(org.jdiameter.api.Request)
*/
public AppRequestEvent createPushProfileRequest(Request request) {
// TODO Auto-generated method stub
return new JPushProfileRequestImpl(request);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createRegistrationTerminationAnswer(org.jdiameter.api.Answer)
*/
public AppAnswerEvent createRegistrationTerminationAnswer(Answer answer) {
return new JRegistrationTerminationAnswerImpl(answer);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createRegistrationTerminationRequest(org.jdiameter.api.Request)
*/
public AppRequestEvent createRegistrationTerminationRequest(Request request) {
return new JRegistrationTerminationRequestImpl(request);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createServerAssignmentAnswer(org.jdiameter.api.Answer)
*/
public AppAnswerEvent createServerAssignmentAnswer(Answer answer) {
return new JServerAssignmentAnswerImpl(answer);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createServerAssignmentRequest(org.jdiameter.api.Request)
*/
public AppRequestEvent createServerAssignmentRequest(Request request) {
return new JServerAssignmentRequestImpl(request);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createUserAuthorizationAnswer(org.jdiameter.api.Answer)
*/
public AppAnswerEvent createUserAuthorizationAnswer(Answer answer) {
return new JUserAuthorizationAnswerImpl(answer);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createUserAuthorizationRequest(org.jdiameter.api.Request)
*/
public AppRequestEvent createUserAuthorizationRequest(Request request) {
return new JUserAuthorizationRequestImpl(request);
}
/* (non-Javadoc)
* @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#getApplicationId()
*/
public long getApplicationId() {
//FIXME: ??
return 16777216;
}
}