adapterjob.java

来自「eclipse开发笔记」· Java 代码 · 共 132 行

JAVA
132
字号
package rcpdev.adapter.job;

import java.util.Calendar;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;

import rcpdev.adapter.Activator;
import rcpdev.adapter.lang.Messages;
import rcpdev.contact.core.model.contact.Contact;
import rcpdev.todo.core.model.series.TodoSeries;
import rcpdev.todo.core.model.series.info.MonthInfo;
import rcpdev.todo.core.model.series.info.YearInfo;
import rcpdev.todo.core.storage.ITodoFacade;
import rcpdev.todo.core.storage.TodoFacadeException;
import rcpdev.todo.core.storage.TodoFacadeFactory;

public class AdapterJob extends Job {

	public AdapterJob(int type, Contact contact) {
		super(NAME);
		setPriority(Job.SHORT);
		this.actionType = type;
		this.target = contact;
	}

	public static final int ACTION_ADD = 0;

	public static final int ACTION_UPDATE = 1;

	public static final int ACTION_REMOVE = 2;

	private static final String POSTFIX = Messages
			.getString("AdapterJob.birthday"); //$NON-NLS-1$

	private static final String CONTENT = "Generated by Contact Plug-in";

	private int actionType;

	private Contact target;

	public static final String NAME = Messages.getString("AdapterJob.jobName"); //$NON-NLS-1$

	@Override
	protected IStatus run(IProgressMonitor monitor) {

		ITodoFacade facade = TodoFacadeFactory.getInstance().getFacade();
		switch (actionType) {
		case ACTION_ADD:
			monitor.beginTask(Messages.getString("AdapterJob.taskAdd"), 10); //$NON-NLS-1$
			// No birthday info available, just returns
			if (target.getBirthday() == null) {
				monitor.done();
				return Status.OK_STATUS;
			}
			// Create new todo item representing the birthday of the contact
			TodoSeries series = fillSeries(new TodoSeries());
			monitor.worked(3);
			try {
				facade.addTodoItem(series);
			} catch (TodoFacadeException e) {
				monitor.done();
				return new Status(Status.ERROR, Activator.PLUGIN_ID, 0, e
						.getDescription(), e);
			}
			monitor.done();
			return Status.OK_STATUS;
		case ACTION_UPDATE:
			monitor.beginTask("Update Birthday Info", 10);
			try {
				TodoSeries existed = facade.findBirthdaySeries(target
						.getFullName()
						+ POSTFIX, CONTENT);
				if (existed == null) {
					facade.addTodoItem(fillSeries(new TodoSeries()));
				} else {
					facade.updateTodoItem(fillSeries(existed));
				}
			} catch (TodoFacadeException e) {
				monitor.done();
				return new Status(Status.ERROR, Activator.PLUGIN_ID, 0, e
						.getDescription(), e);
			}
			monitor.done();
			return Status.OK_STATUS;
		case ACTION_REMOVE:
			monitor.beginTask("Delete Birthday Info", 10);
			try {
				TodoSeries existed = facade.findBirthdaySeries(target
						.getFullName()
						+ POSTFIX, CONTENT);
				if (existed != null) {
					facade.removeTodoItem(fillSeries(existed));
				}
			} catch (TodoFacadeException e) {
				monitor.done();
				return new Status(Status.ERROR, Activator.PLUGIN_ID, 0, e
						.getDescription(), e);
			}
			monitor.done();
			return Status.OK_STATUS;
		}
		return Status.OK_STATUS;
	}

	protected TodoSeries fillSeries(TodoSeries fill) {
		TodoSeries series = fill;
		series.setSubject(target.getFullName() + POSTFIX);
		series.setContent(CONTENT);
		series.setDate(target.getBirthday());
		series.setStopDate(target.getBirthday());
		series.setSeriesType(TodoSeries.TYPE_ENDLESS);
		series.setStartTime(16);
		series.setStopTime(17);

		YearInfo yearInfo = new YearInfo();
		Calendar cal = Calendar.getInstance();
		cal.setTime(target.getBirthday());
		yearInfo.setMonthOfYear(cal.get(Calendar.MONTH));

		MonthInfo monthInfo = new MonthInfo();
		monthInfo.setDayOfMonth(cal.get(Calendar.DAY_OF_MONTH));
		monthInfo.setBaseDate(series.getDate());
		yearInfo.setNext(monthInfo);

		series.setInfo(yearInfo);
		return series;
	}
}

⌨️ 快捷键说明

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