CronTask.java

package sk.iway.iwcm.system.cron;

import sk.iway.iwcm.system.datatable.DataTableColumnType;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumn;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditor;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditorAttr;

import javax.validation.constraints.NotBlank;

import static sk.iway.iwcm.Tools.isEmpty;

/**
 * CronTask.java
 * <p>
 * Encapsulates a cron task details in a java bean fashion
 *
 * @author $Author: marosurbanec $
 * @version $Revision: 1.3 $
 * @Title webjet7
 * @Company Interway s.r.o. (www.interway.sk)
 * @Copyright Interway s.r.o. (c) 2001-2010
 * @created Date: 9.7.2010 15:52:55
 * @modified $Date: 2004/08/16 06:26:11 $
 */
public class CronTask {
	@DataTableColumn(
			inputType = {DataTableColumnType.ID},
			title = "[[#{components.cron_task.id}]]"
	)
	private Long id;

	@DataTableColumn(
			inputType = {DataTableColumnType.OPEN_EDITOR},
			renderFormat = "dt-format-text-wrap",
			title = "[[#{components.cron_task.task_name}]]",
			editor = {
					@DataTableColumnEditor(
							type = "text"
					)
			}
	)
	private String taskName = "";

	@NotBlank
	@DataTableColumn(
			renderFormat = "dt-format-text-wrap",
			title = "[[#{components.cron_task.task}]]",
			editor = {
					@DataTableColumnEditor(
							type = "text"
					)
			}
	)
	private String task = "";

	@DataTableColumn(
			renderFormat = "dt-format-text-wrap",
			title = "[[#{components.cron_task.param}]]",
			editor = {
					@DataTableColumnEditor(
							type = "text",
							attr = @DataTableColumnEditorAttr(key = "data-dt-field-hr", value = "after")
					)
			}
	)
	private String params = "";

	@DataTableColumn(
			renderFormat = "dt-format-text-wrap",
			title = "[[#{components.cron_task.year}]]",
			editor = {
					@DataTableColumnEditor(
							type = "text"
					)
			}
	)
	private String years = "*";

	@DataTableColumn(
			renderFormat = "dt-format-text-wrap",
			title = "[[#{components.cron_task.day_in_month}]]",
			editor = {
					@DataTableColumnEditor(
							type = "text"
					)
			}
	)
	private String daysOfMonth = "*";

	@DataTableColumn(
			renderFormat = "dt-format-text-wrap",
			title = "[[#{components.cron_task.day_in_week}]]",
			editor = {
					@DataTableColumnEditor(
							type = "text"
					)
			}
	)
	private String daysOfWeek = "*";

	@DataTableColumn(
			renderFormat = "dt-format-text-wrap",
			title = "[[#{components.cron_task.month}]]",
			editor = {
					@DataTableColumnEditor(
							type = "text"
					)
			}
	)
	private String months = "*";

	@DataTableColumn(
			renderFormat = "dt-format-text-wrap",
			title = "[[#{components.cron_task.hour}]]",
			editor = {
					@DataTableColumnEditor(
							type = "text"
					)
			}
	)
	private String hours = "*";

	@DataTableColumn(
			renderFormat = "dt-format-text-wrap",
			title = "[[#{components.cron_task.minute}]]",
			editor = {
					@DataTableColumnEditor(
							type = "text"
					)
			}
	)
	private String minutes = "0";

	@DataTableColumn(
			renderFormat = "dt-format-text-wrap",
			title = "[[#{components.cron_task.second}]]",
			editor = {
					@DataTableColumnEditor(
							type = "text",
							attr = @DataTableColumnEditorAttr(key = "data-dt-field-hr", value = "after")
					)
			}
	)
	private String seconds = "0";

	@DataTableColumn(
			renderFormat = "dt-format-boolean-true",
			title = "[[#{components.cron_task.after_start}]]",
			editor = {
					@DataTableColumnEditor(
							type = "checkbox"
					)
			}
	)
	private boolean runAtStartup = false;

