/* * 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.hive.metastore; import com.facebook.presto.hive.HiveBucketProperty; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableMap; import javax.annotation.concurrent.Immutable; import java.util.Map; import java.util.Optional; import static java.util.Objects.requireNonNull; @Immutable public class Storage { private final StorageFormat storageFormat; private final String location; private final Optional<HiveBucketProperty> bucketProperty; private final boolean sorted; private final boolean skewed; private final Map<String, String> serdeParameters; public Storage( @JsonProperty("storageFormat") StorageFormat storageFormat, @JsonProperty("location") String location, @JsonProperty("bucketProperty") Optional<HiveBucketProperty> bucketProperty, @JsonProperty("sorted") boolean sorted, @JsonProperty("skewed") boolean skewed, @JsonProperty("serdeParameters") Map<String, String> serdeParameters) { this.storageFormat = requireNonNull(storageFormat, "storageFormat is null"); this.location = requireNonNull(location, "location is null"); this.bucketProperty = requireNonNull(bucketProperty, "bucketProperty is null"); this.sorted = sorted; this.skewed = skewed; this.serdeParameters = ImmutableMap.copyOf(requireNonNull(serdeParameters, "serdeParameters is null")); } @JsonProperty public StorageFormat getStorageFormat() { return storageFormat; } @JsonProperty public String getLocation() { return location; } @JsonProperty public Optional<HiveBucketProperty> getBucketProperty() { return bucketProperty; } @JsonProperty public boolean isSorted() { return sorted; } @JsonProperty public boolean isSkewed() { return skewed; } @JsonProperty public Map<String, String> getSerdeParameters() { return serdeParameters; } public static Builder builder() { return new Builder(); } public static Builder builder(Storage storage) { return new Builder(storage); } public static class Builder { private StorageFormat storageFormat; private String location; private Optional<HiveBucketProperty> bucketProperty = Optional.empty(); private boolean sorted = false; private boolean skewed = false; private Map<String, String> serdeParameters = ImmutableMap.of(); private Builder() { } private Builder(Storage storage) { this.storageFormat = storage.storageFormat; this.location = storage.location; this.bucketProperty = storage.bucketProperty; this.sorted = storage.sorted; this.skewed = storage.skewed; this.serdeParameters = storage.serdeParameters; } public Builder setStorageFormat(StorageFormat storageFormat) { this.storageFormat = storageFormat; return this; } public Builder setLocation(String location) { this.location = location; return this; } public Builder setBucketProperty(Optional<HiveBucketProperty> bucketProperty) { this.bucketProperty = bucketProperty; return this; } public Builder setSorted(boolean sorted) { this.sorted = sorted; return this; } public Builder setSkewed(boolean skewed) { this.skewed = skewed; return this; } public Builder setSerdeParameters(Map<String, String> serdeParameters) { this.serdeParameters = serdeParameters; return this; } public Storage build() { return new Storage(storageFormat, location, bucketProperty, sorted, skewed, serdeParameters); } } }