summaryrefslogblamecommitdiffstats
path: root/api/src/main/java/org/openslx/taskmanager/api/TaskStatus.java
blob: 137c7da67534f7331ebce46e27bdbdb56d7270f0 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
















                                                                                                   


                                




                                    
                           




                                                                                          
                                                 


                                                                      
                                            























                                                                                                               
                                                                                                           




















                                                                                                         




                                                                                                        


















































                                                                          
package org.openslx.taskmanager.api;

/**
 * This is what is returned on a status request.
 * To return custom data for your task, call {@link AbstractTask#setStatusObject(Object)} from your
 * Task.
 * This class is serialized entirely, not using the Exposed annotation.
 */
public final class TaskStatus
{

	public enum StatusCode
	{
		TASK_WAITING,
		TASK_PROCESSING,
		TASK_FINISHED,
		TASK_ERROR,
		TASK_CANCELLING,
		TASK_CANCELLED,
		NOT_CANCELLABLE,
		NO_SUCH_INSTANCE,
		NO_SUCH_TASK,
		NO_SUCH_CONSTRUCTOR,
		DUPLICATE_ID,
		PARENT_FAILED,
		JSON_ERROR,
	}

	/**
	 * Overall status of the task. Only set by base methods of the AbstractTask class.
	 */
	protected volatile StatusCode statusCode;
	/**
	 * Custom data a task might want to return on status requests.
	 */
	private volatile Object data = null;

	@SuppressWarnings( "unused" )
	private final String id;

	/*
	 * Static members
	 */

	/**
	 * Create a single "duplicate id" status we return if trying to launch a task with an id already
	 * in use.
	 */
	public static final TaskStatus ts_duplicateId = new TaskStatus( StatusCode.DUPLICATE_ID );
	/**
	 * Create a single "no such constructor" status we return if a task could be found, but not
	 * instantiated.
	 */
	public static final TaskStatus ts_noSuchConstructor = new TaskStatus( StatusCode.NO_SUCH_CONSTRUCTOR );
	/**
	 * Create a single "no such task" status we return if a task should be invoked that
	 * doesn't actually exist.
	 */
	public static final TaskStatus ts_noSuchTask = new TaskStatus( StatusCode.NO_SUCH_TASK );
	/**
	 * Create a single "no such instance" status we return if an action on a task instance is requested
	 * that doesn't actually exist.
	 */
	public static final TaskStatus ts_noSuchInstance = new TaskStatus( StatusCode.NO_SUCH_INSTANCE );
	/**
	 * Create a single "parent failed" status we return as status for a task which depends on another
	 * task, and that other task failed to execute, or failed during execution.
	 */
	public static final TaskStatus ts_parentFailed = new TaskStatus( StatusCode.PARENT_FAILED );
	/**
	 * Create a single "task waiting" status we return as status for a task that is waiting for
	 * execution.
	 */
	public static final TaskStatus ts_waiting = new TaskStatus( StatusCode.TASK_WAITING );
	/**
	 * Create a single "task error" status we can use everywhere.
	 */
	public static final TaskStatus ts_error = new TaskStatus( StatusCode.TASK_ERROR );
	/**
	 * Create a single "json error" status we can use everywhere.
	 */
	public static final TaskStatus ts_jsonError = new TaskStatus( StatusCode.JSON_ERROR );
	
	/**
	 * Create a single "not cancellable" status we can use everywhere.
	 */
	public static final TaskStatus ts_notCancellable = new TaskStatus( StatusCode.NOT_CANCELLABLE );

	/**
	 * Create new TaskStatus with given initial status code
	 * and id.
	 * 
	 * @param status The status code to initialize the TaskStatus with
	 * @param id id of task this status belongs to
	 */
	public TaskStatus( final StatusCode status, final String id )
	{
		this.statusCode = status;
		this.id = id;
	}

	/**
	 * Create new TaskStatus with given initial status code.
	 * 
	 * @param status The status code to initialize the TaskStatus with
	 */
	public TaskStatus( final StatusCode status )
	{
		this( status, null );
	}

	/**
	 * Get the status code of this TaskStatus
	 * 
	 * @return
	 */
	public final StatusCode getStatusCode()
	{
		return this.statusCode;
	}

	/**
	 * Set the custom status data.
	 * 
	 * @param obj custom status object
	 */
	protected void setStatusObject( Object obj )
	{
		this.data = obj;
	}
	
	public String getStatusObjectClassName()
	{
		if ( this.data == null ) return "(null)";
		return this.data.getClass().getSimpleName();
	}

}