All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.yaoqiang.bpmn.editor.dialog.SortingTableModel Maven / Gradle / Ivy

package org.yaoqiang.bpmn.editor.dialog;

import java.util.Collections;
import java.util.Comparator;
import java.util.Vector;

import javax.swing.table.DefaultTableModel;

/**
 * SortingTableModel
 * 
 * @author Shi Yaoqiang([email protected])
 */
public class SortingTableModel extends DefaultTableModel {

	private static final long serialVersionUID = 1L;

	public SortingTableModel(Vector data, Vector names) {
		super(data, names);
	}

	@SuppressWarnings("unchecked")
	public void sortByColumn(int col, boolean ascending) {
		Vector dv = getDataVector();
		Vector v = new Vector(dv);
		int vs = v.size();

		if (vs > 0) {
			Collections.sort(v, new ColumnSortingComparator(col, ascending));
			for (int i = 0; i < vs; i++) {
				dv.set(i, v.get(i));
			}
		}
	}

	public Class getColumnClass(int c) {
		Object val = getValueAt(0, c);
		return val == null ? Object.class : val.getClass();
	}

	static class ColumnSortingComparator implements Comparator {

		protected int index;
		protected boolean ascending;

		public ColumnSortingComparator(int index, boolean ascending) {
			this.index = index;
			this.ascending = ascending;
		}

		@SuppressWarnings("unchecked")
		public int compare(Object first, Object second) {
			if (first instanceof Vector && second instanceof Vector) {
				if (((Vector) first).elementAt(index) instanceof Integer && ((Vector) second).elementAt(index) instanceof Integer) {
					int int1 = ((Integer) ((Vector) first).elementAt(index)).intValue();
					int int2 = ((Integer) ((Vector) second).elementAt(index)).intValue();
					if (ascending) {
						return int1 - int2;
					}
					return int2 - int1;
				} else {
					String str1 = ((Vector) first).elementAt(index).toString();
					String str2 = ((Vector) second).elementAt(index).toString();
					if (ascending) {
						return str1.compareTo(str2);
					}
					return str2.compareTo(str1);
				}
			}
			return 1;
		}

	}
}