⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 archiveeditorsorter.java

📁 学生成绩管理系统
💻 JAVA
字号:
package cn.com.chengang.sms.archive;

import java.util.Date;

import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;

import cn.com.chengang.sms.model.IUser;
import cn.com.chengang.sms.model.SchoolClass;
import cn.com.chengang.sms.model.Student;

public class ArchiveEditorSorter extends ViewerSorter {
	// 每列对应一个不同的常量,正数表示要升序、相反数表示要降序
	public static final int ID = 1;
	public static final int USERID = 2;
	public static final int LATEST_ONLINE = 3;
	public static final int SCHOOLCLASS = 4;
	// 给外界使用排序器对象
	public static final ViewerSorter ID_ASC = new ArchiveEditorSorter(ID);
	public static final ViewerSorter ID_DESC = new ArchiveEditorSorter(-ID);
	public static final ViewerSorter USERID_ASC = new ArchiveEditorSorter(USERID);
	public static final ViewerSorter USERID_DESC = new ArchiveEditorSorter(-USERID);
	public static final ViewerSorter LATESTONLINE_ASC = new ArchiveEditorSorter(LATEST_ONLINE);
	public static final ViewerSorter LATESTONLINE_DESC = new ArchiveEditorSorter(-LATEST_ONLINE);
	public static final ViewerSorter SCHOOLCLASS_ASC = new ArchiveEditorSorter(SCHOOLCLASS);
	public static final ViewerSorter SCHOOLCLASS_DESC = new ArchiveEditorSorter(-SCHOOLCLASS);

	private int sortType;// 当前所要排序的列,取自上面的ID、USERID两值或其相反数

	// 构造函数用private,表示不能在外部创建ArchiveEditorSorter对象
	private ArchiveEditorSorter(int sortType) {
		this.sortType = sortType;
	}

	// 最关键的比较方法compare,改写自ViewerSorter。方法返回值是一个int值:正数则
	// obj1移到obj2之前;零则obj1和obj2的位置不动;负数则obj1移到obj2之后
	public int compare(Viewer viewer, Object obj1, Object obj2) {
		IUser o1 = (IUser) obj1;
		IUser o2 = (IUser) obj2;
		switch (sortType) {
		case ID:
			return o1.getId().compareTo(o2.getId());
		case -ID:
			return o2.getId().compareTo(o1.getId());
		case USERID:
			return o1.getUserId().compareTo(o2.getUserId());
		case -USERID:
			return o2.getUserId().compareTo(o1.getUserId());
		case LATEST_ONLINE:
			return compareLatestOnline(o1, o2);
		case -LATEST_ONLINE:
			return compareLatestOnline(o2, o1);
		case SCHOOLCLASS:
			// 因为此字段存在空值,所以排序算法要麻烦一些。不处理会出现空值记录原地不动的情况
			return compareSchoolClass(o1, o2);
		case -SCHOOLCLASS:
			return compareSchoolClass(o2, o1);
		}
		return 0;
	}

	// 最后登录时间的比较
	private int compareLatestOnline(IUser o1, IUser o2) {
		Date d1 = o1.getLatestOnline();
		Date d2 = o2.getLatestOnline();
		if (d1 == null)
			d1 = new Date(1);
		if (d2 == null)
			d2 = new Date(1);
		return d1.compareTo(d2);
	}

	// 班级的比较
	private int compareSchoolClass(IUser o1, IUser o2) {
		Long l1 = new Long(-1);
		Long l2 = new Long(-1);
		if (o1 instanceof Student) {// 教师型用户没有班级属性
			SchoolClass class1 = ((Student) o1).getSchoolclass();
			l1 = (class1 == null ? new Long(0) : class1.getId());
		}
		if (o2 instanceof Student) {
			SchoolClass class2 = ((Student) o2).getSchoolclass();
			l2 = (class2 == null ? new Long(0) : class2.getId());
		}
		return l1.compareTo(l2);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -