summaryrefslogtreecommitdiffstats
path: root/api/src/main/java/org/openslx/taskmanager/api/TaskStatus.java
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/main/java/org/openslx/taskmanager/api/TaskStatus.java')
-rw-r--r--api/src/main/java/org/openslx/taskmanager/api/TaskStatus.java130
1 files changed, 130 insertions, 0 deletions
diff --git a/api/src/main/java/org/openslx/taskmanager/api/TaskStatus.java b/api/src/main/java/org/openslx/taskmanager/api/TaskStatus.java
new file mode 100644
index 0000000..f01ccc4
--- /dev/null
+++ b/api/src/main/java/org/openslx/taskmanager/api/TaskStatus.java
@@ -0,0 +1,130 @@
+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,
+ 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 StatusCode statusCode;
+ /**
+ * Custom data a task might want to return on status requests.
+ */
+ private 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 task" 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 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();
+ }
+
+}