package org.openedit.events; import java.util.Iterator; public class ScheduledTask extends BaseTask { protected String fieldFormattedPeriod; protected long fieldDelay = 0; protected long fieldPeriod = 0; protected String fieldFormattedDelay; protected boolean fieldEnabled = true; public ScheduledTask() { } public ScheduledTask( long inDelay, long inPeriod) { setDelay(inDelay); setPeriod(inPeriod); } public ScheduledTask(String inDelay, String inPeriod) { setDefaults(); if (inDelay != null && inDelay.length() > 0) { setDelay(inDelay); } if (inPeriod != null && inPeriod.length() > 0) { setPeriod(inPeriod); } } public long getPeriod() { return fieldPeriod; } public void setPeriod(long inPeriod) { fieldPeriod = inPeriod; } public void setPeriod(String inPeriod) { fieldPeriod = parse(inPeriod); fieldFormattedPeriod = inPeriod; } public String getFormattedPeriod() { return fieldFormattedPeriod; } private void setDefaults() { setPeriod(12 * 60 * 60 * 1000); //defaults to runing every 12 hours setDelay(60000L); //defaults to one minute } public long getDelay() { return fieldDelay; } public String getFormattedDelay() { return fieldFormattedDelay; } public void setDelay(long inDelay) { fieldDelay = inDelay; } public void setDelay(String inDelay) { fieldDelay = parse(inDelay); fieldFormattedDelay = inDelay; } /** * @param inPeriodString * @return */ private long parse(String inPeriodString) { if (inPeriodString == null) { return 0; } inPeriodString = inPeriodString.trim().toLowerCase(); if ( inPeriodString.endsWith("d")) { long days = Long.parseLong(inPeriodString.substring(0,inPeriodString.length()-1)); long period = days * 24 * 60L * 60L * 1000L; return period; } else if ( inPeriodString.endsWith("h")) { long hours = Long.parseLong(inPeriodString.substring(0,inPeriodString.length()-1)); long period = hours * 60L * 60L * 1000L; return period; } else if ( inPeriodString.endsWith("m")) { long min = Long.parseLong(inPeriodString.substring(0,inPeriodString.length()-1)); long period = min * 60L * 1000L; return period; } else if ( inPeriodString.endsWith("s")) { long sec = Long.parseLong(inPeriodString.substring(0,inPeriodString.length()-1)); long period = sec * 1000L; return period; } else { long period = Long.parseLong( inPeriodString ); return period; } } public void putProperty(String key, String value) { if (key.equals("id")) { setId(value); } else if (key.equals("username")) { //This is3 handled in XMLSchedulerArchive.loadFromFile() } else if (key.equals("name")) { setName(value); } else if (key.equals("path")) { //THis is handled in XMLSchedulerArchive.loadFromFile() } else if(key.equals("startdelay")) { setDelay(value); } else if (key.equals("period")) { setPeriod(value); } else if (key.equals("enabled")) { setEnabled(Boolean.parseBoolean(value)); } else { super.putProperty(key, value); } } public boolean isEnabled() { return fieldEnabled; } public void setEnabled(boolean inEnabled) { fieldEnabled = inEnabled; } public BaseTask copy() { ScheduledTask task = new ScheduledTask(); task.fieldFormattedPeriod = fieldFormattedPeriod; task.fieldDelay = fieldDelay; task.fieldPeriod = fieldPeriod; task.fieldFormattedDelay = fieldFormattedDelay; task.fieldUser = fieldUser; task.fieldId = fieldId; task.fieldName = fieldName; task.fieldWorkflowID = fieldWorkflowID; task.fieldActionIndex = fieldActionIndex; task.fieldActions = fieldActions; for (Iterator i = getPropertyNameIterator(); i.hasNext();) { String propertyName = (String) i.next(); task.putProperty(propertyName, getProperty(propertyName)); } task.fieldAsleep = fieldAsleep; task.fieldEnabled = fieldEnabled; return task; } }