Package com.taobao.tddl.interact.rule.util

Source Code of com.taobao.tddl.interact.rule.util.VirturalNodeUtil

/*(C) 2007-2012 Alibaba Group Holding Limited. 
*This program is free software; you can redistribute it and/or modify 
*it under the terms of the GNU General Public License version 2 as 
* published by the Free Software Foundation. 
* Authors: 
*   junyu <junyu@taobao.com> , shenxun <shenxun@taobao.com>, 
*   linxuan <linxuan@taobao.com> ,qihao <qihao@taobao.com>  
*/ 
//Copyright(c) Taobao.com
package com.taobao.tddl.interact.rule.util;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

import com.taobao.tddl.interact.rule.enumerator.CloseIntervalFieldsEnumeratorHandler;
import com.taobao.tddl.interact.rule.enumerator.IntegerPartDiscontinousRangeEnumerator;
import com.taobao.tddl.interact.sqljep.Comparative;

/**
* @description
* @author <a href="junyu@taobao.com">junyu</a>
* @version 1.0
* @since 1.6
* @date 2011-6-2����04:13:14
*/
public class VirturalNodeUtil {
  private static final String SLOT_PIECE_SPLIT = ",";
  private static final String RANGE_SUFFIX_SPLIT = "-";
  private static CloseIntervalFieldsEnumeratorHandler enumerator = new IntegerPartDiscontinousRangeEnumerator();

  /**
   * ����oriMap��value��ʽΪ <b>0,1,2-6</b> 0,1��ʾ2����,'-'��ʾһ����Χ
   *
   * �˺����н���Χö�ٳ�һ������,�����۱�Ϊkey,ԭ����key��Ϊvalue
   *
   * example 1:keyΪ 1 valueΪ 1,2,3-6
   *
   * ���ؽ��Ϊ 1->1,2->1,3->1,4->1,5->1,6->1
   *
   * example 2:keyΪdb_group_1 valueΪ1,2 db_group_2 valueΪ3,4-6
   * ���ؽ��Ϊ 1->db_group_1,2->db_group_1
   * 3->db_group_2,4->db_group_2,5->db_group_3,2->db_group_2
   *
   * <b>
   * ��ʱ��֧���κ���ʽ��value��ʽ��.��_0000,0001֮����ַ���,ֻ����
   * ��ѧ��ʽ�ϵ�integer,long
   *
   * �����Ľ�
   * </b>
   * @param tableMap
   * @return
   */
  public static Map<String,String> extraReverseMap(Map<String,String> oriMap){
      ConcurrentHashMap<String,String> slotMap=new ConcurrentHashMap<String, String>();
        for(Map.Entry<String,String> entry:oriMap.entrySet()){
            String[] pieces=entry.getValue().trim().split(SLOT_PIECE_SPLIT);
            for(String piece:pieces){
              String[] range=piece.trim().split(RANGE_SUFFIX_SPLIT);
              if(range.length==2){
                Comparative start=new Comparative(Comparative.GreaterThanOrEqual,Integer.valueOf(range[0]));
                Comparative end=new Comparative(Comparative.LessThanOrEqual,Integer.valueOf(range[1]));
                int cumulativeTimes=Integer.valueOf(range[1])-Integer.valueOf(range[0]);
                Set<Object> result=new HashSet<Object>();
                enumerator.mergeFeildOfDefinitionInCloseInterval(start,end,result,cumulativeTimes,1);
                for(Object v:result){
                  slotMap.put(String.valueOf(v),entry.getKey());
                }
              }else if(range.length==1){
                slotMap.put(piece, entry.getKey());
              }else{
                throw new IllegalArgumentException("slot config error,slot piece:"+piece);
              }
            }
        }
      return slotMap;
    }
 
  public static void main(String[] args){
    Map<String,String> oriMap=new HashMap<String, String>();
    oriMap.put("1", "1,2,3-6");
    Map<String,String> re=VirturalNodeUtil.extraReverseMap(oriMap);
    for(Map.Entry<String,String> entry:re.entrySet()){
      StringBuilder sb=new StringBuilder(entry.getKey());
      sb.append("->");
      sb.append(entry.getValue());
      System.out.println(sb.toString());
    }
    System.out.println("-----------------------------------------------");
    oriMap.clear();
    oriMap.put("db_group_1", "1,2");
    oriMap.put("db_group_2", "3,4-6");
    Map<String,String> re2=VirturalNodeUtil.extraReverseMap(oriMap);
    for(Map.Entry<String,String> entry:re2.entrySet()){
      StringBuilder sb=new StringBuilder(entry.getKey());
      sb.append("->");
      sb.append(entry.getValue());
      System.out.println(sb.toString());
    }
  }
}
TOP

Related Classes of com.taobao.tddl.interact.rule.util.VirturalNodeUtil

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.