/*
* $Id: LogicalSourceConfig.java 168967 2011-02-25 21:56:00Z cbotev $
*/
package com.linkedin.databus2.relay.config;
import com.linkedin.databus.core.util.ConfigBuilder;
import com.linkedin.databus.core.util.InvalidConfigException;
/**
* @author Jemiah Westerman<jwesterman@linkedin.com>
* @version $Revision: 168967 $
*/
public class LogicalSourceConfig implements ConfigBuilder<LogicalSourceStaticConfig>
{
// in case logical partition is not specified - we assume value 0 (for legacy code)
public static final Short DEFAULT_LOGICAL_SOURCE_PARTITION = 0;
public static final String DEFAULT_SCN_CHUNKING_HINTS = "/*+ first_rows LEADING(tx) */";
public static final String DEFAULT_ROW_CHUNKING_HINTS = "/*+ first_rows LEADING(tx) cardinality(tx,1) */";
public static final String DEFAULT_EVENT_QUERY_HINTS = "/*+ first_rows LEADING(tx) */";
private short _id = -1;
private String _name;
private String _uri;
private String _partitionFunction;
private short _partition;
private boolean _skipInfinityScn = false;
private String _regularQueryHints = DEFAULT_EVENT_QUERY_HINTS;
private String _chunkedTxnQueryHints = DEFAULT_ROW_CHUNKING_HINTS;
private String _chunkedScnQueryHints = DEFAULT_SCN_CHUNKING_HINTS;
/**
* Check that none of the configuration settings are null.
* @throws InvalidConfigException if one or more settings are null
*/
public void checkForNulls()
throws InvalidConfigException
{
if(_id < 0)
{
throw new InvalidConfigException("ID cannot be null. Must be >= 0.");
}
if(_name == null || _name.length() == 0)
{
throw new InvalidConfigException("Name cannot be null or empty.");
}
if(_uri == null || _uri.length() == 0)
{
throw new InvalidConfigException("Schema cannot be null or empty.");
}
if(_partitionFunction == null || _partitionFunction.length() == 0)
{
throw new InvalidConfigException("PartitionFunction cannot be null or empty.");
}
}
public short getId()
{
return _id;
}
public void setId(short id)
{
_id = id;
}
public String getName()
{
return _name;
}
public void setName(String name)
{
_name = name;
}
public String getPartitionFunction()
{
return _partitionFunction;
}
public void setPartitionFunction(String partitionFunction)
{
_partitionFunction = partitionFunction;
}
public String getUri()
{
return _uri;
}
public void setUri(String uri)
{
_uri = uri;
}
public void setPartition(short partition)
{
_partition = partition;
}
public short getPartition()
{
return _partition;
}
/*
@Override
public String toString()
{
try
{
ObjectMapper mapper = new ObjectMapper();
StringWriter writer = new StringWriter();
mapper.writeValue(writer, this);
return writer.toString();
}
catch(Exception ex)
{
// Should never happen, but the ObjectMapper could throw an Exception.
return super.toString();
}
}
*/
@Override
public LogicalSourceStaticConfig build() throws InvalidConfigException
{
checkForNulls();
return new LogicalSourceStaticConfig(_id, _name, _uri, _partitionFunction, _partition,
_skipInfinityScn, _regularQueryHints, _chunkedTxnQueryHints, _chunkedScnQueryHints);
}
public boolean isSkipInfinityScn()
{
return _skipInfinityScn;
}
public void setSkipInfinityScn(boolean skipInfScn)
{
_skipInfinityScn = skipInfScn;
}
public String getRegularQueryHints() {
return _regularQueryHints;
}
public void setRegularQueryHints(String regularQueryHints) {
this._regularQueryHints = regularQueryHints;
}
public String getChunkedTxnQueryHints() {
return _chunkedTxnQueryHints;
}
public void setChunkedTxnQueryHints(String chunkedTxnQueryHints) {
this._chunkedTxnQueryHints = chunkedTxnQueryHints;
}
public String getChunkedScnQueryHints() {
return _chunkedScnQueryHints;
}
public void setChunkedScnQueryHints(String chunkedScnQueryHints) {
this._chunkedScnQueryHints = chunkedScnQueryHints;
}
}