/* Groovy Class #* */

import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.TreeSet;
import java.util.Comparator;

class Utils {

  def log = new ArrayList();

  String formatToScientific(number) {
    DecimalFormat df = NumberFormat.getNumberInstance();
    df.applyPattern("0.00E0");
    df.setGroupingUsed(false);
    return df.format(new Double(number));
   return number;
  }

  Double round(val, precision) {
   log.add("x");
    if (Double.isInfinite(val) || Double.isNaN(val)) return val;
    BigDecimal bd = new BigDecimal(val, new java.math.MathContext(precision) );
    return bd.doubleValue();
  }

  ArrayList sortMSAC(list) {
    TreeSet ts = new TreeSet(new MSACcomparator(log));
    ts.addAll(list);
    ArrayList sortedList = new ArrayList(ts);
    return sortedList;
  }

  ArrayList sort(list) {
    TreeSet ts = new TreeSet();
    ts.addAll(list);
    ArrayList sortedList = new ArrayList(ts);
    return sortedList;
  }

  String nextItem(list,item) {
    int index = list.lastIndexOf(item)+1;
    if (index >= list.size()) index = 0;
    return list.get(index);
  }

  String previousItem(list,item) {
    int index = list.lastIndexOf(item)-1;
    if (index < 0) index = list.size()-1;
    return list.get(index);
  }
 
  ArrayList getLog() {
    return log;
  }

}

class MSACcomparator implements Comparator {
  def log;
  MSACcomparator(log){
    this.log=log;
  }
  int compare(Object o1, Object o2) {
    String str1 = o1.toString();
    str1 = str1.substring(str1.indexOf('.')+1);
    String str2 = o2.toString();
    str2 = str2.substring(str2.indexOf('.')+1);
    String[] part1 = str1.split("_");
    try {
      int m1=0,s1=0,a1=0;
      String c1="";
      if (part1.length>4) {
        m1 = Integer.parseInt(part1[0]);
        s1 = Integer.parseInt(part1[1]);
        a1 = Integer.parseInt(part1[2]);
        c1 = str1.substring(part1[0].length()+part1[1].length()+part1[2].length()+3);
      }
      String[] part2 = str2.split("_");
      int m2=0,s2=0,a2=0;
      String c2="";
      if (part2.length>4) {
        m2 = Integer.parseInt(part2[0]);
        s2 = Integer.parseInt(part2[1]);
        a2 = Integer.parseInt(part2[2]);
        c2 = str2.substring(part2[0].length()+part2[1].length()+part2[2].length()+3);
      }
     Integer i1 = a1+s1*1000+m1*100000;
      
Integer i2 = a2+s2*1000+m2*100000;
     return i1.compareTo(i2);
      
log.add(m1+":"+m2+" - "+s1+":"+s2+" - "+a1+":"+a2+" - "+str1+" - "+str2);
      if (m1>m2) return 1;
      if (m1<m2) return -1;
      if (s1>s2) return 1;
      if (s1<s2) return -1;
      if (a1>a2) return 1;
      if (a1<a2) return -1;
      return c1.compareTo(c2);
    } catch (Exception ex) {
      log.add(ex+" - "+str1+" - "+str2);
      return 0;
    }
    return 0;
   return s1.compareTo(s2);
  }
}

/* *# */