All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alipay.rdf.file.codec.TailCodec Maven / Gradle / Ivy

There is a newer version: 2.2.11
Show newest version
package com.alipay.rdf.file.codec;

import java.util.List;
import java.util.Map;

import com.alipay.rdf.file.exception.RdfErrorEnum;
import com.alipay.rdf.file.exception.RdfFileException;
import com.alipay.rdf.file.interfaces.FileReader;
import com.alipay.rdf.file.interfaces.FileWriter;
import com.alipay.rdf.file.loader.ProtocolLoader;
import com.alipay.rdf.file.loader.TemplateLoader;
import com.alipay.rdf.file.meta.FileColumnMeta;
import com.alipay.rdf.file.meta.FileMeta;
import com.alipay.rdf.file.model.FileConfig;
import com.alipay.rdf.file.model.FileDataTypeEnum;
import com.alipay.rdf.file.processor.ProcessorTypeEnum;
import com.alipay.rdf.file.protocol.ProtocolDefinition;
import com.alipay.rdf.file.protocol.RowDefinition;
import com.alipay.rdf.file.spi.RdfFileProcessorSpi;

/**
 * Copyright (C) 2013-2018 Ant Financial Services Group
 *
 * @author hongwei.quhw
 * @version $Id: TailCodec.java, v 0.1 2018年3月12日 下午4:14:12 hongwei.quhw Exp $
 */
public class TailCodec implements FileCodec {
    public static TailCodec instance = new TailCodec();

    @Override
    public void serialize(Object bean, FileConfig fileConfig, FileWriter writer,
                          Map> processors) {
        FileMeta fileMeta = TemplateLoader.load(fileConfig);
        List columnMetas = fileMeta.getTailColumns();

        if (columnMetas.size() == 0) {
            throw new RdfFileException("rdf-file#TailCodec.serialize 数据模板templatePath="
                                       + fileConfig.getTemplatePath() + " 中没有配置文件尾,不支持此操作",
                RdfErrorEnum.TAIL_NOT_DEFINED);
        }

        ProtocolDefinition pd = ProtocolLoader.loadProtocol(fileMeta.getProtocol());
        List rds = pd.getTails();

        if (rds.size() == 0) {
            throw new RdfFileException(
                "rdf-file#TailCodec.serialize 协议模板protocol=" + pd.getName() + " 中没有配置文件尾,不支持此操作",
                RdfErrorEnum.TAIL_NOT_DEFINED);
        }

        RowsCodec.serialize(bean, fileConfig, writer, processors, FileDataTypeEnum.TAIL);
    }

    @Override
    public  T deserialize(Class clazz, FileConfig fileConfig, FileReader reader,
                             Map> processors) {
        FileMeta fileMeta = TemplateLoader.load(fileConfig);
        List columnMetas = fileMeta.getTailColumns();

        if (columnMetas.size() == 0) {
            return null;
        }

        ProtocolDefinition pd = ProtocolLoader.loadProtocol(fileMeta.getProtocol());
        List rds = pd.getTails();

        if (rds.size() == 0) {
            return null;
        }

        return RowsCodec.deserialize(clazz, fileConfig, reader, processors, FileDataTypeEnum.TAIL);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy