All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.atlassian.aws.swf.instances.scala Maven / Gradle / Ivy

There is a newer version: 8.0.3
Show newest version
package io.atlassian.aws.swf

import com.amazonaws.services.simpleworkflow.model.{ DecisionTask, ActivityTask, WorkflowExecution }

import scalaz.std.list._
import scala.collection.JavaConverters._

case class WorkflowInstance(workflowId: WorkflowId, runId: String)

object WorkflowInstance {
  def apply(w: WorkflowExecution): WorkflowInstance =
    WorkflowInstance(WorkflowId(w.getWorkflowId), w.getRunId)
}

case class ActivityInstance(activity: Activity, taskToken: TaskToken, id: String, input: Option[String], startedEventId: Long, workflow: WorkflowInstance)

object ActivityInstance {
  def unapply(a: ActivityTask): Option[ActivityInstance] =
    Option(a.getTaskToken) map { t =>
      ActivityInstance(Activity(a.getActivityType), TaskToken(t), a.getActivityId, Option(a.getInput), a.getStartedEventId, WorkflowInstance(a.getWorkflowExecution))
    }
}

case class DecisionInstance(taskToken: TaskToken, startedEventId: EventId, workflowInstance: WorkflowInstance, workflow: Workflow, previousStartedEventId: EventId, nextPageToken: Option[EventPageToken], events: List[WorkflowEvent])

object DecisionInstance {
  def unapply(d: DecisionTask): Option[DecisionInstance] =
    Option(d.getTaskToken) map { t =>
      // order list of events in ascending order
      val sortedEvents = d.getEvents.asScala.sortBy { _.getEventId }.map { WorkflowEvent.apply }
      val transformedList = sortedEvents.foldLeft(nil[WorkflowEvent]) { (acc, event) =>
        acc :+ WorkflowEvent(event, acc)
      }
      DecisionInstance(TaskToken(t), d.getStartedEventId, WorkflowInstance(d.getWorkflowExecution), Workflow(d.getWorkflowType), d.getPreviousStartedEventId,
        Option(d.getNextPageToken).map { EventPageToken.apply }, transformedList)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy