From 26f716a19c0f8bfe0d89183276b403dc1f56bacc Mon Sep 17 00:00:00 2001 From: sand Date: Wed, 25 Jul 2012 13:24:39 +0800 Subject: [PATCH] refactor SortUtils to MapComparator --- .../druid/support/http/StatViewServlet.java | 7 ++- .../com/alibaba/druid/util/MapComparator.java | 58 ++++++++++++++++++ .../com/alibaba/druid/util/SortUtils.java | 59 ------------------- 3 files changed, 63 insertions(+), 61 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/util/MapComparator.java delete mode 100644 src/main/java/com/alibaba/druid/util/SortUtils.java diff --git a/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java b/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java index a0f2f09233..4c8f819160 100644 --- a/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java +++ b/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java @@ -5,6 +5,7 @@ import java.io.PrintWriter; import java.sql.Driver; import java.sql.DriverManager; import java.util.ArrayList; +import java.util.Collections; import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.List; @@ -25,7 +26,7 @@ import com.alibaba.druid.stat.DruidDataSourceStatManager; import com.alibaba.druid.stat.JdbcSqlStat; import com.alibaba.druid.stat.JdbcStatManager; import com.alibaba.druid.util.IOUtils; -import com.alibaba.druid.util.SortUtils; +import com.alibaba.druid.util.MapComparator; import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; @@ -283,7 +284,9 @@ public class StatViewServlet extends HttpServlet { } // orderby - SortUtils.sortMapList(orderBy, array, DEFAULT_ORDER_TYPE.equals(orderType)); + if (orderBy != null && orderBy.trim().length() != 0) { + Collections.sort(array, new MapComparator(orderBy, DEFAULT_ORDER_TYPE.equals(orderType))); + } // page int fromIndex = (page - 1) * perPageCount; diff --git a/src/main/java/com/alibaba/druid/util/MapComparator.java b/src/main/java/com/alibaba/druid/util/MapComparator.java new file mode 100644 index 0000000000..21ab0f2052 --- /dev/null +++ b/src/main/java/com/alibaba/druid/util/MapComparator.java @@ -0,0 +1,58 @@ +package com.alibaba.druid.util; + +import java.text.Collator; +import java.util.Comparator; +import java.util.Date; +import java.util.Map; + +/** + * @author sandzhang + */ +public class MapComparator implements Comparator> { + + private boolean isDesc; + private String orderByKey; + + public MapComparator(String orderByKey, boolean isDesc) { + this.orderByKey = orderByKey; + this.isDesc = isDesc; + } + + private int compare(Number o1, Number o2) { + return (int) (o1.doubleValue() - o2.doubleValue()); + } + + private int compare(String o1, String o2) { + return Collator.getInstance().compare(o1, o2); + } + + private int compare(Date o1, Date o2) { + return (int) (o1.getTime() - o2.getTime()); + } + + @Override + public int compare(Map o1, Map o2) { + int result = compare_0(o1, o2); + + if (isDesc) result = -result; + + return result; + } + + public int compare_0(Map o1, Map o2) { + Object v1 = o1.get(orderByKey); + Object v2 = o2.get(orderByKey); + + if (v1 == null && v2 == null) return 0; + if (v1 == null) return -1; + if (v2 == null) return 1; + + if (v1 instanceof Number) return compare((Number) v1, (Number) v2); + + if (v1 instanceof String) return compare((String) v1, (String) v2); + + if (v1 instanceof Date) return compare((Date) v1, (Date) v2); + + return 0; + } +} diff --git a/src/main/java/com/alibaba/druid/util/SortUtils.java b/src/main/java/com/alibaba/druid/util/SortUtils.java deleted file mode 100644 index 409190d51d..0000000000 --- a/src/main/java/com/alibaba/druid/util/SortUtils.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.alibaba.druid.util; - -import java.text.Collator; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * @author sandzhang - */ -public class SortUtils { - - public static void sortMapList(final String orderByKey, List> targetList, final boolean isDesc) { - if (orderByKey == null || orderByKey.length() == 0) return; - - Collections.sort(targetList, new Comparator>() { - - private int compare(Number o1, Number o2) { - return (int) (o1.doubleValue() - o2.doubleValue()); - } - - private int compare(String o1, String o2) { - return Collator.getInstance().compare(o1, o2); - } - - private int compare(Date o1, Date o2) { - return (int) (o1.getTime() - o2.getTime()); - } - - @Override - public int compare(Map o1, Map o2) { - int result = compare_0(o1, o2); - - if (isDesc) result = -result; - - return result; - } - - public int compare_0(Map o1, Map o2) { - Object v1 = o1.get(orderByKey); - Object v2 = o2.get(orderByKey); - - if (v1 == null && v2 == null) return 0; - if (v1 == null) return -1; - if (v2 == null) return 1; - - if (v1 instanceof Number) return compare((Number) v1, (Number) v2); - - if (v1 instanceof String) return compare((String) v1, (String) v2); - - if (v1 instanceof Date) return compare((Date) v1, (Date) v2); - - return 0; - } - }); - } -}