content: package com.alimama.mdrill.partion;
  
  import java.util.Map;
  import java.util.Random;
  
  import com.alimama.mdrill.partion.GetShards.ShardsList;
  
  
  import backtype.storm.utils.Utils;
  
  
  public class GetPartions {
  	public static class Shards {
  		public String urlMain = "";
  		public String urlShards = "";
  		public String urlMSs = "";
  		public String randomShard = "";
  		public String[] partions = null;
  	}
  
  	public static class TablePartion {
  		public String name;
  		public String parttype;
  
  		public TablePartion(String name, String parttype) {
  			super();
  			this.name = name;
  			this.parttype = parttype;
  		}
  
  	}
  
  	public static TablePartion partion(String pname) {
  		Map stormconf = Utils.readStormConfig();
  		String partiontype = (String) stormconf.get("higo.partion.type");
  		String tabletype = (String) stormconf.get("higo.partion.type." + pname);
  		if (tabletype != null && !tabletype.isEmpty()) {
  			partiontype = tabletype;
  		}
  		String parttype = partiontype;
  		String projectName = pname;
  		return new TablePartion(projectName, parttype);
  	}
  
  	public static Shards getshard(TablePartion pname, String[] partions,
  			ShardsList[] cores, ShardsList[] tmp) throws Exception {
  		String projectName = pname.name;
  		
  		Shards rtn = new Shards();
  		rtn.partions=partions;
  		
  		Random rdm = new Random();
  		ShardsList[] ms = null;
  		if (tmp != null && tmp.length > 0) {
  			int mslen = Math.max(tmp.length, 10);
  			ms = new ShardsList[mslen];
  			for (int i = 0; i < mslen; i++) {
  				Integer index = i % tmp.length;
  				ms[i] = tmp[index];
  			}
  		}
  
  		if (ms == null || ms.length <= 0) {
  			ms = cores;
  		}
  		if (cores != null && cores.length > 0) {
  			StringBuffer buff=new StringBuffer();
  			for (int i = 0; i < cores.length; i++) {
  				ShardsList c = cores[i];
  				buff.append(c.randomGet() + "/solr/" + projectName
  						+ "@_mdrillshard_,");
  //				for (String part : partions) {
  //					rtn.urlShards += c.randomGet() + "/solr/" + projectName
  //							+ "@" + part + ",";
  //				}
  //				count++;
  			}
  			rtn.urlShards=buff.toString();
  		}
  		
  
  		if (ms != null && ms.length > 0) {
  			int count = 0;
  			int r = rdm.nextInt(ms.length);
  			int r2 = rdm.nextInt(cores.length);
  			for (ShardsList c : ms) {
  				if (count == r2) {
  					rtn.randomShard = c.randomGet() + "/solr/" + projectName;
  				}
  				if (count == r) {
  					rtn.urlMain = "http://" + c.randomGet() + "/solr/"
  							+ projectName;
  				}
  				rtn.urlMSs += c.randomGet() + "/solr/" + projectName + ",";
  
  				count++;
  			}
  		}
  		return rtn;
  	}
  
  }
  