PrestoSparkRunnerContext.java

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.facebook.presto.spark.launcher;

import com.facebook.presto.spark.classloader_interface.ExecutionStrategy;

import java.security.Principal;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import static java.util.Objects.requireNonNull;

public class PrestoSparkRunnerContext
{
    private final String user;
    private final Optional<Principal> principal;
    private final Map<String, String> extraCredentials;
    private final String catalog;
    private final String schema;
    private final Optional<String> source;
    private final Optional<String> userAgent;
    private final Optional<String> clientInfo;
    private final Set<String> clientTags;
    private final Map<String, String> sessionProperties;
    private final Map<String, Map<String, String>> catalogSessionProperties;
    private final Optional<String> sqlText;
    private final Optional<String> sqlLocation;
    private final Optional<String> sqlFileHexHash;
    private final Optional<String> sqlFileSizeInBytes;
    private final Optional<String> traceToken;
    private final Optional<String> sparkQueueName;
    private final Optional<String> queryStatusInfoOutputLocation;
    private final Optional<String> queryDataOutputLocation;
    private final List<ExecutionStrategy> executionStrategies;

    public PrestoSparkRunnerContext(
            String user,
            Optional<Principal> principal,
            Map<String, String> extraCredentials,
            String catalog,
            String schema,
            Optional<String> source,
            Optional<String> userAgent,
            Optional<String> clientInfo,
            Set<String> clientTags,
            Map<String, String> sessionProperties,
            Map<String, Map<String, String>> catalogSessionProperties,
            Optional<String> sqlText,
            Optional<String> sqlLocation,
            Optional<String> sqlFileHexHash,
            Optional<String> sqlFileSizeInBytes,
            Optional<String> traceToken,
            Optional<String> sparkQueueName,
            Optional<String> queryStatusInfoOutputLocation,
            Optional<String> queryDataOutputLocation,
            List<ExecutionStrategy> executionStrategies)
    {
        this.user = user;
        this.principal = principal;
        this.extraCredentials = extraCredentials;
        this.catalog = catalog;
        this.schema = schema;
        this.source = source;
        this.userAgent = userAgent;
        this.clientInfo = clientInfo;
        this.clientTags = clientTags;
        this.sessionProperties = sessionProperties;
        this.catalogSessionProperties = catalogSessionProperties;
        this.sqlText = sqlText;
        this.sqlLocation = sqlLocation;
        this.sqlFileHexHash = sqlFileHexHash;
        this.sqlFileSizeInBytes = sqlFileSizeInBytes;
        this.traceToken = traceToken;
        this.sparkQueueName = sparkQueueName;
        this.queryStatusInfoOutputLocation = queryStatusInfoOutputLocation;
        this.queryDataOutputLocation = queryDataOutputLocation;
        this.executionStrategies = executionStrategies;
    }

    public String getUser()
    {
        return user;
    }

    public Optional<Principal> getPrincipal()
    {
        return principal;
    }

    public Map<String, String> getExtraCredentials()
    {
        return extraCredentials;
    }

    public String getCatalog()
    {
        return catalog;
    }

    public String getSchema()
    {
        return schema;
    }

    public Optional<String> getSource()
    {
        return source;
    }

    public Optional<String> getUserAgent()
    {
        return userAgent;
    }

    public Optional<String> getClientInfo()
    {
        return clientInfo;
    }

    public Set<String> getClientTags()
    {
        return clientTags;
    }

    public Map<String, String> getSessionProperties()
    {
        return sessionProperties;
    }

    public Map<String, Map<String, String>> getCatalogSessionProperties()
    {
        return catalogSessionProperties;
    }

    public Optional<String> getSqlText()
    {
        return sqlText;
    }

    public Optional<String> getSqlLocation()
    {
        return sqlLocation;
    }

    public Optional<String> getSqlFileHexHash()
    {
        return sqlFileHexHash;
    }

