View difference between Paste ID: 4KLyC68C and XFNmu4sR
SHOW: | | - or go back to the newest paste.
1
case class JobResolved(jobId: Int,
2
                       jobType: JobTypeResolved,
3
                       fireTime: DateTime,
4
                       tempFiles: Seq[String],
5
                       status: Status,
6-
                       retry: Int)
6+
                       retry: Int)
7
8
9
  def selectAllWithDeps(): scala.List[model.JobTypeDeps] = {
10
    db.withSession {
11
      implicit session: Session =>
12
        session.withTransaction {
13
          val query = for {
14
            jobType <- schema.JobTypes if jobType.isDeleted === ACTIVE.value
15
            template <- schema.JobTemplates if template.jtmId === jobType.jtmId  && template.isDeleted === ACTIVE.value
16
            source <- schema.DataSources if source.srcId === template.srcId && source.isDeleted === ACTIVE.value
17
            dest <- schema.DataDestinations if dest.destId === jobType.destId && dest.isDeleted === ACTIVE.value
18
          } yield (jobType, template, source, dest)
19
          val f = (model.JobTypeDeps.apply _).tupled
20
          query.list.map(t => f(t))
21
        }
22
    }
23
  }
24
25
case class JobTypeDeps(jobType: JobType,
26
                       jobTemplate: JobTemplate,
27
                       source: DataSource,
28
                       destination: DataDestination)
29
30
  def resolve(deps: JobTypeDeps): Try[JobTypeResolved] = {
31
      resolve(deps.jobType, deps.jobTemplate, deps.source, deps.destination)
32
  }
33
34
  /**
35
   * The function merges job template and job type and 
36
   * adds source and destination to the resolved object
37
   */
38
  def resolve(jobType: JobType,
39
              jobTemplate: JobTemplate,
40
              source: DataSource,
41
              destination: DataDestination): Try[JobTypeResolved] = {
42
    // this mutable object, that holds all errors after the processing
43
    val errors = new mutable.StringBuilder()
44
    // ...
45
    // inner functions related to overriding logic
46
    // ...
47
  
48
    val src = if (jobTemplate.srcId == get(source.srcId, "DataSource.srcId")) {
49
      source
50
    } else {
51
      errors.append(s"JobTemplate.srcId refers to wrong 'source'.\n")
52
      null: DataSource
53
    }
54
55
    val dest = if (jobType.destId == get(destination.destId, "DataDestination.destId")) {
56
      destination
57
    } else {
58
      errors.append(s"JobType.destId refers to wrong 'destination'.\n")
59
      null: DataDestination
60
    }
61
    
62
    val result = new JobTypeResolved(
63
      jtyId = get(jobType.jtyId, "JobType.jtyId"),
64
      name = jobType.name.getOrElse(jobTemplate.name),
65
      source = src,
66
      destination = dest,
67
      ...
68
    )
69
    if (errors.isEmpty) Success(result)
70
    else Failure(new NoSuchElementException(errors.toString()))
71
  }