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

com.alipay.rdf.file.model.FileConfig Maven / Gradle / Ivy

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

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alipay.rdf.file.exception.RdfErrorEnum;
import com.alipay.rdf.file.interfaces.RowValidator;
import com.alipay.rdf.file.util.RdfFileUtil;

/**
 * Copyright (C) 2013-2018 Ant Financial Services Group
 *
 * 文件模块配置
 *
 * @author hongwei.quhw
 * @version $Id: FileConfig.java, v 0.1 2016-12-22 下午3:18:02 hongwei.quhw Exp $
 */
public class FileConfig implements Cloneable {
    /**文件读写合并校验组件类型  默认 type=protocol */
    private String              type             = "protocol";
    private String              rowCodecMode;
    /** 文件路径*/
    private String              filePath;
    /**文件数据类型*/
    private FileDataTypeEnum    fileDataType     = FileDataTypeEnum.ALL;
    /** 模板路径*/
    private final String        templatePath;
    /** 定义的模板编码格式*/
    private String              templateEncoding = FileDefaultConfig.DEFAULT_TEMPLATE_ENCONDIG;
    /** 读取或者生成文件的编码格式*/
    private String              fileEncoding;
    /** 写文件时换行符*/
    private String              lineBreak;
    /**存储配置*/
    private StorageConfig       storageConfig;
    /**手动触发processor*/
    private List        processorKeys    = new ArrayList();
    /**是否开启字段汇总功能*/
    private boolean             summaryEnable    = false;
    /**写文件时,如果没有数据是否生成空文件*/
    private boolean             createEmptyFile  = false;
    /**传入行校验器*/
    private List  rowValidators    = new ArrayList();

    /**此参数只有在type=raw时指定文件内容分隔符时有效*/
    private String              columnSplit;
    //===================部分读属性==================
    /** 数据所在的偏移量*/
    private long                offset;
    /** 数据的长度*/
    private long                length;
    /** 是否部分读取*/
    private boolean             isPartial;

    //=====================其他===================
    /**读文件时是否先读取所有文件的字节到内存*/
    private boolean             isReadAll        = false;
    /*关系模式:读行兼容模式, 用于数据模板行尾添加或者删除字段场景*/
    private Boolean             relationReadRowCompatibility;
    /** 写文件的时候是否在文件尾部追加*/
    private boolean             isAppend         = false;
    /**文件尾是否需要换行*/
    private boolean             isAppendLinebreakAtLast = true;
    /** 外部构建的输入流*/
    private InputStream         is;
    /** 透传给插件的参数*/
    private Map params           = new HashMap();

    /**
     * 构造方法
     *
     * @param filePath
     * @param templatePath
     * @param storageConfig
     */
    public FileConfig(String filePath, String templatePath, StorageConfig storageConfig) {
        RdfFileUtil.assertNotBlank(filePath, "rdf-file#文件路径不能为空!", RdfErrorEnum.ILLEGAL_ARGUMENT);
        RdfFileUtil.assertNotNull(storageConfig, "rdf-file#文件存储配置对象不能为空!",
            RdfErrorEnum.ILLEGAL_ARGUMENT);

        this.filePath = filePath;
        this.templatePath = templatePath;
        this.storageConfig = storageConfig;
    }

    /**
     * 构造方法
     * @param templatePath
     * @param storageConfig
     */
    public FileConfig(String templatePath, StorageConfig storageConfig) {
        RdfFileUtil.assertNotNull(storageConfig, "rdf-file#文件存储配置对象不能为空!",
            RdfErrorEnum.ILLEGAL_ARGUMENT);
        this.templatePath = templatePath;
        this.storageConfig = storageConfig;
    }

    /**
     * 读数据时, 输入流由外界构造
     * @param is
     * @param templatePath
     */
    public FileConfig(InputStream is, String templatePath) {
        RdfFileUtil.assertNotNull(is, "rdf-file#外部构建的输入流不能为空!", RdfErrorEnum.ILLEGAL_ARGUMENT);
        this.is = is;
        this.templatePath = templatePath;
        this.storageConfig = new StorageConfig("inputstream");
    }