	@DataTableColumn(
			renderFormat = "dt-format-boolean-true",
			title = "[[#{components.cron_task.allow}]]",
			editor = {
					@DataTableColumnEditor(
							type = "checkbox"
					)
			}
	)
	private boolean enableTask = true;

	@DataTableColumn(
			renderFormat = "dt-format-boolean-true",
			title = "[[#{components.cron_task.audit}]]",
			editor = {
					@DataTableColumnEditor(
							type = "checkbox"
					)
			}
	)
	private boolean audit = true;
	private boolean businessDays = false;

	@DataTableColumn(inputType = DataTableColumnType.TEXT, title = "[[#{admin.crontab.cluster_node}]]", editor = {
		@DataTableColumnEditor(
			attr = {
				@DataTableColumnEditorAttr(key = "data-ac-url", value = "/admin/rest/settings/cronjob/nodes"),
				@DataTableColumnEditorAttr(key = "data-ac-min-length", value = "1"),
				@DataTableColumnEditorAttr(key = "data-ac-select", value = "true")
			}
		)
	})
	private String clusterNode = "all";

	public CronTask() {
		// empty constructor
	}

	public String receiveCronPattern() {
		String dayOfWeek = this.daysOfWeek;
		/* jeeff: businessDays uz nepouzivame (GUI nepodporuje)
		if ("*".equals(dayOfWeek) && businessDays)
			dayOfWeek = "1-5";
		*/

		StringBuilder cronPattern = new StringBuilder();
		cronPattern.append(seconds).append(' ').
				append(minutes).append(' ').
				append(hours).append(' ').
				append(daysOfMonth).append(' ').
				append(months).append(' ').
				append(dayOfWeek).append(' ').
				append(years);
		return cronPattern.toString();
	}

	public Class<?> receiveClazz() throws ClassNotFoundException {
		return Class.forName(task);
	}

	public String[] receiveArgs() {
		if (isEmpty(params))
			return new String[]{};
		return params.split("\\|");
	}

	public String getTaskName() {
		return taskName;
	}

	public void setTaskName(String taskName) {
		this.taskName = taskName;
	}

	public String getSeconds() {
		return seconds;
	}

	public void setSeconds(String seconds) {
		this.seconds = seconds;
	}

	public String getMinutes() {
		return minutes;
	}

	public void setMinutes(String minutes) {
		this.minutes = minutes;
	}

	public String getHours() {
		return hours;
	}

	public void setHours(String hours) {
		this.hours = hours;
	}

	public String getMonths() {
		return months;
	}

	public void setMonths(String months) {
		this.months = months;
	}

	public String getYears() {
		return years;
	}

	public void setYears(String years) {
		this.years = years;
	}

	public String getDaysOfMonth() {
		return daysOfMonth;
	}

	public void setDaysOfMonth(String daysOfMonth) {
		this.daysOfMonth = daysOfMonth;
	}

	public String getDaysOfWeek() {
		return daysOfWeek;
	}

	public void setDaysOfWeek(String daysOfWeek) {
		this.daysOfWeek = daysOfWeek;
	}

	public String getTask() {
		return task;
	}

	public void setTask(String task) {
		this.task = task;
	}

	public String getParams() {
		return params;
	}

	public void setParams(String params) {
		this.params = params == null ? "" : params;
	}

	public boolean isBusinessDays() {
		return businessDays;
	}

	public void setBusinessDays(boolean businessDays) {
		this.businessDays = businessDays;
	}

	public String getClusterNode() {
		return clusterNode;
	}

	public void setClusterNode(String clusterNode) {
		this.clusterNode = clusterNode;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@Override
	public String toString() {
		return String.format("%s that runs every %s, audit task: %b", getTask(), receiveCronPattern(), getAudit());
	}

	public void setAudit(boolean log) {
		this.audit = log;
	}

	public boolean getAudit() {
		return audit;
	}

	public boolean isRunAtStartup() {
		return runAtStartup;
	}

	public void setRunAtStartup(boolean runAtStartup) {
		this.runAtStartup = runAtStartup;
	}

	public boolean isEnableTask() {
		return enableTask;
	}

	public void setEnableTask(boolean enableTask) {
		this.enableTask = enableTask;
	}

}