1 package net.sf.mmapps.commons.bridge; 2 3 import org.mmbase.bridge.Field; 4 import org.mmbase.bridge.Node; 5 6 import java.util.Comparator; 7 8 /*** 9 * Comparator two nodes based on the string value in the specified field. 10 */ 11 public class NodeFieldComparator implements Comparator<Node> { 12 protected String field; 13 protected boolean ascending = true; 14 15 /*** 16 * Basic constructor. 17 * 18 * @param field the node field to compare the nodes on 19 */ 20 public NodeFieldComparator(String field) { 21 this(field, true); 22 } 23 24 /*** 25 * Basic constructor. 26 * 27 * @param field the node field to compare the nodes on 28 * @param ascending sort the list ascending or descending 29 */ 30 public NodeFieldComparator(String field, boolean ascending) { 31 this.field = field; 32 this.ascending = ascending; 33 } 34 35 /*** 36 * Two external source objects are said to be equal only when the two type fields match. The 37 * objects to compare can be of type <code>Node</code>. 38 * 39 * @param o1 the first external source node. 40 * @param o2 the first external source node 41 * 42 * @return a negative integer, zero, or a positive integer as the first argument is less than, 43 * equal to, or greater than the second. 44 */ 45 public int compare(Node n1, Node n2) { 46 47 int fieldType = n1.getNodeManager().getField(field).getType(); 48 int result = 0; 49 50 switch (fieldType) { 51 case Field.TYPE_INTEGER: 52 result = n1.getIntValue(field) - n2.getIntValue(field); 53 54 break; 55 56 case Field.TYPE_STRING: default: 57 result = n1.getStringValue(field).compareTo(n2.getStringValue(field)); 58 } 59 60 if (ascending) { 61 return result; 62 } else { 63 return -result; 64 } 65 } 66 }