package com.linkedin.databus2.relay.config;
/*
*
* Copyright 2013 LinkedIn Corp. All rights reserved
*
* 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.
*
*/
import java.util.Arrays;
import com.linkedin.databus.core.DbusConstants;
import com.linkedin.databus.core.util.ConfigBuilder;
import com.linkedin.databus.core.util.InvalidConfigException;
import com.linkedin.databus2.relay.config.ReplicationBitSetterStaticConfig.MissingValueBehavior;
import com.linkedin.databus2.relay.config.ReplicationBitSetterStaticConfig.SourceType;
/**
* Configuration Builder for ReplicationBitSetter.
* The setter used regular reg-ex match (case-insensitive) on the column/token value for each event to decide if replication bit has to be set.
* All the configs defined here are case-insensitive.
*/
public class ReplicationBitSetterConfig implements
ConfigBuilder<ReplicationBitSetterStaticConfig>
{
// By default, Replication BitSetter logic is turned-off.
public final static String DEFAULT_REPLICATION_BIT_SETTER_SOURCE_TYPE = SourceType.NONE.toString();
// By default, MissingValue behavior should be to stop and throw exception.
public final static String DEFAULT_MISSING_VALUE_BEHAVIOR = MissingValueBehavior.STOP_WITH_ERROR.toString();
/**
* Source Type for looking up the fieldName and value to decide if an event has to be set replicated or not
*/
private String _sourceType;
/**
* Field Name to inspect for setting the replicated bit
*/
private String _fieldName;
/**
* The Regex pattern for the value extracted for the fieldName which would identify if an event is replicated
*/
private String _remoteUpdateValueRegex;
// Behavior when the fetcher did not find the replication field/token
private String _missingValueBehavior;
/**
* Constructs Config builder with default configs for replication bit setter
*/
public ReplicationBitSetterConfig()
{
_sourceType = DEFAULT_REPLICATION_BIT_SETTER_SOURCE_TYPE;
_fieldName = DbusConstants.GG_REPLICATION_BIT_SETTER_FIELD_NAME;
_remoteUpdateValueRegex = DbusConstants.GG_REPLICATION_BIT_SETTER_VALUE;
_missingValueBehavior = DEFAULT_MISSING_VALUE_BEHAVIOR;
}
@Override
public ReplicationBitSetterStaticConfig build() throws InvalidConfigException
{
SourceType type = null;
try
{
type = SourceType.valueOf(_sourceType);
} catch (IllegalArgumentException iae) {
throw new InvalidConfigException("Source Types should be one of (" + Arrays.asList(SourceType.values()) + ") but is (" + _sourceType + ")");
}
MissingValueBehavior missingValueForDelete = null;
try
{
missingValueForDelete = MissingValueBehavior.valueOf(_missingValueBehavior);
} catch ( IllegalArgumentException iae) {
throw new InvalidConfigException("Missing Value For Delete Behavior should be one of (" + Arrays.asList(MissingValueBehavior.values()) + ") but is (" + _missingValueBehavior + ")");
}
return new ReplicationBitSetterStaticConfig(type, _fieldName, _remoteUpdateValueRegex, missingValueForDelete);
}
/**
* @return Source Type for looking up fieldName and value to decide if an event has to be set replicated or not
*/
public String getSourceType()
{
return _sourceType;
}
public void setSourceType(String sourceType)
{
this._sourceType = sourceType;
}
/**
* @return the field Name to inspect for setting the replicated bit in the event
*/
public String getFieldName()
{
return _fieldName;
}
public void setFieldName(String fieldName)
{
this._fieldName = fieldName;
}
/**
* @return : the Regex pattern for the value extracted for the fieldName which would identify if an event is replicated or not
*/
public String getRemoteUpdateValueRegex()
{
return _remoteUpdateValueRegex;
}
public void setRemoteUpdateValueRegex(String remoteUpdateValueRegex)
{
this._remoteUpdateValueRegex = remoteUpdateValueRegex;
}
public String getMissingValueBehavior()
{
return _missingValueBehavior;
}
public void setMissingValueBehavior(String missingValueBehavior)
{
_missingValueBehavior = missingValueBehavior;
}
}