FileSourceDestination.java

/*-
 * #%L
 * JSQLParser library
 * %%
 * Copyright (C) 2004 - 2019 JSQLParser
 * %%
 * Dual licensed under GNU LGPL 2.1 or Apache License 2.0
 * #L%
 */
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.statement.select.PlainSelect;

import java.io.Serializable;
import java.util.List;
import java.util.Objects;

public abstract class FileSourceDestination implements Serializable {
    private SourceDestinationType type;
    private List<ConnectionFileDefinition> connectionFileDefinitions;
    private Boolean local;
    private Boolean secure;
    private List<CSVColumn> csvColumns;
    private List<FBVColumn> fbvColumns;
    private List<FileOption> fileOptions;
    private CertificateVerification certificateVerification;

    protected SourceDestinationType getType() {
        return type;
    }

    protected void setType(SourceDestinationType type) {
        this.type = type;
    }

    public List<ConnectionFileDefinition> getConnectionFileDefinitions() {
        return connectionFileDefinitions;
    }

    public void setConnectionFileDefinitions(
            List<ConnectionFileDefinition> connectionFileDefinitions) {
        this.connectionFileDefinitions = connectionFileDefinitions;
    }

    public Boolean isLocal() {
        return local;
    }

    public void setLocal(Boolean local) {
        this.local = local;
    }

    public Boolean isSecure() {
        return secure;
    }

    public void setSecure(Boolean secure) {
        this.secure = secure;
    }

    public List<CSVColumn> getCSVColumns() {
        return csvColumns;
    }

    public void setCSVColumns(List<CSVColumn> csvColumns) {
        this.csvColumns = csvColumns;
    }

    public List<FBVColumn> getFBVColumns() {
        return fbvColumns;
    }

    public void setFBVColumns(List<FBVColumn> fbvColumns) {
        this.fbvColumns = fbvColumns;
    }

    public List<FileOption> getFileOptions() {
        return fileOptions;
    }

    public void setFileOptions(List<FileOption> fileOptions) {
        this.fileOptions = fileOptions;
    }

    public CertificateVerification getCertificateVerification() {
        return certificateVerification;
    }

    public void setCertificateVerification(CertificateVerification certificateVerification) {
        this.certificateVerification = certificateVerification;
    }

    @Override
    public String toString() {
        StringBuilder sql = new StringBuilder();

        if (local != null) {
            if (local) {
                sql.append("LOCAL ");
            }

            if (Objects.requireNonNullElse(secure, false)) {
                sql.append("SECURE ");
            }
        }

        sql.append(type);
        if (connectionFileDefinitions != null) {
            sql.append(" ");
            PlainSelect.appendStringListTo(sql, connectionFileDefinitions, false, false);
        }

        if (csvColumns != null) {
            sql.append(" ");
            PlainSelect.appendStringListTo(sql, csvColumns, true, true);
        } else if (fbvColumns != null) {
            sql.append(" ");
            PlainSelect.appendStringListTo(sql, fbvColumns, false, true);
        }

        if (fileOptions != null) {
            sql.append(" ");
            PlainSelect.appendStringListTo(sql, fileOptions, false, false);
        }

        if (certificateVerification != null) {
            sql.append(" ");
            sql.append(certificateVerification);
        }

        return sql.toString();
    }
}