1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.opencastproject.job.api;
23
24 import static java.util.Collections.unmodifiableList;
25
26 import com.entwinemedia.fn.Fn;
27
28 import org.apache.commons.lang3.builder.EqualsBuilder;
29 import org.apache.commons.lang3.builder.HashCodeBuilder;
30
31 import java.net.URI;
32 import java.util.Date;
33 import java.util.List;
34
35 import javax.xml.bind.annotation.XmlAccessType;
36 import javax.xml.bind.annotation.XmlAccessorType;
37 import javax.xml.bind.annotation.XmlAttribute;
38 import javax.xml.bind.annotation.XmlElement;
39 import javax.xml.bind.annotation.XmlElementWrapper;
40 import javax.xml.bind.annotation.XmlRootElement;
41 import javax.xml.bind.annotation.XmlType;
42
43
44 @XmlAccessorType(XmlAccessType.FIELD)
45 @XmlType(name = "job", namespace = "http://job.opencastproject.org")
46 @XmlRootElement(name = "job", namespace = "http://job.opencastproject.org")
47 public class JaxbJob {
48
49 @XmlAttribute
50 private long id;
51
52 @XmlElement(name = "creator")
53 private String creator;
54
55 @XmlElement(name = "organization")
56 private String organization;
57
58 @XmlAttribute
59 private long version;
60
61 @XmlAttribute(name = "type")
62 private String jobType;
63
64 @XmlElement(name = "url")
65 private URI uri;
66
67 @XmlElement
68 private String operation;
69
70 @XmlElement(name = "arg")
71 @XmlElementWrapper(name = "args")
72 private List<String> arguments;
73
74 @XmlElement
75 private String createdHost;
76
77 @XmlElement
78 private String processingHost;
79
80 @XmlAttribute
81 private Job.Status status;
82
83 @XmlElement
84 private Date dateCreated;
85
86 @XmlElement
87 private Date dateStarted;
88
89 @XmlElement
90 private Date dateCompleted;
91
92 @XmlElement
93 private Long parentJobId;
94
95 @XmlElement
96 private Long rootJobId;
97
98 @XmlElement
99 private Long queueTime;
100
101 @XmlElement
102 private Long runTime;
103
104 @XmlElement
105 private String payload;
106
107 @XmlElement
108 private boolean dispatchable;
109
110 @XmlElement(name = "jobLoad")
111 private Float jobLoad;
112
113
114 public JaxbJob() {
115 }
116
117 public JaxbJob(Job job) {
118 this();
119 this.id = job.getId();
120 this.dateCompleted = job.getDateCompleted();
121 this.dateCreated = job.getDateCreated();
122 this.dateStarted = job.getDateStarted();
123 this.queueTime = job.getQueueTime();
124 this.runTime = job.getRunTime();
125 this.version = job.getVersion();
126 this.payload = job.getPayload();
127 this.processingHost = job.getProcessingHost();
128 this.createdHost = job.getCreatedHost();
129 this.id = job.getId();
130 this.jobType = job.getJobType();
131 this.operation = job.getOperation();
132 if (job.getArguments() != null)
133 this.arguments = unmodifiableList(job.getArguments());
134 this.status = job.getStatus();
135 this.parentJobId = job.getParentJobId();
136 this.rootJobId = job.getRootJobId();
137 this.dispatchable = job.isDispatchable();
138 this.uri = job.getUri();
139 this.creator = job.getCreator();
140 this.organization = job.getOrganization();
141 this.jobLoad = job.getJobLoad();
142 }
143
144 public Job toJob() {
145 return new JobImpl(id, creator, organization, version, jobType, operation, arguments, status, createdHost,
146 processingHost, dateCreated, dateStarted, dateCompleted, queueTime, runTime, payload, parentJobId,
147 rootJobId, dispatchable, uri, jobLoad);
148 }
149
150 public static Fn<Job, JaxbJob> fnFromJob() {
151 return new Fn<Job, JaxbJob>() {
152 @Override
153 public JaxbJob apply(Job job) {
154 return new JaxbJob(job);
155 }
156 };
157 }
158
159 @Override
160 public boolean equals(Object o) {
161 if (this == o)
162 return true;
163
164 if (o == null || getClass() != o.getClass())
165 return false;
166
167 JaxbJob jaxbJob = (JaxbJob) o;
168
169 return new EqualsBuilder().append(id, jaxbJob.id).append(version, jaxbJob.version)
170 .append(dispatchable, jaxbJob.dispatchable).append(creator, jaxbJob.creator)
171 .append(organization, jaxbJob.organization).append(jobType, jaxbJob.jobType).append(uri, jaxbJob.uri)
172 .append(operation, jaxbJob.operation).append(arguments, jaxbJob.arguments)
173 .append(createdHost, jaxbJob.createdHost).append(processingHost, jaxbJob.processingHost)
174 .append(status, jaxbJob.status).append(dateCreated, jaxbJob.dateCreated)
175 .append(dateStarted, jaxbJob.dateStarted).append(dateCompleted, jaxbJob.dateCompleted)
176 .append(parentJobId, jaxbJob.parentJobId).append(rootJobId, jaxbJob.rootJobId)
177 .append(queueTime, jaxbJob.queueTime).append(runTime, jaxbJob.runTime)
178 .append(payload, jaxbJob.payload).append(jobLoad, jaxbJob.jobLoad)
179 .isEquals();
180 }
181
182 @Override
183 public int hashCode() {
184 return new HashCodeBuilder(17, 37).append(id).append(creator).append(organization).append(version).append(jobType)
185 .append(uri).append(operation).append(arguments).append(createdHost).append(processingHost).append(status)
186 .append(dateCreated).append(dateStarted).append(dateCompleted).append(parentJobId).append(rootJobId)
187 .append(queueTime).append(runTime).append(payload).append(dispatchable).append(jobLoad)
188 .toHashCode();
189 }
190 }