package org.playorm.nio.api.libs;
import java.util.Map;
import javax.net.ssl.SSLEngine;
import org.playorm.nio.api.channels.RegisterableChannel;
import org.playorm.nio.api.deprecated.ChannelManager;
public abstract class FactoryCreator {
public static final String KEY_IMPLEMENTATION_CLASS = "ByteBuffer.Implementation";
public static final String VAL_DEFAULT_FACTORY = "org.playorm.nio.impl.libs.FactoryCreatorImpl";
//public static final String VAL_HEADER_IMPL = "biz.xsoftware.impl.nio.ChanMgrFactoryImpl";
public static final String KEY_IS_DIRECT = "key.is.direct";
public static final String KEY_PACKET_SEPARATOR = "key.packet.separator";
public static final String KEY_NUM_THREADS = "key.num.threads";
public static final String KEY_ID = ChannelManager.KEY_ID;
public static final String KEY_SSL_ENGINE = "key.ssl.engine";
public static FactoryCreator createFactory(Map<String, Object> map) {
String className = VAL_DEFAULT_FACTORY;
if(map != null) {
String temp = (String)map.get(KEY_IMPLEMENTATION_CLASS);
if(temp != null)
className = temp;
}
FactoryCreator retVal = null;
try {
// FactoryCreator.class.getClassLoader().
Class<? extends FactoryCreator> theClass = Class.forName(className).asSubclass(FactoryCreator.class);
retVal = theClass.newInstance();
retVal.configure(map);
// Class theClass = Class.forName(className);
// retVal = (PacketProcessorFactory)theClass.newInstance();
} catch (ClassNotFoundException e) {
throw new RuntimeException("bug", e);
} catch (InstantiationException e) {
throw new RuntimeException("bug", e);
} catch (IllegalAccessException e) {
throw new RuntimeException("bug", e);
}
return retVal;
}
public abstract void configure(Map<String, Object> map);
public abstract BufferFactory createBufferFactory(Map<String, Object> map);
public abstract PacketProcessorFactory createPacketProcFactory(Map<String, Object> map);
public abstract StartableExecutorService createExecSvcFactory(Map<String, Object> map);
public abstract StartableExecutorService createAdvancedExecSvc(Map<String, Object> map);
public abstract StartableRouterExecutor createRoutingExecutor(String id, int numThreads);
public abstract AsyncSSLEngine createSSLEngine(Object id, SSLEngine engine, Map<String, Object> newParam);
public abstract ChannelSession createSession(RegisterableChannel channel);
}