/* * Copyright 1999-2012 Alibaba Group. * * 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. */ package com.alibaba.cobar.manager.util; import java.util.Comparator; import java.util.Map; import com.alibaba.cobar.manager.dataobject.cobarnode.ConnectionStatus; import com.alibaba.cobar.manager.dataobject.cobarnode.DataNodesStatus; import com.alibaba.cobar.manager.dataobject.xml.ClusterDO; import com.alibaba.cobar.manager.dataobject.xml.CobarDO; public class SortUtil<T> implements Comparator<T> { public int compareDatanodes(DataNodesStatus arg0, DataNodesStatus arg1) { return comparePoolName((arg0).getPoolName(), (arg1).getPoolName()); } /** * Host first, second NetOut decrease; * * @param arg0 * @param arg1 * @return */ public int compareConnection(ConnectionStatus arg0, ConnectionStatus arg1) { if ((arg0).getHost().equals((arg1).getHost())) { return (int) ((arg1).getNetOut() - (arg0).getNetOut()); } return (arg0).getHost().compareTo((arg1).getHost()); } /** * sortId increase first, then cluster name * * @param c0 * @param c1 * @return */ public int compareCluster(ClusterDO c0, ClusterDO c1) { if (c0.getSortId() == c1.getSortId()) { return c0.getName().compareTo(c1.getName()); } return c0.getSortId() - c1.getSortId(); } public int comparePoolName(String s1, String s2) { Pair<String, Integer> p1 = CobarStringUtil.splitIndex(s1, '[', ']'); Pair<String, Integer> p2 = CobarStringUtil.splitIndex(s2, '[', ']'); if (p1.getFirst().compareTo(p2.getFirst()) == 0) { return p1.getSecond() - p2.getSecond(); } else { return p1.getFirst().compareTo(p2.getFirst()); } } @SuppressWarnings("unchecked") @Override public int compare(T arg0, T arg1) { if (arg0 instanceof DataNodesStatus) { return compareDatanodes((DataNodesStatus) arg0, (DataNodesStatus) arg1); } else if (arg0 instanceof ConnectionStatus) { return compareConnection((ConnectionStatus) arg0, (ConnectionStatus) arg1); } else if (arg0 instanceof CobarDO) { //cobar sort by name return ((CobarDO) arg0).getName().compareTo(((CobarDO) arg1).getName()); } else if (arg0 instanceof ClusterDO) { //cluster sort by name return compareCluster((ClusterDO) arg0, (ClusterDO) arg1); } else if (arg0 instanceof Map) { //compare datanodes map return comparePoolName((String) ((Map<String, Object>) arg0).get("poolName"), (String) ((Map<String, Object>) arg1).get("poolName")); } return 0; } }