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

io.kestra.plugin.gcp.bigquery.models.ViewDefinition Maven / Gradle / Ivy

package io.kestra.plugin.gcp.bigquery.models;

import io.kestra.core.exceptions.IllegalVariableEvaluationException;
import io.kestra.core.models.annotations.PluginProperty;
import io.kestra.core.runners.RunContext;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Getter;
import lombok.extern.jackson.Jacksonized;

import java.util.List;
import java.util.stream.Collectors;

import static io.kestra.core.utils.Rethrow.throwFunction;

@Getter
@Builder
@Jacksonized
public class ViewDefinition {
    @Schema(title = "The query whose result is persisted.")
    @PluginProperty(dynamic = true)
    public final String query;

    @Schema(title = "User defined functions that can be used by query. Returns {@code null} if not set.")
    private final List viewUserDefinedFunctions;

    public static ViewDefinition of(com.google.cloud.bigquery.ViewDefinition viewDefinition) {
        return ViewDefinition.builder()
            .viewUserDefinedFunctions(viewDefinition.getUserDefinedFunctions() == null ? null : viewDefinition.getUserDefinedFunctions()
                .stream()
                .map(UserDefinedFunction::of)
                .collect(Collectors.toList())
            )
            .query(viewDefinition.getQuery())
            .build();
    }

    public com.google.cloud.bigquery.ViewDefinition to(RunContext runContext) throws IllegalVariableEvaluationException {
        com.google.cloud.bigquery.ViewDefinition.Builder builder = com.google.cloud.bigquery.ViewDefinition.newBuilder(runContext.render(this.query));

        if (this.viewUserDefinedFunctions != null) {
            builder.setUserDefinedFunctions(viewUserDefinedFunctions
                .stream()
                .map(throwFunction(userDefinedFunction -> userDefinedFunction.to(runContext)))
                .collect(Collectors.toList())
            );
        }

        return builder.build();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy