taskaction.java

来自「OBPM是一个开源」· Java 代码 · 共 197 行

JAVA
197
字号
package cn.myapps.core.task.action;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import cn.myapps.base.action.BaseAction;
import cn.myapps.core.dynaform.dts.exp.mappingconfig.ejb.MappingConfig;
import cn.myapps.core.dynaform.dts.exp.mappingconfig.ejb.MappingConfigProcess;
import cn.myapps.core.task.ejb.Task;
import cn.myapps.core.task.ejb.TaskConstants;
import cn.myapps.core.task.ejb.TaskProcess;
import cn.myapps.util.DateUtil;
import cn.myapps.util.ProcessFactory;
import cn.myapps.util.timer.TimeRunnerAble;
import cn.myapps.util.timer.TimerRunner;

public class TaskAction extends BaseAction {

	private String _time;

	private Calendar calendar = Calendar.getInstance();

	private static final long serialVersionUID = 2948439801638083317L;

	private static Map _TASKTYPE = new TreeMap();

	private static Map _STARTUPTYPE = new TreeMap();

	private static Map _REAPETTYPE = new TreeMap();

	static {
		_TASKTYPE
				.put(Integer.valueOf(TaskConstants.TASK_TYPE_SCRIPT), "Script");
		_TASKTYPE.put(Integer.valueOf(TaskConstants.TASK_TYPE_EXPDATA),
				"ExpData");

		_STARTUPTYPE.put(Integer.valueOf(TaskConstants.STARTUP_TYPE_MANUAL),
				"Manual");
		_STARTUPTYPE.put(Integer.valueOf(TaskConstants.STARTUP_TYPE_AUTO),
				"Auto");
		_STARTUPTYPE.put(Integer.valueOf(TaskConstants.STARTUP_TYPE_BANNED),
				"Banned");

		_REAPETTYPE = TaskConstants.getREPEAT_TYPE_LIST();
	}

	public static Map get_TASKTYPE() {
		return _TASKTYPE;
	}

	public static Map get_STARTUPTYPE() {
		return _STARTUPTYPE;
	}

	public static Map get_REAPETTYPE() {
		return _REAPETTYPE;
	}

	public TaskAction() throws ClassNotFoundException {
		super(ProcessFactory.createProcess(TaskProcess.class), new Task());
	}

	public String doSave() throws Exception {
		try {
			setDate();
		} catch (Exception e) {
			return INPUT;
		}

		return super.doSave();
	}

	public String doStart() throws Exception {
		try {
			setDate();
		} catch (Exception e) {
			return INPUT;
		}
		boolean flag = false;

		// 获取所有运行时列表
		Collection runningList = TimerRunner.runningList.keySet();
		int count = 0;

		for (Iterator iter = runningList.iterator(); iter.hasNext();) {
			Task task = (Task) iter.next();
			if (!(task.getId()).equals(getTask().getId())) {
				count++;
				continue;
			}
		}
		if (count == runningList.size() || runningList.size() == 0) {
			flag = true;
		}

		if (flag
				&& getTask().getStartupType() != TaskConstants.STARTUP_TYPE_BANNED) {
			TimeRunnerAble job = TimerRunner.createTimeRunnerAble(getTask(),
					(TaskProcess) this.proxy);

			TimerRunner.registerTimerTask(job, new Date(), 60 * 1000);

			TimerRunner.runningList.put(getTask(), job);
		}
		return SUCCESS;
	}

	public String doStop() throws Exception {
		try {
			setDate();
		} catch (Exception e) {
			return INPUT;
		}
		Set runningList = TimerRunner.runningList.keySet();

		for (Iterator iter = runningList.iterator(); iter.hasNext();) {
			Task task = (Task) iter.next();
			// 以id判断runningList的task与当前task是否相等
			if ((task.getId()).equals(getTask().getId())) {
				Object obj = TimerRunner.runningList.get(task);
				long delay = 1000L;
				if (obj != null && delay > 0) {
					TimerRunner.runningList.remove(task);
					TimeRunnerAble job = (TimeRunnerAble) obj;
					job.cancel(task, (TaskProcess) this.proxy);
					break;
				}
			}
		}
		return SUCCESS;
	}

	public String get_time() throws Exception {
		String timeStr = "";
		if (getTask().getRunningTime() != null) {
			Date dateTime = getTask().getRunningTime();
			timeStr = DateUtil.format(dateTime, "HH:mm");
		}
		
		return timeStr;
	}

	public void set_time(String _time) {
		this._time = _time;
	}

	// 设置日期
	private void setDate() throws Exception {
		Date date = new Date();
		if (getTask().getRunningTime() != null) {
			date = getTask().getRunningTime();
		}

		try {
			String dateStr = DateUtil.format(date, "yyyy-MM-dd");
			dateStr += " " + _time;
			SimpleDateFormat formatter = new SimpleDateFormat(
					"yyyy-MM-dd HH:mm");
			date = formatter.parse(dateStr);
		} catch (Exception e) {
			addFieldError("", "Please choose time");
		}

		getTask().setRunningTime(date);
	}

	private Task getTask() {
		return ((Task) this.getContent());
	}

	public Collection get_mappingconfigs() {
		Task vo = (Task) getContent();
		return vo != null ? vo.getMappingConfigs() : null;
	}

	public void set_mappingconfigs(Collection _mappingconfigs) throws Exception {
		Collection maps = new HashSet();

		MappingConfigProcess dp = (MappingConfigProcess) ProcessFactory
				.createProcess((MappingConfigProcess.class));
		for (Iterator iter = _mappingconfigs.iterator(); iter.hasNext();) {
			String id = (String) iter.next();
			MappingConfig mc = (MappingConfig) dp.doView(id);
			maps.add(mc);
		}

		((Task) getContent()).setMappingConfigs(maps);
	}
}

⌨️ 快捷键说明

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