/*
* Copyright 2014 NAVER Corp.
*
* 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.navercorp.pinpoint.thrift.io;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocolFactory;
/**
* @author koo.taejin
*/
public final class HeaderTBaseSerializerFactory implements SerializerFactory<HeaderTBaseSerializer> {
private static final boolean DEFAULT_SAFE_GUARANTEED = true;
public static final int DEFAULT_STREAM_SIZE = 1024 * 8;
public static final int DEFAULT_UDP_STREAM_MAX_SIZE = 1024 * 64;
private static final boolean DEFAULT_AUTO_EXPAND = true;
private static final TBaseLocator DEFAULT_TBASE_LOCATOR = new DefaultTBaseLocator();
private static final TProtocolFactory DEFAULT_PROTOCOL_FACTORY = new TCompactProtocol.Factory();
public static final HeaderTBaseSerializerFactory DEFAULT_FACTORY = new HeaderTBaseSerializerFactory();
private final boolean safetyGuaranteed;
private final int outputStreamSize;
private final boolean autoExpand;
private final TProtocolFactory protocolFactory;
private final TBaseLocator locator;
public HeaderTBaseSerializerFactory() {
this(DEFAULT_SAFE_GUARANTEED);
}
public HeaderTBaseSerializerFactory(boolean safetyGuaranteed) {
this(safetyGuaranteed, DEFAULT_STREAM_SIZE);
}
public HeaderTBaseSerializerFactory(TBaseLocator locator) {
this(DEFAULT_SAFE_GUARANTEED, DEFAULT_STREAM_SIZE, DEFAULT_AUTO_EXPAND, DEFAULT_PROTOCOL_FACTORY, locator);
}
public HeaderTBaseSerializerFactory(boolean safetyGuaranteed, int outputStreamSize) {
this(safetyGuaranteed, outputStreamSize, DEFAULT_AUTO_EXPAND);
}
public HeaderTBaseSerializerFactory(boolean safetyGuaranteed, int outputStreamSize, boolean autoExpand) {
this(safetyGuaranteed, outputStreamSize, autoExpand, DEFAULT_PROTOCOL_FACTORY, DEFAULT_TBASE_LOCATOR);
}
public HeaderTBaseSerializerFactory(boolean safetyGuaranteed, int outputStreamSize, TProtocolFactory protocolFactory, TBaseLocator locator) {
this(safetyGuaranteed, outputStreamSize, DEFAULT_AUTO_EXPAND, protocolFactory, locator);
}
public HeaderTBaseSerializerFactory(boolean safetyGuaranteed, int outputStreamSize, boolean autoExpand, TProtocolFactory protocolFactory, TBaseLocator locator) {
this.safetyGuaranteed = safetyGuaranteed;
this.outputStreamSize = outputStreamSize;
this.autoExpand = autoExpand;
this.protocolFactory = protocolFactory;
this.locator = locator;
}
public boolean isSafetyGuaranteed() {
return safetyGuaranteed;
}
public int getOutputStreamSize() {
return outputStreamSize;
}
public TProtocolFactory getProtocolFactory() {
return protocolFactory;
}
public TBaseLocator getLocator() {
return locator;
}
@Override
public HeaderTBaseSerializer createSerializer() {
ResettableByteArrayOutputStream baos = null;
if (safetyGuaranteed) {
baos = new PinpointByteArrayOutputStream(outputStreamSize, autoExpand);
} else {
baos = new UnsafeByteArrayOutputStream(outputStreamSize, autoExpand);
}
return new HeaderTBaseSerializer(baos, protocolFactory, locator);
}
}