package com.airbnb.airpal.api.output.builders; import com.airbnb.airpal.api.Job; import com.airbnb.airpal.api.output.HiveTablePersistentOutput; import com.airbnb.airpal.api.output.InvalidQueryException; import com.airbnb.airpal.api.output.PersistentJobOutput; import lombok.RequiredArgsConstructor; import java.io.IOException; import java.net.URI; import static java.lang.String.format; @RequiredArgsConstructor public class OutputBuilderFactory { private final long maxFileSizeBytes; private final boolean isCompressedOutput; public JobOutputBuilder forJob(Job job) throws IOException, InvalidQueryException { PersistentJobOutput output = job.getOutput(); switch (output.getType()) { case "csv": return new CsvOutputBuilder(true, job.getUuid(), maxFileSizeBytes, isCompressedOutput); case "hive": HiveTablePersistentOutput hiveOutput = (HiveTablePersistentOutput) output; URI location = output.getLocation(); if (location == null) { throw new InvalidQueryException(format("Invalid table name '%s'", hiveOutput.getTmpTableName())); } return new HiveTableOutputBuilder(hiveOutput.getDestinationSchema(), hiveOutput.getTmpTableName()); default: throw new IllegalArgumentException(format("OutputBuilder for type %s not found", output.getType())); } } }