package com.taobao.tddl.executor.codec;
import java.util.List;
import com.taobao.tddl.optimizer.config.table.ColumnMeta;
/**
* @author mengshi.sunmengshi 2013-12-2 下午6:24:37
* @since 5.0.0
*/
public abstract class CodecFactory {
public static final String AVRO = "avro";
public static final String FIXED_LENGTH = "fixedLength";
// public static CodecFactory avro = new AvroCodecFactory();
public static CodecFactory fixedLength = new FixedLengthCodecFactory();
public static CodecFactory getInstance(String s) {
if (AVRO.equals(s)) {
return fixedLength;
} else if (FIXED_LENGTH.equals(s)) {
return fixedLength;
}
return null;
}
public abstract RecordCodec getCodec(List<ColumnMeta> columns);
// //外部通过配置使用class.forName加载
// public static class AvroCodecFactory extends CodecFactory{
//
// //缓存schema
// Map<List<ColumnMeta>,Schema> schemaCache = new ConcurrentHashMap();
//
// @Override
// public RecordCodec getCodec(List<ColumnMeta> columns) {
// Schema schema = schemaCache.get(columns);
// if(schema == null){
// schema = AvroCodec.generateAvroSchema(columns);
// schemaCache.put(columns, schema);
// }
// return new AvroCodec(schema);
// }
//
// }
public static class FixedLengthCodecFactory extends CodecFactory {
@Override
public RecordCodec getCodec(List<ColumnMeta> columns) {
return new FixedLengthCodec(columns);
}
}
}