package com.linkedin.databus2.core.filter;
/*
*
* 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.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import org.apache.log4j.Logger;
import com.linkedin.databus.core.util.ConfigBuilder;
import com.linkedin.databus.core.util.ConfigLoader;
import com.linkedin.databus.core.util.InvalidConfigException;
/*
* Configuration Holder for DbusKeyCompositeFilter
* Contains mapping of SourceName to
*
* @see https://iwww.corp.linkedin.com/wiki/cf/display/ENGS/Databus+V2+Server+Side+Filtering+for+LIAR
*/
public class DbusKeyCompositeFilterConfig
{
public static final String MODULE = DbusKeyCompositeFilterConfig.class.getName();
public static final Logger LOG = Logger.getLogger(MODULE);
private Map<String, KeyFilterConfigHolder> configMap;
public DbusKeyCompositeFilterConfig()
{
configMap = new HashMap<String, KeyFilterConfigHolder>();
}
public DbusKeyCompositeFilterConfig(StaticConfig conf)
{
this.configMap = conf.getConfigMap();
}
public Map<String, KeyFilterConfigHolder> getConfigMap() {
return configMap;
}
public void setConfigMap(Map<String, KeyFilterConfigHolder> configMap) {
this.configMap = configMap;
}
public void addFilterConfig(String srcName, KeyFilterConfigHolder config)
{
configMap.put(srcName, config);
}
public static class StaticConfig
{
private final Map<String, KeyFilterConfigHolder > configMap;
public Map<String, KeyFilterConfigHolder> getConfigMap() {
return configMap;
}
public StaticConfig(Map<String, KeyFilterConfigHolder> configMap) {
super();
this.configMap = configMap;
}
}
public static class Config
implements ConfigBuilder<StaticConfig>
{
private Map<String, KeyFilterConfigHolder.Config> _filterMap;
public Config()
{
_filterMap = new HashMap<String, KeyFilterConfigHolder.Config>();
}
public void setFilter(String key, KeyFilterConfigHolder.Config conf)
{
_filterMap.put(key, conf);
}
public KeyFilterConfigHolder.Config getFilter(String key)
{
KeyFilterConfigHolder.Config conf = _filterMap.get(key);
if ( null == conf)
{
conf = new KeyFilterConfigHolder.Config();
_filterMap.put(key, conf);
}
return conf;
}
@Override
public StaticConfig build()
throws InvalidConfigException
{
Map<String, KeyFilterConfigHolder> confMap =
new HashMap<String, KeyFilterConfigHolder>();
for ( Entry<String, KeyFilterConfigHolder.Config> e : _filterMap.entrySet())
{
KeyFilterConfigHolder f = new KeyFilterConfigHolder(e.getValue().build());
confMap.put(e.getKey(), f);
}
LOG.info("FilterConfigMap is:" + confMap);
return new StaticConfig(confMap);
}
}
@Override
public String toString() {
return "DbusKeyCompositeFilterConfig [configMap=" + configMap + "]";
}
public static void main(String[] args)
throws Exception
{
String configFile = "/Users/bvaradar/Documents/workspace/BR_DDS_SERVER_SIDE_FILTERING/integration-test/config/server-filter-test.properties";
Properties startupProps = new Properties();
startupProps.load(new FileInputStream(configFile));
Config staticConfigBuilder = new Config();
ConfigLoader<StaticConfig> staticConfigLoader =
new ConfigLoader<StaticConfig>("serversidefilter.", staticConfigBuilder);
StaticConfig staticConfig = staticConfigLoader.loadConfig(startupProps);
DbusKeyCompositeFilterConfig filterConf = new DbusKeyCompositeFilterConfig(staticConfig);
System.out.println("FilterConf :" + filterConf);
}
}