MissingInputStreamSource.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.orc.stream;
import javax.annotation.Nullable;
import static java.util.Objects.requireNonNull;
public class MissingInputStreamSource<S extends ValueInputStream<?>>
implements InputStreamSource<S>
{
private static final MissingInputStreamSource<BooleanInputStream> BOOLEAN_MISSING_STREAM_SOURCE = new MissingInputStreamSource<>(BooleanInputStream.class);
private static final MissingInputStreamSource<ByteInputStream> BYTE_MISSING_STREAM_SOURCE = new MissingInputStreamSource<>(ByteInputStream.class);
private static final MissingInputStreamSource<ByteArrayInputStream> BYTE_ARRAY_MISSING_STREAM_SOURCE = new MissingInputStreamSource<>(ByteArrayInputStream.class);
private static final MissingInputStreamSource<DecimalInputStream> DECIMAL_MISSING_STREAM_SOURCE = new MissingInputStreamSource<>(DecimalInputStream.class);
private static final MissingInputStreamSource<DoubleInputStream> DOUBLE_MISSING_STREAM_SOURCE = new MissingInputStreamSource<>(DoubleInputStream.class);
private static final MissingInputStreamSource<FloatInputStream> FLOAT_MISSING_STREAM_SOURCE = new MissingInputStreamSource<>(FloatInputStream.class);
private static final MissingInputStreamSource<LongInputStream> LONG_MISSING_STREAM_SOURCE = new MissingInputStreamSource<>(LongInputStream.class);
private static final MissingInputStreamSource<RowGroupDictionaryLengthInputStream> ROW_GROUP_DICTIONARY_LENGTH_MISSING_STREAM_SOURCE = new MissingInputStreamSource<>(RowGroupDictionaryLengthInputStream.class);
private final Class<S> streamType;
private MissingInputStreamSource(Class<S> streamType)
{
this.streamType = requireNonNull(streamType, "streamType is null");
}
public static InputStreamSource<BooleanInputStream> getBooleanMissingStreamSource()
{
return BOOLEAN_MISSING_STREAM_SOURCE;
}
public static InputStreamSource<ByteInputStream> getByteMissingStreamSource()
{
return BYTE_MISSING_STREAM_SOURCE;
}
public static MissingInputStreamSource<ByteArrayInputStream> getByteArrayMissingStreamSource()
{
return BYTE_ARRAY_MISSING_STREAM_SOURCE;
}
public static MissingInputStreamSource<DecimalInputStream> getDecimalMissingStreamSource()
{
return DECIMAL_MISSING_STREAM_SOURCE;
}
public static MissingInputStreamSource<DoubleInputStream> getDoubleMissingStreamSource()
{
return DOUBLE_MISSING_STREAM_SOURCE;
}
public static MissingInputStreamSource<FloatInputStream> getFloatMissingStreamSource()
{
return FLOAT_MISSING_STREAM_SOURCE;
}
public static InputStreamSource<LongInputStream> getLongMissingStreamSource()
{
return LONG_MISSING_STREAM_SOURCE;
}
public static MissingInputStreamSource<RowGroupDictionaryLengthInputStream> getRowGroupDictionaryLengthMissingStreamSource()
{
return ROW_GROUP_DICTIONARY_LENGTH_MISSING_STREAM_SOURCE;
}
public static <S extends ValueInputStream<?>> InputStreamSource<S> missingStreamSource(Class<S> streamType)
{
if (BOOLEAN_MISSING_STREAM_SOURCE.streamType.equals(streamType)) {
return (InputStreamSource<S>) BOOLEAN_MISSING_STREAM_SOURCE;
}
if (LONG_MISSING_STREAM_SOURCE.streamType.equals(streamType)) {
return (InputStreamSource<S>) LONG_MISSING_STREAM_SOURCE;
}
if (BYTE_MISSING_STREAM_SOURCE.streamType.equals(streamType)) {
return (InputStreamSource<S>) BYTE_MISSING_STREAM_SOURCE;
}
if (BYTE_ARRAY_MISSING_STREAM_SOURCE.streamType.equals(streamType)) {
return (InputStreamSource<S>) BYTE_ARRAY_MISSING_STREAM_SOURCE;
}
if (DECIMAL_MISSING_STREAM_SOURCE.streamType.equals(streamType)) {
return (InputStreamSource<S>) DECIMAL_MISSING_STREAM_SOURCE;
}
if (DOUBLE_MISSING_STREAM_SOURCE.streamType.equals(streamType)) {
return (InputStreamSource<S>) DOUBLE_MISSING_STREAM_SOURCE;
}
if (FLOAT_MISSING_STREAM_SOURCE.streamType.equals(streamType)) {
return (InputStreamSource<S>) FLOAT_MISSING_STREAM_SOURCE;
}
if (ROW_GROUP_DICTIONARY_LENGTH_MISSING_STREAM_SOURCE.streamType.equals(streamType)) {
return (InputStreamSource<S>) ROW_GROUP_DICTIONARY_LENGTH_MISSING_STREAM_SOURCE;
}
return new MissingInputStreamSource<>(streamType);
}
@Override
public Class<S> getStreamType()
{
return streamType;
}
@Nullable
@Override
public S openStream()
{
return null;
}
}