package org.zbus.common.protocol; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; public class TrackTable { private Map<String, BrokerInfo> brokerTable = new ConcurrentHashMap<String, BrokerInfo>(); private Map<String, List<MqInfo>> mqTable = new ConcurrentHashMap<String, List<MqInfo>>(); public Map<String, BrokerInfo> getBrokerTable() { return brokerTable; } public Set<String> brokerAddresses(){ return brokerTable.keySet(); } public Map<String, List<MqInfo>> getMqTable() { return mqTable; } public void sortMqTable(){ this.mqTable.clear(); Iterator<Entry<String, BrokerInfo>> iter = brokerTable.entrySet().iterator(); while(iter.hasNext()){ Entry<String, BrokerInfo> entry = iter.next(); BrokerInfo brokerInfo = entry.getValue(); for(Entry<String, MqInfo> e : brokerInfo.getMqTable().entrySet()){ String mqName = e.getKey(); MqInfo mqInfo = e.getValue(); List<MqInfo> mqInfos = this.mqTable.get(mqName); if(mqInfos == null){ mqInfos = new ArrayList<MqInfo>(); this.mqTable.put(mqName, mqInfos); } mqInfos.add(mqInfo); } } for(List<MqInfo> mqInfos : mqTable.values()){ Collections.sort(mqInfos, new Comparator<MqInfo>() { @Override public int compare(MqInfo m1, MqInfo m2) { double f1 = m1.getLoadFactor(); double f2 = m2.getLoadFactor(); if(f1 < f2){ return 1; } else if(f1 == f2){ return 0; } return -1; } }); } } public void addBroker(String brokerAddress, BrokerInfo info){ brokerTable.put(brokerAddress, info); sortMqTable(); } public void removeBroker(String brokerAddress){ brokerTable.remove(brokerAddress); sortMqTable(); } public List<MqInfo> getMqInfo(String mq){ return this.mqTable.get(mq); } public void setBrokerTable(Map<String, BrokerInfo> brokerTable) { this.brokerTable = brokerTable; sortMqTable(); } public void setMqTable(Map<String, List<MqInfo>> mqTable) { this.mqTable = mqTable; sortMqTable(); } @Override public String toString() { return "TrackTable [brokerTable=" + brokerTable + ", mqTable=" + mqTable + "]"; } }