package code.google.nfs.rpc; /** * nfs-rpc * Apache License * * http://code.google.com/p/nfs-rpc (c) 2011 */ import code.google.nfs.rpc.protocol.Decoder; import code.google.nfs.rpc.protocol.Encoder; import code.google.nfs.rpc.protocol.HessianDecoder; import code.google.nfs.rpc.protocol.HessianEncoder; import code.google.nfs.rpc.protocol.JavaDecoder; import code.google.nfs.rpc.protocol.JavaEncoder; import code.google.nfs.rpc.protocol.KryoDecoder; import code.google.nfs.rpc.protocol.KryoEncoder; import code.google.nfs.rpc.protocol.PBDecoder; import code.google.nfs.rpc.protocol.PBEncoder; /** * Encoder & Decoder Register * * @author <a href="mailto:bluedavy@gmail.com">bluedavy</a> */ public class Codecs { public static final int JAVA_CODEC = 1; public static final int HESSIAN_CODEC = 2; public static final int PB_CODEC = 3; public static final int KRYO_CODEC = 4; private static Encoder[] encoders = new Encoder[5]; private static Decoder[] decoders = new Decoder[5]; static{ addEncoder(JAVA_CODEC, new JavaEncoder()); addEncoder(HESSIAN_CODEC, new HessianEncoder()); addEncoder(PB_CODEC, new PBEncoder()); addEncoder(KRYO_CODEC, new KryoEncoder()); addDecoder(JAVA_CODEC, new JavaDecoder()); addDecoder(HESSIAN_CODEC, new HessianDecoder()); addDecoder(PB_CODEC, new PBDecoder()); addDecoder(KRYO_CODEC, new KryoDecoder()); } public static void addEncoder(int encoderKey,Encoder encoder){ if(encoderKey > encoders.length){ Encoder[] newEncoders = new Encoder[encoderKey + 1]; System.arraycopy(encoders, 0, newEncoders, 0, encoders.length); encoders = newEncoders; } encoders[encoderKey] = encoder; } public static void addDecoder(int decoderKey,Decoder decoder){ if(decoderKey > decoders.length){ Decoder[] newDecoders = new Decoder[decoderKey + 1]; System.arraycopy(decoders, 0, newDecoders, 0, decoders.length); decoders = newDecoders; } decoders[decoderKey] = decoder; } public static Encoder getEncoder(int encoderKey){ return encoders[encoderKey]; } public static Decoder getDecoder(int decoderKey){ return decoders[decoderKey]; } }