Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* This Source Code Form is subject to the terms of the Mozilla Public
   * License, v. 2.0. If a copy of the MPL was not distributed with this file,
   * You can obtain one at http://mozilla.org/MPL/2.0/. */
  
  package pt.webdetails.cda.utils;
  
  import java.util.List;
 
 
 import  org.apache.commons.lang.StringUtils;


Author(s):
pdpi
 
 public class NaturalOrderComparator implements Comparator<Integer>
 {
 
   private TableModel baseData;
   private List<StringsortBy;
   Pattern recognizeNbr = Pattern.compile("[\\s]*[-+]?(?:(?:\\d[\\d,]*)(?:[.][\\d]+)?|([.][\\d]+))");
 
 
   public NaturalOrderComparator(TableModel baseDataList<StringsortBy)
   {
     this. = baseData;
     this. = sortBy;
   }
 
 
   public int compare(Integer i0Integer i1)
   {
 
     for (String entry : )
     {
 
       char direction = entry.charAt(entry.length() - 1);
       boolean ascending = direction == 'A' || direction == 'a';
       int i = Integer.parseInt(entry.substring(0, entry.length() - 1), 10);
       int bigger = 0;
       
       String v0 = .getValueAt(i0i) != null ? .getValueAt(i0i).toString() : "";
       String v1 = .getValueAt(i1i) != null ? .getValueAt(i1i).toString() : "";
       
       boolean v0Empty = false;
       boolean v1Empty = false;
       
       if(v0.compareTo("Infinity") == 0 || v0.compareTo("") == 0 || v0.compareTo("null") == 0){
     	  v0Empty = true;
       }
       if(v1.compareTo("Infinity") == 0 || v1.compareTo("") == 0 || v1.compareTo("null") == 0){
     	  v1Empty = true;
       }
       
       if(v0Empty && v1Emptyreturn 0;
       else if(v0Emptyreturn 1;
       else if(v1Emptyreturn -1;
 
 
 
       bigger = compareStrings(v0v1);
       if (bigger != 0)
       {
         return ascending ? bigger : -bigger;
       }
     }
     return 0;
   }
   
   public int compareStrings(String aString b)
   { 
     
     if(a == null)
     {
       if(b == nullreturn 0;
       else return -1;
     }
     else if(b == nullreturn 1; 
     
     Matcher matcherA = .matcher(a);
     Matcher matcherB = .matcher(b);
     
     int idxA=0, idxB=0;
     while(idxA < a.length() || idxB < b.length())
     {
       boolean foundInA = matcherA.find(idxA);
       boolean foundInB = matcherB.find(idxB);
       
       if(!foundInA || !foundInB)
       {//then our job is over, return a regular string comparison
         return .compare(a.substring(idxA), b.substring(idxB)) ;
       }
      //else found in both
      
      //1) compare unmatched bit as String
      String preA = StringUtils.substring(aidxAmatcherA.start());
      String preB = StringUtils.substring(bidxBmatcherB.start());
      int comparison = .compare(preApreB);
      
      if(comparison != 0) return comparison;//done!
      
      //2) get the number and compare it
      String matchA =  StringUtils.substring(amatcherA.start(), matcherA.end());
      String matchB =  StringUtils.substring(bmatcherB.start(), matcherB.end());
      
      BigDecimal numberA = new BigDecimal(StringUtils.remove(matchA',').trim());
      BigDecimal numberB = new BigDecimal(StringUtils.remove(matchB',').trim());
      
      comparison = numberA.compareTo(numberB);
      
      if(comparison != 0) return comparison;
      
      //3) if inconclusive process the rest
      idxA = matcherA.end();
      idxB = matcherB.end();
    }
    
    return 0;
  }
New to GrepCode? Check out our FAQ X