Fixed interface name natural sorting order
authorEriks Jenkevics <eriks@netxms.org>
Wed, 27 Sep 2017 09:33:36 +0000 (12:33 +0300)
committerEriks Jenkevics <eriks@netxms.org>
Wed, 27 Sep 2017 09:33:36 +0000 (12:33 +0300)
src/java/netxms-eclipse/Core/src/org/netxms/ui/eclipse/tools/NaturalOrderComparator.java
webui/webapp/Core/src/org/netxms/ui/eclipse/tools/NaturalOrderComparator.java

index 820b8c6..aa9cfd7 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * NetXMS - open source network management system
- * Copyright (C) 2003-2016 Raden Solutions
+ * Copyright (C) 2003-2017 Raden Solutions
  *
  * This program is free software; you c1n redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  */
 package org.netxms.ui.eclipse.tools;
 
-/**
- * Compares the natural order of strings
- *
- */
 public class NaturalOrderComparator
 {
    /**
-    * @param s1
-    * @param s2
-    * @return
+    * Return char at specific position
+    * 
+    * @param s String
+    * @param i position
+    * @return char at position
     */
-   static private int compareRight(String s1, String s2)
+   private static char charAt(String s, int i)
    {
-       int bias = 0;
+      return i >= s.length() ? 0 : s.charAt(i);
+   }
 
-       for (int i = 0, n = 0;; i++, n++)
-       {
-           char c1 = charAt(s1, i);
-           char c2 = charAt(s2, n);
+   /**
+    * Check if char is digit or not
+    * 
+    * @param a String a
+    * @param b String b
+    * @return result
+    */
+   private static int compareRight(String a, String b)
+   {
+      int bias = 0, i = 0, n = 0;
 
-           if (!Character.isDigit(c1) && !Character.isDigit(c2))
-               return bias;
-           else if (!Character.isDigit(c1))
-               return -1;
-           else if (!Character.isDigit(c2))
-               return +1;
-           else if (c1 < c2)
-               if (bias == 0)
-                   bias = -1;
-           else if (c1 > c2)
-               if (bias == 0)
-                   bias = +1;
-           else if (c1 == 0 && c2 == 0)
-               return bias;
-       }
+      while(true)
+      {
+         char ca = charAt(a, i);
+         char cb = charAt(b, n);
+
+         if (!Character.isDigit(ca) && !Character.isDigit(cb))
+            return bias;
+         if (!Character.isDigit(ca))
+            return -1;
+         if (!Character.isDigit(cb))
+            return +1;
+         if (ca == 0 && cb == 0)
+            return bias;
+
+         if (bias == 0)
+         {
+            if (ca < cb)
+               bias = -1;
+            else if (ca > cb)
+               bias = +1;
+         }
+         i++;
+         n++;
+      }
    }
 
    /**
-    * @param s1
-    * @param s2
-    * @return
+    * Compare two strings
+    * @param a String a
+    * @param b String b
+    * @return result
     */
-   public static int compare(String s1, String s2)
+   public static int compare(String a, String b)
    {
-       int i = 0, n = 0;
-       int nz1 = 0, nz2 = 0;
-       char c1, c2;
-       int result;
+      int i = 0, n = 0;
+      int j = 0, c = 0;
+      char ca, cb;
 
-       while (true)
-       {
-           nz1 = nz2 = 0;
+      while(true)
+      {
+         j = c = 0;
 
-           c1 = charAt(s1, i);
-           c2 = charAt(s2, n);
+         ca = charAt(a, i);
+         cb = charAt(b, n);
 
-           while (Character.isSpaceChar(c1) || c1 == '0')
-           {
-               if (c1 == '0')
-                   nz1++;
-               else
-                   nz1 = 0;
+         while(Character.isSpaceChar(ca) || ca == '0')
+         {
+            if (ca == '0')
+               j++;
+            else
+               j = 0;
 
-               c1 = charAt(s1, ++i);
-           }
+            ca = charAt(a, ++i);
+         }
 
-           while (Character.isSpaceChar(c2) || c2 == '0')
-           {
-               if (c2 == '0')
-                   nz2++;
-               else
-                   nz2 = 0;
+         while(Character.isSpaceChar(cb) || cb == '0')
+         {
+            if (cb == '0')
+               c++;
+            else
+               c = 0;
 
-               c2 = charAt(s2, ++n);
-           }
+            cb = charAt(b, ++n);
+         }
 
-           if (Character.isDigit(c1) && Character.isDigit(c2))
-               if ((result = compareRight(s1.substring(i), s2.substring(n))) != 0)
-                   return result;
-
-           if (c1 == 0 && c2 == 0)
-               return nz1 - nz2;
-           if (c1 < c2)
-               return -1;
-           else if (c1 > c2)
-               return +1;
+         if (Character.isDigit(ca) && Character.isDigit(cb))
+         {
+            int bias = compareRight(a.substring(i), b.substring(n));
+            if (bias != 0)
+               return bias;
+         }
 
-           ++i;
-           ++n;
-       }
-   }
+         if (ca == 0 && cb == 0)
+            return j - c;
+         if (ca < cb)
+            return -1;
+         if (ca > cb)
+            return +1;
 
-   /**
-    * @param s
-    * @param i
-    * @return
-    */
-   static private char charAt(String s, int i)
-   {
-       if (i >= s.length())
-           return 0;
-       else
-           return s.charAt(i);
+         ++i;
+         ++n;
+      }
    }
 }
