blob: 147deeb17528490c8814329e874a81c2adb8a4b4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.drill.exec.metastore.analyze;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import org.apache.drill.metastore.metadata.MetadataInfo;
import org.apache.drill.metastore.metadata.MetadataType;
import org.apache.drill.metastore.metadata.TableInfo;
import java.util.List;
import java.util.Objects;
import java.util.StringJoiner;
/**
* Class which provides information required for handling results of metadata aggregation when performing analyze.
*/
@JsonDeserialize(builder = MetadataHandlerContext.MetadataHandlerContextBuilder.class)
public class MetadataHandlerContext {
private final TableInfo tableInfo;
private final List<MetadataInfo> metadataToHandle;
private final MetadataType metadataType;
private final int depthLevel;
private final List<String> segmentColumns;
private MetadataHandlerContext(MetadataHandlerContextBuilder builder) {
this.tableInfo = builder.tableInfo;
this.metadataToHandle = builder.metadataToHandle;
this.metadataType = builder.metadataType;
this.depthLevel = builder.depthLevel;
this.segmentColumns = builder.segmentColumns;
}
@JsonProperty
public TableInfo tableInfo() {
return tableInfo;
}
@JsonProperty
public List<MetadataInfo> metadataToHandle() {
return metadataToHandle;
}
@JsonProperty
public MetadataType metadataType() {
return metadataType;
}
@JsonProperty
public int depthLevel() {
return depthLevel;
}
@JsonProperty
public List<String> segmentColumns() {
return segmentColumns;
}
@Override
public String toString() {
return new StringJoiner(",\n", MetadataHandlerContext.class.getSimpleName() + "[", "]")
.add("tableInfo=" + tableInfo)
.add("metadataToHandle=" + metadataToHandle)
.add("metadataType=" + metadataType)
.add("depthLevel=" + depthLevel)
.add("segmentColumns=" + segmentColumns)
.toString();
}
public static MetadataHandlerContextBuilder builder() {
return new MetadataHandlerContextBuilder();
}
@JsonPOJOBuilder(withPrefix = "")
public static class MetadataHandlerContextBuilder {
private TableInfo tableInfo;
private List<MetadataInfo> metadataToHandle;
private MetadataType metadataType;
private Integer depthLevel;
private List<String> segmentColumns;
public MetadataHandlerContextBuilder tableInfo(TableInfo tableInfo) {
this.tableInfo = tableInfo;
return this;
}
public MetadataHandlerContextBuilder metadataToHandle(List<MetadataInfo> metadataToHandle) {
this.metadataToHandle = metadataToHandle;
return this;
}
public MetadataHandlerContextBuilder metadataType(MetadataType metadataType) {
this.metadataType = metadataType;
return this;
}
public MetadataHandlerContextBuilder depthLevel(int depthLevel) {
this.depthLevel = depthLevel;
return this;
}
public MetadataHandlerContextBuilder segmentColumns(List<String> segmentColumns) {
this.segmentColumns = segmentColumns;
return this;
}
public MetadataHandlerContext build() {
Objects.requireNonNull(tableInfo, "tableInfo was not set");
Objects.requireNonNull(metadataToHandle, "metadataToHandle was not set");
Objects.requireNonNull(metadataType, "metadataType was not set");
Objects.requireNonNull(depthLevel, "depthLevel was not set");
Objects.requireNonNull(segmentColumns, "segmentColumns were not set");
return new MetadataHandlerContext(this);
}
}
}