package de.jpaw.bonaparte.api.codecs.impl;
import java.util.HashMap;
import java.util.Map;
import de.jpaw.bonaparte.api.codecs.IMessageCoderFactory;
import de.jpaw.bonaparte.api.codecs.IMessageDecoder;
import de.jpaw.bonaparte.api.codecs.IMessageEncoder;
import de.jpaw.bonaparte.core.BonaPortable;
import de.jpaw.bonaparte.core.MimeTypes;
public class SingleThreadCachingRecordCoderFactory implements IMessageCoderFactory<BonaPortable, BonaPortable, byte []> {
private final Map<String,IMessageDecoder<BonaPortable, byte []>> decoders = new HashMap<String,IMessageDecoder<BonaPortable, byte []>>(10);
private final Map<String,IMessageEncoder<BonaPortable, byte []>> encoders = new HashMap<String,IMessageEncoder<BonaPortable, byte []>>(10);
// override to add additional methods
protected IMessageEncoder<BonaPortable, byte []> createNewEncoderInstance(String mimeType) {
if (mimeType.equals(MimeTypes.MIME_TYPE_BONAPARTE))
return new BonaparteRecordEncoder<BonaPortable>();
if (mimeType.equals(MimeTypes.MIME_TYPE_COMPACT_BONAPARTE))
return new CompactRecordEncoder<BonaPortable>();
if (mimeType.equals(MimeTypes.MIME_TYPE_JSON))
return new JsonEncoder<BonaPortable>();
return null;
}
// override to add additional methods
protected IMessageDecoder<BonaPortable, byte []> createNewDecoderInstance(String mimeType) {
if (mimeType.equals(MimeTypes.MIME_TYPE_BONAPARTE))
return new BonaparteRecordDecoder<BonaPortable>();
if (mimeType.equals(MimeTypes.MIME_TYPE_COMPACT_BONAPARTE))
return new CompactRecordDecoder<BonaPortable>();
if (mimeType.equals(MimeTypes.MIME_TYPE_JSON))
return new JsonDecoder<BonaPortable>(BonaPortable.class);
return null;
}
@Override
public final IMessageEncoder<BonaPortable, byte []> getEncoderInstance(String mimeType) {
IMessageEncoder<BonaPortable, byte []> encoder = encoders.get(mimeType);
if (encoder != null)
return encoder;
encoder = createNewEncoderInstance(mimeType);
if (encoder != null)
encoders.put(mimeType, encoder);
return encoder;
}
@Override
public IMessageDecoder<BonaPortable, byte []> getDecoderInstance(String mimeType) {
IMessageDecoder<BonaPortable, byte []> decoder = decoders.get(mimeType);
if (decoder != null)
return decoder;
decoder = createNewDecoderInstance(mimeType);
if (decoder != null)
decoders.put(mimeType, decoder);
return decoder;
}
}