1 package com.atlassian.scheduler.core.impl;
2
3 import com.atlassian.scheduler.config.JobConfig;
4 import com.atlassian.scheduler.config.JobId;
5 import com.atlassian.scheduler.core.RunningJob;
6
7 import javax.annotation.Nonnull;
8 import javax.annotation.Nullable;
9 import javax.annotation.concurrent.ThreadSafe;
10 import java.util.Date;
11 import java.util.Objects;
12
13 import static com.atlassian.util.concurrent.Assertions.notNull;
14
15
16
17
18 @ThreadSafe
19 public final class RunningJobImpl implements RunningJob {
20 private final long startTime;
21 private final JobId jobId;
22 private final JobConfig jobConfig;
23
24 private volatile boolean cancelled;
25
26 public RunningJobImpl(final Date startTime, final JobId jobId,
27 final JobConfig jobConfig) {
28 this.startTime = notNull("startTime", startTime).getTime();
29 this.jobId = notNull("jobId", jobId);
30 this.jobConfig = notNull("jobConfig", jobConfig);
31 }
32
33
34 @Nonnull
35 @Override
36 public Date getStartTime() {
37 return new Date(startTime);
38 }
39
40 @Nonnull
41 @Override
42 public JobId getJobId() {
43 return jobId;
44 }
45
46 @Nonnull
47 @Override
48 public JobConfig getJobConfig() {
49 return jobConfig;
50 }
51
52 @Override
53 public boolean isCancellationRequested() {
54 return cancelled;
55 }
56
57 @Override
58 public void cancel() {
59 cancelled = true;
60 }
61
62 @Override
63 public boolean equals(@Nullable final Object o) {
64 if (this == o) {
65 return true;
66 }
67 if (o == null || getClass() != o.getClass()) {
68 return false;
69 }
70
71 final RunningJobImpl other = (RunningJobImpl) o;
72 return startTime == other.startTime
73 && jobId.equals(other.jobId)
74 && jobConfig.equals(other.jobConfig);
75 }
76
77 @Override
78 public int hashCode() {
79 return Objects.hash(startTime, jobId, jobConfig);
80 }
81
82 @Override
83 public String toString() {
84 return "RunningJobImpl[startTime=" + startTime +
85 ",jobId=" + jobId +
86 ",jobConfig=" + jobConfig +
87 ",cancelled=" + cancelled +
88 ']';
89 }
90 }