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 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  /** 1:1 serialization of a {@link Job}. */
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   /** Default constructor needed by jaxb */
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 }