Package com.linkedin.databus2.core.filter

Source Code of com.linkedin.databus2.core.filter.KeyFilterConfigHolder$StaticConfig

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.util.Properties;

import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;
import org.json.JSONObject;


import com.linkedin.databus.core.util.ConfigBuilder;
import com.linkedin.databus.core.util.ConfigLoader;
import com.linkedin.databus.core.util.InvalidConfigException;

/**
* @author bvaradar
*/
public class KeyFilterConfigHolder
{
  public static final String MODULE = KeyFilterConfigHolder.class.getName();
  public static final Logger LOG = Logger.getLogger(MODULE);

  public static final String NO_PARTITIONING = "NONE";
  public static final String RANGE_PARTITIONING = "RANGE";
  public static final String MOD_PARTITIONING = "MOD";

  public static final Long UPPER_END_UNLIMITED = Long.MAX_VALUE;


  private PartitionType partitionType;
  private KeyFilterConfig filterConfig;

  /*
   * Partition Types Supported
   */
  public static enum PartitionType
  {
    NONE,
    RANGE,
    MOD
  };

  public KeyFilterConfigHolder(StaticConfig config)
  {
    partitionType = config.getType();
    filterConfig = config.getConfig();
  }

  public KeyFilterConfigHolder()
  {}

  public PartitionType getPartitionType() {
    return partitionType;
  }

  public void setPartitionType(PartitionType partitionType) {
    this.partitionType = partitionType;
  }

  public KeyFilterConfig getFilterConfig() {
    return filterConfig;
  }

  public void setFilterConfig(KeyFilterConfig filterConfig) {
    this.filterConfig = filterConfig;
  }

  @Override
  public String toString() {
    return "KeyFilterConfigHolder [partitionType=" + partitionType
    + ", filterConfig=" + filterConfig + "]";
  }

 
  public static class StaticConfig
  {
    private PartitionType type;
    private KeyFilterConfig config;

    public PartitionType getType() {
      return type;
    }

    public void setType(PartitionType type) {
      this.type = type;
    }

    public KeyFilterConfig getConfig() {
      return config;
    }

    public void setConfig(KeyFilterConfig config) {
      this.config = config;
    }

    public StaticConfig(PartitionType type, KeyFilterConfig config) {
      super();
      this.type = type;
      this.config = config;
    }   
  }

  public static class Config
  implements ConfigBuilder<StaticConfig>
  {
    private KeyRangeFilterConfig.Config range;
    private KeyModFilterConfig.Config mod;
    private String type;

    public Config()
    {
      range = new KeyRangeFilterConfig.Config();
      mod = new KeyModFilterConfig.Config();
    }
    public KeyRangeFilterConfig.Config getRange() {
      return range;
    }

    public void setRange(KeyRangeFilterConfig.Config range) {
      this.range = range;
    }

    public KeyModFilterConfig.Config getMod() {
      return mod;
    }

    public void setMod(KeyModFilterConfig.Config mod) {
      this.mod = mod;
    }

    public String getType() {
      return type;
    }

    public void setType(String type) {
      this.type = type;
    }

    public StaticConfig build()
    throws InvalidConfigException
    {
      PartitionType pType = PartitionType.valueOf(type);

      KeyFilterConfig config = null;
      if ( (null == range.getPartitions()) && (pType == PartitionType.RANGE))
      {
        throw new InvalidConfigException("PartitionType is set to range but range configuration is not given.");       
      }

      if ( (null == mod.getBuckets()) && (pType == PartitionType.MOD))
      {
        throw new InvalidConfigException("PartitionType is set to mod but mod configuration is not given.");

      }

      if (pType == PartitionType.RANGE)
        config = new KeyRangeFilterConfig(range.build());
      else if (pType == PartitionType.MOD)
        config = new KeyModFilterConfig(mod.build());

      return new StaticConfig(pType,config);
    }
  }

  public static void main(String[] args)
  throws Exception
  {
    Properties props = new Properties();
    props.setProperty("dummy.type", "MOD");
    props.setProperty("dummy.mod.numBuckets", "10");
    props.setProperty("dummy.mod.buckets", "[1,2,4-7]");

    Config config = new Config();

    ConfigLoader<StaticConfig> configLoader =
      new ConfigLoader<StaticConfig>("dummy.", config);
    StaticConfig staticConfig = configLoader.loadConfig(props)

    KeyFilterConfigHolder holder = new KeyFilterConfigHolder(staticConfig);

    System.out.println("Holder is :" + holder.toString());
   
    ObjectMapper mapper = new ObjectMapper();
    String s = mapper.writeValueAsString(holder);
   
    System.out.println("Config Holder JSON:" + s);
       
    JSONObject obj = new JSONObject(s);
    String type = obj.getString("partitionType");
    String configStr = obj.getString("filterConfig");
   
    KeyFilterConfigHolder configHolder = new KeyFilterConfigHolder();
        configHolder.setPartitionType(PartitionType.valueOf(type));
        KeyFilterConfig conf = null;
    if (PartitionType.MOD == configHolder.getPartitionType())
    {
       conf = mapper.readValue(configStr,KeyModFilterConfig.class);
    } else if (PartitionType.RANGE == configHolder.getPartitionType()) {
       conf = mapper.readValue(configStr,KeyRangeFilterConfig.class);
    }
    configHolder.setFilterConfig(conf);
   
    System.out.println("Holder2 is :" + configHolder.toString());
     
  }
}
TOP

Related Classes of com.linkedin.databus2.core.filter.KeyFilterConfigHolder$StaticConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.