    /**
     * 设置部分读属性
     *
     * @param offset
     * @param length
     */
    public void setPartial(long offset, long length, FileDataTypeEnum fileDataType) {
        this.offset = offset;
        this.length = length;
        this.isPartial = true;
        this.fileDataType = fileDataType;
    }

    public void addProcessorKey(String key) {
        if (!processorKeys.contains(key)) {
            processorKeys.add(key);
        }
    }

    public List getProcessorKeys() {
        return processorKeys;
    }

    /**
     * Getter method for property filePath.
     *
     * @return property value of filePath
     */
    public String getFilePath() {
        return filePath;
    }

    /**
     * Getter method for property templatePath.
     *
     * @return property value of templatePath
     */
    public String getTemplatePath() {
        return templatePath;
    }

    /**
     * Getter method for property offset.
     *
     * @return property value of offset
     */
    public long getOffset() {
        return offset;
    }

    /**
     * Getter method for property length.
     *
     * @return property value of length
     */
    public long getLength() {
        return length;
    }

    /**
     * Getter method for property partial.
     *
     * @return property value of partial
     */
    public boolean isPartial() {
        return isPartial;
    }

    /**
     * Getter method for property templatEncoding.
     *
     * @return property value of templatEncoding
     */
    public String getTemplateEncoding() {
        return templateEncoding;
    }

    /**
     * Setter method for property templatEncoding.
     *
     * @param templatEncoding value to be assigned to property templatEncoding
     */
    public void setTemplateEncoding(String templatEncoding) {
        this.templateEncoding = templatEncoding;
    }

    /**
     * Getter method for property isAppend.
     *
     * @return property value of isAppend
     */
    public boolean isAppend() {
        return isAppend;
    }

    /**
     * Setter method for property isAppend.
     *
     * @param isAppend value to be assigned to property isAppend
     */
    public void setAppend(boolean isAppend) {
        this.isAppend = isAppend;
    }

    /**
     * Setter method for property filePath.
     *
     * @param filePath value to be assigned to property filePath
     */
    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    /**
     * Getter method for property fileEncoding.
     *
     * @return property value of fileEncoding
     */
    public String getFileEncoding() {
        return fileEncoding;
    }

