View Javadoc
1   /*
2    * Licensed to The Apereo Foundation under one or more contributor license
3    * agreements. See the NOTICE file distributed with this work for additional
4    * information regarding copyright ownership.
5    *
6    *
7    * The Apereo Foundation licenses this file to you under the Educational
8    * Community License, Version 2.0 (the "License"); you may not use this file
9    * except in compliance with the License. You may obtain a copy of the License
10   * at:
11   *
12   *   http://opensource.org/licenses/ecl2.txt
13   *
14   * Unless required by applicable law or agreed to in writing, software
15   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
17   * License for the specific language governing permissions and limitations under
18   * the License.
19   *
20   */
21  
22  package org.opencastproject.job.api;
23  
24  import static java.util.Collections.unmodifiableList;
25  
26  import org.apache.commons.lang3.builder.EqualsBuilder;
27  import org.apache.commons.lang3.builder.HashCodeBuilder;
28  
29  import java.net.URI;
30  import java.util.Date;
31  import java.util.List;
32  
33  import javax.xml.bind.annotation.XmlAccessType;
34  import javax.xml.bind.annotation.XmlAccessorType;
35  import javax.xml.bind.annotation.XmlAttribute;
36  import javax.xml.bind.annotation.XmlElement;
37  import javax.xml.bind.annotation.XmlElementWrapper;
38  import javax.xml.bind.annotation.XmlRootElement;
39  import javax.xml.bind.annotation.XmlType;
40  
41  /** 1:1 serialization of a {@link Job}. */
42  @XmlAccessorType(XmlAccessType.FIELD)
43  @XmlType(name = "job", namespace = "http://job.opencastproject.org")
44  @XmlRootElement(name = "job", namespace = "http://job.opencastproject.org")
45  public class JaxbJob {
46  
47    @XmlAttribute
48    private long id;
49  
50    @XmlElement(name = "creator")
51    private String creator;
52  
53    @XmlElement(name = "organization")
54    private String organization;
55  
56    @XmlAttribute
57    private long version;
58  
59    @XmlAttribute(name = "type")
60    private String jobType;
61  
62    @XmlElement(name = "url")
63    private URI uri;
64  
65    @XmlElement
66    private String operation;
67  
68    @XmlElement(name = "arg")
69    @XmlElementWrapper(name = "args")
70    private List<String> arguments;
71  
72    @XmlElement
73    private String createdHost;
74  
75    @XmlElement
76    private String processingHost;
77  
78    @XmlAttribute
79    private Job.Status status;
80  
81    @XmlElement
82    private Date dateCreated;
83  
84    @XmlElement
85    private Date dateStarted;
86  
87    @XmlElement
88    private Date dateCompleted;
89  
90    @XmlElement
91    private Long parentJobId;
92  
93    @XmlElement
94    private Long rootJobId;
95  
96    @XmlElement
97    private Long queueTime;
98  
99    @XmlElement
100   private Long runTime;
101 
102   @XmlElement
103   private String payload;
104 
105   @XmlElement
106   private boolean dispatchable;
107 
108   @XmlElement(name = "jobLoad")
109   private Float jobLoad;
110 
111   /** Default constructor needed by jaxb */
112   public JaxbJob() {
113   }
114 
115   public JaxbJob(Job job) {
116     this();
117     this.id = job.getId();
118     this.dateCompleted = job.getDateCompleted();
119     this.dateCreated = job.getDateCreated();
120     this.dateStarted = job.getDateStarted();
121     this.queueTime = job.getQueueTime();
122     this.runTime = job.getRunTime();
123     this.version = job.getVersion();
124     this.payload = job.getPayload();
125     this.processingHost = job.getProcessingHost();
126     this.createdHost = job.getCreatedHost();
127     this.id = job.getId();
128     this.jobType = job.getJobType();
129     this.operation = job.getOperation();
130     if (job.getArguments() != null)
131       this.arguments = unmodifiableList(job.getArguments());
132     this.status = job.getStatus();
133     this.parentJobId = job.getParentJobId();
134     this.rootJobId = job.getRootJobId();
135     this.dispatchable = job.isDispatchable();
136     this.uri = job.getUri();
137     this.creator = job.getCreator();
138     this.organization = job.getOrganization();
139     this.jobLoad = job.getJobLoad();
140   }
141 
142   public Job toJob() {
143     return new JobImpl(id, creator, organization, version, jobType, operation, arguments, status, createdHost,
144             processingHost, dateCreated, dateStarted, dateCompleted, queueTime, runTime, payload, parentJobId,
145             rootJobId, dispatchable, uri, jobLoad);
146   }
147 
148   @Override
149   public boolean equals(Object o) {
150     if (this == o)
151       return true;
152 
153     if (o == null || getClass() != o.getClass())
154       return false;
155 
156     JaxbJob jaxbJob = (JaxbJob) o;
157 
158     return new EqualsBuilder().append(id, jaxbJob.id).append(version, jaxbJob.version)
159             .append(dispatchable, jaxbJob.dispatchable).append(creator, jaxbJob.creator)
160             .append(organization, jaxbJob.organization).append(jobType, jaxbJob.jobType).append(uri, jaxbJob.uri)
161             .append(operation, jaxbJob.operation).append(arguments, jaxbJob.arguments)
162             .append(createdHost, jaxbJob.createdHost).append(processingHost, jaxbJob.processingHost)
163             .append(status, jaxbJob.status).append(dateCreated, jaxbJob.dateCreated)
164             .append(dateStarted, jaxbJob.dateStarted).append(dateCompleted, jaxbJob.dateCompleted)
165             .append(parentJobId, jaxbJob.parentJobId).append(rootJobId, jaxbJob.rootJobId)
166             .append(queueTime, jaxbJob.queueTime).append(runTime, jaxbJob.runTime)
167             .append(payload, jaxbJob.payload).append(jobLoad, jaxbJob.jobLoad)
168             .isEquals();
169   }
170 
171   @Override
172   public int hashCode() {
173     return new HashCodeBuilder(17, 37).append(id).append(creator).append(organization).append(version).append(jobType)
174             .append(uri).append(operation).append(arguments).append(createdHost).append(processingHost).append(status)
175             .append(dateCreated).append(dateStarted).append(dateCompleted).append(parentJobId).append(rootJobId)
176             .append(queueTime).append(runTime).append(payload).append(dispatchable).append(jobLoad)
177             .toHashCode();
178   }
179 }