package com.idega.util; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Vector; /** * Title: com.idega.util.IndexComparator * Description: Compares objects that implement the com.idega.util.Index interface and sorts * Copyright: Copyright (c) 2002 * Company: idega software * @author <a href="mailto:eiki@idega.is">Eirikur Hrafnsson</a> * @version 1.0 */ public class IndexComparator implements Comparator { public static final int ORDER_BY_INDEX = 1; public static final int REVERSE_ORDER_BY_INDEX = 2; private int sortBy; public IndexComparator() { this.sortBy = ORDER_BY_INDEX; } public IndexComparator(int toSortBy) { this.sortBy = toSortBy; } public void sortBy(int toSortBy) { this.sortBy = toSortBy; } public int compare(Object o1, Object o2) { int result = 0; switch (this.sortBy) { case ORDER_BY_INDEX : result = indexSort(o1,o2); break; case REVERSE_ORDER_BY_INDEX : result = reverseIndexSort(o1,o2); break; } return result; } /** * Sorts by indexes in low to high order */ private int indexSort(Object o1, Object o2) { int result; Index p1 = (Index) o1; Index p2 = (Index) o2; if( p1.getIndex() > p2.getIndex() ){ result = 1; } else if( p1.getIndex() < p2.getIndex() ){ result = -1; } else { result = 0; } return result; } /** * Sorts by indexes in high to low order */ private int reverseIndexSort(Object o1, Object o2) { return (-1*indexSort(o1,o2)); } public boolean equals(Object obj) { /**@todo: Implement this java.util.Comparator method*/ throw new java.lang.UnsupportedOperationException("Method equals() not yet implemented."); } public Iterator sort(Index[] indexes, int toSortBy) { this.sortBy = toSortBy; List list = new LinkedList(); for(int i = 0; i < indexes.length; i++) { list.add(indexes[i]); } Collections.sort(list, this); return list.iterator(); } public Iterator sort(Index[] indexes) { List list = new LinkedList(); for(int i = 0; i < indexes.length; i++) { list.add(indexes[i]); } Collections.sort(list, this); return list.iterator(); } public Index[] sortedArray(Index[] indexes, int toSortBy) { this.sortBy = toSortBy; List list = new LinkedList(); for(int i = 0; i < indexes.length; i++) { list.add(indexes[i]); } Collections.sort(list, this); Object[] objArr = list.toArray(); for(int i = 0; i < objArr.length; i++) { indexes[i] = (Index) objArr[i]; } return (indexes); } public Vector sortedArray(Vector list) { Collections.sort(list, this); return list; } public ArrayList sortedArrayList(ArrayList list) { Collections.sort(list, this); return list; } public Index[] sortedArray(Index[] indexes) { List list = new LinkedList(); for(int i = 0; i < indexes.length; i++) { list.add(indexes[i]); } Collections.sort(list, this); Object[] objArr = list.toArray(); for(int i = 0; i < objArr.length; i++) { indexes[i] = (Index) objArr[i]; } return (indexes); } public Index[] reverseSortedArray(Index[] indexes, int toSortBy) { this.sortBy = toSortBy; List list = new LinkedList(); for(int i = 0; i < indexes.length; i++) { list.add(indexes[i]); } Collections.sort(list, this); Collections.reverse(list); Object[] objArr = list.toArray(); for(int i = 0; i < objArr.length; i++) { indexes[i] = (Index) objArr[i]; } return (indexes); } }