    /**
     * Setter method for property fileEncoding.
     *
     * @param fileEncoding value to be assigned to property fileEncoding
     */
    public void setFileEncoding(String fileEncoding) {
        this.fileEncoding = fileEncoding;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public StorageConfig getStorageConfig() {
        return storageConfig;
    }

    public String getLineBreak() {
        return lineBreak;
    }

    public void setLineBreak(String lineBreak) {
        this.lineBreak = lineBreak;
    }

    public boolean isSummaryEnable() {
        return summaryEnable;
    }

    public void setSummaryEnable(boolean summaryEnable) {
        this.summaryEnable = summaryEnable;
    }

    public void setStorageConfig(StorageConfig storageConfig) {
        this.storageConfig = storageConfig;
    }

    public FileDataTypeEnum getFileDataType() {
        return fileDataType;
    }

    public void setFileDataType(FileDataTypeEnum fileDataType) {
        this.fileDataType = fileDataType;
    }

    public List getRowValidators() {
        return rowValidators;
    }

    public void addRowValidator(RowValidator rowValidator) {
        rowValidators.add(rowValidator);
    }

    private void setRowValidators(List rowValidators) {
        this.rowValidators = rowValidators;
    }

    public InputStream getInputStream() {
        return is;
    }

    public void setInputStream(InputStream is) {
        this.is = is;
    }

    public String getColumnSplit() {
        return columnSplit;
    }

    public void setColumnSplit(String columnSplit) {
        this.columnSplit = columnSplit;
    }

    public void addParam(String key, Object value) {
        params.put(key, value);
    }

    public Object getParam(String key) {
        return params.get(key);
    }

    public boolean isCreateEmptyFile() {
        return createEmptyFile;
    }

    public void setCreateEmptyFile(boolean createEmptyFile) {
        this.createEmptyFile = createEmptyFile;
    }

    public boolean isAppendLinebreakAtLast() {
        return isAppendLinebreakAtLast;
    }

    public void setAppendLinebreakAtLast(boolean appendLinebreakAtLast) {
        isAppendLinebreakAtLast = appendLinebreakAtLast;
    }
  
    public boolean isReadAll() {
        return isReadAll;
    }

    public void setReadAll(boolean readAll) {
        isReadAll = readAll;
    }

    public String getRowCodecMode() {
        return rowCodecMode;
    }

    public void setRowCodecMode(String rowCodecMode) {
        this.rowCodecMode = rowCodecMode;
    }

    public Boolean getRelationReadRowCompatibility() {
        return relationReadRowCompatibility;
    }

    public void setRelationReadRowCompatibility(Boolean relationReadRowCompatibility) {
        this.relationReadRowCompatibility = relationReadRowCompatibility;
    }

    /**
     *
     * @see java.lang.Object#clone()
     */
    @Override
    public FileConfig clone() {
        FileConfig config = null;
        if (RdfFileUtil.isBlank(filePath)) {
            config = new FileConfig(templatePath, storageConfig);
        } else {
            config = new FileConfig(filePath, templatePath, storageConfig);
        }

        if (isPartial) {
            config.setPartial(offset, length, fileDataType);
        }
        config.setType(type);
        config.setAppend(isAppend);
        config.setTemplateEncoding(templateEncoding);
        config.setFileEncoding(fileEncoding);
        config.setLineBreak(lineBreak);
        config.setSummaryEnable(summaryEnable);
        config.setCreateEmptyFile(createEmptyFile);
        config.setFileDataType(fileDataType);
        config.setRowValidators(rowValidators);
        config.setInputStream(is);
        config.setColumnSplit(columnSplit);
        config.setAppendLinebreakAtLast(isAppendLinebreakAtLast);
        config.params = params;
        for(String processKey : processorKeys){
            config.addProcessorKey(processKey);
        }
        config.setReadAll(isReadAll);
        config.setRowCodecMode(rowCodecMode);
        config.setRelationReadRowCompatibility(relationReadRowCompatibility);
        return config;
    }

    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer("FileConfig[");
        sb.append("type=").append(type);
        sb.append(",rowCodecMode=").append(rowCodecMode);
        sb.append(",filepath=").append(filePath);
        sb.append(",fileDataType=").append(fileDataType.name());
        sb.append(",fileEncoding=").append(fileEncoding);
        sb.append(",templatePath=").append(templatePath);
        sb.append(",templateEncoding=").append(templateEncoding);
        sb.append(",lineBreak=").append(lineBreak);
        if (processorKeys.size() > 0) {
            sb.append(", processorKeys=");
            for (int i = 0; i < processorKeys.size(); i++) {
                sb.append(processorKeys.get(i));
                if (i < processorKeys.size() - 1) {
                    sb.append("|");
                }
            }
        }
        if (rowValidators.size() > 0) {
            sb.append(", rowValidators=");
            for (int i = 0; i < rowValidators.size(); i++) {
                sb.append(rowValidators.get(i).getClass().getName());
                if (i < rowValidators.size() - 1) {
                    sb.append("|");
                }
            }
        }

        if (null != storageConfig) {
            sb.append(",storageType=").append(storageConfig.getStorageType());
        } else {
            sb.append(",storageType=").append("null");
        }
        sb.append(",summaryEnable=").append(summaryEnable);
        sb.append(",createEmptyFile=").append(createEmptyFile);
        if (isPartial) {
            sb.append(", offset=").append(offset);
            sb.append(",length=").append(length);
        }
        sb.append(",isAppend=").append(isAppend);
        sb.append(",isAppendLinebreakAtLast=").append(isAppendLinebreakAtLast);
        sb.append(",isReadAll=").append(isReadAll);
        if (null != relationReadRowCompatibility) {
            sb.append(",relationReadRowCompatibility=").append(relationReadRowCompatibility);
        }
        sb.append(", is=").append(is);
        sb.append("]");
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy