src/core/net/sf/basedb/util/NameableComparator.java

Code
Comments
Other
Rev Date Author Line
2518 14 Aug 06 nicklas 1 /*
2518 14 Aug 06 nicklas 2   $Id$
2518 14 Aug 06 nicklas 3
3675 16 Aug 07 jari 4   Copyright (C) 2006 Nicklas Nordborg
2518 14 Aug 06 nicklas 5  
2518 14 Aug 06 nicklas 6   This file is part of BASE - BioArray Software Environment.
2518 14 Aug 06 nicklas 7   Available at http://base.thep.lu.se/
2518 14 Aug 06 nicklas 8
2518 14 Aug 06 nicklas 9   BASE is free software; you can redistribute it and/or
2518 14 Aug 06 nicklas 10   modify it under the terms of the GNU General Public License
4479 05 Sep 08 jari 11   as published by the Free Software Foundation; either version 3
2518 14 Aug 06 nicklas 12   of the License, or (at your option) any later version.
2518 14 Aug 06 nicklas 13
2518 14 Aug 06 nicklas 14   BASE is distributed in the hope that it will be useful,
2518 14 Aug 06 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
2518 14 Aug 06 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2518 14 Aug 06 nicklas 17   GNU General Public License for more details.
2518 14 Aug 06 nicklas 18
2518 14 Aug 06 nicklas 19    You should have received a copy of the GNU General Public License
4515 11 Sep 08 jari 20    along with BASE. If not, see <http://www.gnu.org/licenses/>.
2518 14 Aug 06 nicklas 21 */
2518 14 Aug 06 nicklas 22 package net.sf.basedb.util;
2518 14 Aug 06 nicklas 23
5384 13 Aug 10 nicklas 24 import java.io.Serializable;
2518 14 Aug 06 nicklas 25 import java.util.Comparator;
2518 14 Aug 06 nicklas 26
2518 14 Aug 06 nicklas 27 import net.sf.basedb.core.Nameable;
2518 14 Aug 06 nicklas 28
2518 14 Aug 06 nicklas 29 /**
2518 14 Aug 06 nicklas 30   An implementation of the <code>Comparator</code> interface which uses
2518 14 Aug 06 nicklas 31   the name of {@link Nameable} items to compare the objects. If the names
2518 14 Aug 06 nicklas 32   are equal it uses the ID:s to really check if they are equal.
2518 14 Aug 06 nicklas 33   <p>
2518 14 Aug 06 nicklas 34   Note: this comparator is consistent with equals.
2518 14 Aug 06 nicklas 35   
2518 14 Aug 06 nicklas 36   @author Nicklas
2518 14 Aug 06 nicklas 37   @version 2.0
2518 14 Aug 06 nicklas 38   @base.modified $Date$
2518 14 Aug 06 nicklas 39
2518 14 Aug 06 nicklas 40 */
2518 14 Aug 06 nicklas 41 public class NameableComparator<T extends Nameable>
5384 13 Aug 10 nicklas 42   implements Comparator<T>, Serializable
2518 14 Aug 06 nicklas 43 {
2518 14 Aug 06 nicklas 44
5384 13 Aug 10 nicklas 45   private static final long serialVersionUID = -845369301970627620L;
2518 14 Aug 06 nicklas 46   private final boolean descending;
2518 14 Aug 06 nicklas 47   
2518 14 Aug 06 nicklas 48   /**
2518 14 Aug 06 nicklas 49     Create a new comparator.
2518 14 Aug 06 nicklas 50     @param descending TRUE to sort objects in descending order (z--a), 
2518 14 Aug 06 nicklas 51       FALSE to sort the objects in ascending order (a--z)
2518 14 Aug 06 nicklas 52   */
2518 14 Aug 06 nicklas 53   public NameableComparator(boolean descending)
2518 14 Aug 06 nicklas 54   {
2518 14 Aug 06 nicklas 55     this.descending = descending;
2518 14 Aug 06 nicklas 56   }
2518 14 Aug 06 nicklas 57
5384 13 Aug 10 nicklas 58   @Override
2518 14 Aug 06 nicklas 59   public int compare(T o1, T o2)
2518 14 Aug 06 nicklas 60   {
2518 14 Aug 06 nicklas 61     String name1 = o1.getName();
2518 14 Aug 06 nicklas 62     String name2 = o2.getName();
2518 14 Aug 06 nicklas 63     int compared = name1.compareTo(name2);
2518 14 Aug 06 nicklas 64     if (compared == 0) compared = o2.getId() - o1.getId();
2518 14 Aug 06 nicklas 65     if (descending) compared = -compared;
2518 14 Aug 06 nicklas 66     return compared;
2518 14 Aug 06 nicklas 67   }
2518 14 Aug 06 nicklas 68
2518 14 Aug 06 nicklas 69 }