index 820b8c6..aa9cfd7 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * NetXMS - open source network management system
- * Copyright (C) 2003-2016 Raden Solutions
+ * Copyright (C) 2003-2017 Raden Solutions
  *
  * This program is free software; you c1n redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  */
 package org.netxms.ui.eclipse.tools;
 
-/**
- * Compares the natural order of strings
- *
- */
 public class NaturalOrderComparator
 {
    /**
-    * @param s1
-    * @param s2
-    * @return
+    * Return char at specific position
+    * 
+    * @param s String
+    * @param i position
+    * @return char at position
     */
-   static private int compareRight(String s1, String s2)
+   private static char charAt(String s, int i)
    {
-       int bias = 0;
+      return i >= s.length() ? 0 : s.charAt(i);
+   }
 
-       for (int i = 0, n = 0;; i++, n++)
-       {
-           char c1 = charAt(s1, i);
-           char c2 = charAt(s2, n);
+   /**
+    * Check if char is digit or not
+    * 
+    * @param a String a
+    * @param b String b
+    * @return result
+    */
+   private static int compareRight(String a, String b)
+   {
+      int bias = 0, i = 0, n = 0;
 
-           if (!Character.isDigit(c1) && !Character.isDigit(c2))
-               return bias;
-           else if (!Character.isDigit(c1))
-               return -1;
-           else if (!Character.isDigit(c2))
-               return +1;
-           else if (c1 < c2)
-               if (bias == 0)
-                   bias = -1;
-           else if (c1 > c2)
-               if (bias == 0)
-                   bias = +1;
-           else if (c1 == 0 && c2 == 0)
-               return bias;
-       }
+      while(true)
+      {
+         char ca = charAt(a, i);
+         char cb = charAt(b, n);
+
+         if (!Character.isDigit(ca) && !Character.isDigit(cb))
+            return bias;
+         if (!Character.isDigit(ca))
+            return -1;
+         if (!Character.isDigit(cb))
+            return +1;
+         if (ca == 0 && cb == 0)
+            return bias;
+
+         if (bias == 0)
+         {
+            if (ca < cb)
+               bias = -1;
+            else if (ca > cb)
+               bias = +1;
+         }
+         i++;
+         n++;
+      }
    }
 
    /**
-    * @param s1
-    * @param s2
-    * @return
+    * Compare two strings
+    * @param a String a
+    * @param b String b
+    * @return result
     */
-   public static int compare(String s1, String s2)
+   public static int compare(String a, String b)
    {
-       int i = 0, n = 0;
-       int nz1 = 0, nz2 = 0;
-       char c1, c2;
-       int result;
+      int i = 0, n = 0;
+      int j = 0, c = 0;
+      char ca, cb;
 
-       while (true)
-       {
-           nz1 = nz2 = 0;
+      while(true)
+      {
+         j = c = 0;
 
-           c1 = charAt(s1, i);
-           c2 = charAt(s2, n);
+         ca = charAt(a, i);
+         cb = charAt(b, n);
 
-           while (Character.isSpaceChar(c1) || c1 == '0')
-           {
-               if (c1 == '0')
-                   nz1++;
-               else
-                   nz1 = 0;
+         while(Character.isSpaceChar(ca) || ca == '0')
+         {
+            if (ca == '0')
+               j++;
+            else
+               j = 0;
 
-               c1 = charAt(s1, ++i);
-           }
+            ca = charAt(a, ++i);
+         }
 
-           while (Character.isSpaceChar(c2) || c2 == '0')
-           {
-               if (c2 == '0')
-                   nz2++;
-               else
-                   nz2 = 0;
+         while(Character.isSpaceChar(cb) || cb == '0')
+         {
+            if (cb == '0')
+               c++;
+            else
+               c = 0;
 
-               c2 = charAt(s2, ++n);
-           }
+            cb = charAt(b, ++n);
+         }
 
-           if (Character.isDigit(c1) && Character.isDigit(c2))
-               if ((result = compareRight(s1.substring(i), s2.substring(n))) != 0)
-                   return result;
-
-           if (c1 == 0 && c2 == 0)
-               return nz1 - nz2;
-           if (c1 < c2)
-               return -1;
-           else if (c1 > c2)
-               return +1;
+         if (Character.isDigit(ca) && Character.isDigit(cb))
+         {
+            int bias = compareRight(a.substring(i), b.substring(n));
+            if (bias != 0)
+               return bias;
+         }
 
-           ++i;
-           ++n;
-       }
-   }
+         if (ca == 0 && cb == 0)
+            return j - c;
+         if (ca < cb)
+            return -1;
+         if (ca > cb)
+            return +1;
 
-   /**
-    * @param s
-    * @param i
-    * @return
-    */
-   static private char charAt(String s, int i)
-   {
-       if (i >= s.length())
-           return 0;
-       else
-           return s.charAt(i);
+         ++i;
+         ++n;
+      }
    }
 }