    public Optional<String> getSqlFileSizeInBytes()
    {
        return sqlFileSizeInBytes;
    }

    public Optional<String> getTraceToken()
    {
        return traceToken;
    }

    public Optional<String> getSparkQueueName()
    {
        return sparkQueueName;
    }

    public Optional<String> getQueryStatusInfoOutputLocation()
    {
        return queryStatusInfoOutputLocation;
    }

    public Optional<String> getQueryDataOutputLocation()
    {
        return queryDataOutputLocation;
    }

    public List<ExecutionStrategy> getExecutionStrategies()
    {
        return executionStrategies;
    }

    public static class Builder
    {
        private String user;
        private Optional<Principal> principal;
        private Map<String, String> extraCredentials;
        private String catalog;
        private String schema;
        private Optional<String> source;
        private Optional<String> userAgent;
        private Optional<String> clientInfo;
        private Set<String> clientTags;
        private Map<String, String> sessionProperties;
        private Map<String, Map<String, String>> catalogSessionProperties;
        private Optional<String> sqlText;
        private Optional<String> sqlLocation;
        private Optional<String> sqlFileHexHash;
        private Optional<String> sqlFileSizeInBytes;
        private Optional<String> traceToken;
        private Optional<String> sparkQueueName;
        private Optional<String> queryStatusInfoOutputLocation;
        private Optional<String> queryDataOutputLocation;
        private List<ExecutionStrategy> executionStrategies;

        public Builder(PrestoSparkRunnerContext prestoSparkRunnerContext)
        {
            this.user = prestoSparkRunnerContext.getUser();
            this.principal = prestoSparkRunnerContext.getPrincipal();
            this.extraCredentials = prestoSparkRunnerContext.getExtraCredentials();
            this.catalog = prestoSparkRunnerContext.getCatalog();
            this.schema = prestoSparkRunnerContext.getSchema();
            this.source = prestoSparkRunnerContext.getSource();
            this.userAgent = prestoSparkRunnerContext.getUserAgent();
            this.clientInfo = prestoSparkRunnerContext.getClientInfo();
            this.clientTags = prestoSparkRunnerContext.getClientTags();
            this.sessionProperties = prestoSparkRunnerContext.getSessionProperties();
            this.catalogSessionProperties = prestoSparkRunnerContext.getCatalogSessionProperties();
            this.sqlText = prestoSparkRunnerContext.getSqlText();
            this.sqlLocation = prestoSparkRunnerContext.getSqlLocation();
            this.sqlFileHexHash = prestoSparkRunnerContext.getSqlFileHexHash();
            this.sqlFileSizeInBytes = prestoSparkRunnerContext.getSqlFileSizeInBytes();
            this.traceToken = prestoSparkRunnerContext.getTraceToken();
            this.sparkQueueName = prestoSparkRunnerContext.getSparkQueueName();
            this.queryStatusInfoOutputLocation = prestoSparkRunnerContext.getQueryStatusInfoOutputLocation();
            this.queryDataOutputLocation = prestoSparkRunnerContext.getQueryDataOutputLocation();
            this.executionStrategies = prestoSparkRunnerContext.getExecutionStrategies();
        }

        public Builder setExecutionStrategies(List<ExecutionStrategy> executionStrategies)
        {
            this.executionStrategies = requireNonNull(executionStrategies, "executionStrategies is null");
            return this;
        }

        public PrestoSparkRunnerContext build()
        {
            return new PrestoSparkRunnerContext(
                    user,
                    principal,
                    extraCredentials,
                    catalog,
                    schema,
                    source,
                    userAgent,
                    clientInfo,
                    clientTags,
                    sessionProperties,
                    catalogSessionProperties,
                    sqlText,
                    sqlLocation,
                    sqlFileHexHash,
                    sqlFileSizeInBytes,
                    traceToken,
                    sparkQueueName,
                    queryStatusInfoOutputLocation,
                    queryDataOutputLocation,
                    executionStrategies);
        }
    }
}