package org.openedit.events; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import com.openedit.OpenEditException; import com.openedit.users.User; public class BaseTask extends PropertyContainer { protected User fieldUser; protected String fieldId; protected String fieldName; protected String fieldWorkflowID; protected int fieldActionIndex = 0; protected List fieldActions; protected boolean fieldAsleep; protected long fieldExpirationTime; protected Date fieldLastRun; protected String fieldLastOutput; public BaseTask() { } public long getExpirationTime() { return fieldExpirationTime; } public void setExpirationTime(long inExpirationTime) { fieldExpirationTime = inExpirationTime; } public List getActions() { if (fieldActions == null) { fieldActions = new ArrayList(); } return fieldActions; } public Action getAction(int inIndex) { if (inIndex < getActions().size()) { return (Action)getActions().get(inIndex); } return null; } public User getUser() { return fieldUser; } public void setUser(User inUser) { fieldUser = inUser; } public String getId() { return fieldId; } public void setId(String inId) { fieldId = inId; } public int getNumActions() { return getActions().size(); } public void reset() { setActionIndex(0); } public void fail() { setActionIndex(-1); } public boolean hasFailed() { return (getActionIndex() == -1); } public boolean isFinished() { return (getActionIndex() >= getNumActions()); } public Action getCurrentAction() { if (isFinished() || hasFailed()) { return null; } return getAction(getActionIndex()); } public void nextAction() { if (!hasFailed() && !isFinished()) { int newIndex = getActionIndex() + 1; setActionIndex(newIndex); } } public int getActionIndex() { return fieldActionIndex; } public void setActionIndex(int inStepIndex) { fieldActionIndex = inStepIndex; } public void executeCurrentAction() throws OpenEditException { wakeup(); Action action = getCurrentAction(); if( action != null) { setLastRun(new Date()); if( action.execute(this) ) { nextAction(); } else { sleep(); } } } public String getWorkflowID() { return fieldWorkflowID; } public void setWorkflowID(String inWorkflowID) { fieldWorkflowID = inWorkflowID; } public String getName() { return fieldName; } public void setName(String inName) { fieldName = inName; } public Iterator getPropertyNameIterator() { return getProperties().keySet().iterator(); } public String getProperty(String key) { return (String)getProperties().get(key); } public void setProperty(String key, String value) { getProperties().put(key, value); } public void clear() { getActions().clear(); } public void addAction( Action inAction ) { getActions().add(inAction); addPropertyChild(inAction); } public boolean isSleeping() { return fieldAsleep; } public void sleep() { fieldAsleep = true; } public void wakeup() { fieldAsleep = false; } public BaseTask copy() { BaseTask task = new BaseTask(); 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.fieldExpirationTime = fieldExpirationTime; return task; } public String getFormattedLastRun() { if( getLastRun() != null) { return DateFormat.getDateTimeInstance().format(getLastRun()); } return null; } public Date getLastRun() { return fieldLastRun; } public void setLastRun(Date inLastRun) { fieldLastRun = inLastRun; } public String getLastOutput() { return fieldLastOutput; } public void setLastOutput(String inLastOutput) { fieldLastOutput = inLastOutput; } }