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.workflow.api;
23
24 import org.opencastproject.mediapackage.MediaPackage;
25
26 import org.apache.commons.lang3.builder.EqualsBuilder;
27 import org.apache.commons.lang3.builder.HashCodeBuilder;
28
29 import java.util.Collections;
30 import java.util.Date;
31 import java.util.List;
32 import java.util.Optional;
33 import java.util.Set;
34 import java.util.stream.Collectors;
35
36 import javax.xml.bind.annotation.XmlAccessType;
37 import javax.xml.bind.annotation.XmlAccessorType;
38 import javax.xml.bind.annotation.XmlAttribute;
39 import javax.xml.bind.annotation.XmlElement;
40 import javax.xml.bind.annotation.XmlElementWrapper;
41 import javax.xml.bind.annotation.XmlRootElement;
42 import javax.xml.bind.annotation.XmlType;
43
44
45 @XmlAccessorType(XmlAccessType.FIELD)
46 @XmlType(name = "workflow", namespace = "http://workflow.opencastproject.org")
47 @XmlRootElement(name = "workflow", namespace = "http://workflow.opencastproject.org")
48 public class JaxbWorkflowInstance {
49
50 @XmlAttribute()
51 private long id;
52
53 @XmlAttribute()
54 private WorkflowInstance.WorkflowState state;
55
56 @XmlElement(name = "template")
57 private String template;
58
59 @XmlElement(name = "title")
60 private String title;
61
62 @XmlElement(name = "description")
63 private String description;
64
65 @XmlElement(name = "creator-id", namespace = "http://org.opencastproject.security")
66 private String creatorName;
67
68 @XmlElement(name = "organization-id", namespace = "http://org.opencastproject.security")
69 private String organizationId;
70
71 @XmlElement
72 private Date dateCreated = null;
73
74 @XmlElement
75 private Date dateCompleted = null;
76
77 @XmlElement(name = "mediapackage", namespace = "http://mediapackage.opencastproject.org")
78 private MediaPackage mediaPackage;
79
80 @XmlElement(name = "operation")
81 @XmlElementWrapper(name = "operations")
82 protected List<JaxbWorkflowOperationInstance> operations;
83
84 @XmlElement(name = "configuration")
85 @XmlElementWrapper(name = "configurations")
86 protected Set<JaxbWorkflowConfiguration> configurations;
87
88 @XmlElement
89 protected String mediaPackageId;
90
91 @XmlElement
92 protected String seriesId;
93
94
95
96
97 public JaxbWorkflowInstance() {
98 }
99
100 public JaxbWorkflowInstance(WorkflowInstance workflow) {
101 this();
102 this.id = workflow.getId();
103 this.state = workflow.getState();
104 this.template = workflow.getTemplate();
105 this.title = workflow.getTitle();
106 this.description = workflow.getDescription();
107 this.creatorName = workflow.getCreatorName();
108 this.organizationId = workflow.getOrganizationId();
109 this.dateCreated = workflow.getDateCreated();
110 this.dateCompleted = workflow.getDateCompleted();
111 this.mediaPackage = workflow.getMediaPackage();
112 this.operations = workflow.getOperations()
113 .stream()
114 .map(JaxbWorkflowOperationInstance::new)
115 .collect(Collectors.toList());
116 this.configurations = workflow.getConfigurations().entrySet()
117 .stream()
118 .map(config -> new JaxbWorkflowConfiguration(config.getKey(), config.getValue()))
119 .collect(Collectors.toSet());
120
121 this.mediaPackageId = mediaPackage == null ? null : mediaPackage.getIdentifier().toString();
122 this.seriesId = mediaPackage == null ? null : mediaPackage.getSeries();
123 }
124
125 public WorkflowInstance toWorkflowInstance() {
126 WorkflowInstance wf = new WorkflowInstance(id, state, template, title, description, creatorName, organizationId,
127 dateCreated, dateCompleted, mediaPackage,
128 Optional.ofNullable(operations).orElseGet(Collections::emptyList)
129 .stream().map(JaxbWorkflowOperationInstance::toWorkflowOperationInstance)
130 .collect(Collectors.toList()),
131 Optional.ofNullable(configurations).orElseGet(Collections::emptySet)
132 .stream()
133 .collect(Collectors.toMap(JaxbWorkflowConfiguration::getKey, JaxbWorkflowConfiguration::getValue)),
134 mediaPackageId, seriesId);
135
136 wf.getOperations().stream().forEach(wo -> wo.setWorkflowInstance(wf));
137 return wf;
138 }
139
140 @Override
141 public boolean equals(Object o) {
142 if (this == o) {
143 return true;
144 }
145
146 if (o == null || getClass() != o.getClass()) {
147 return false;
148 }
149
150 JaxbWorkflowInstance jaxbWorkflow = (JaxbWorkflowInstance) o;
151
152 return new EqualsBuilder()
153 .append(id, jaxbWorkflow.id)
154 .append(state, jaxbWorkflow.state)
155 .append(template, jaxbWorkflow.template)
156 .append(title, jaxbWorkflow.title)
157 .append(description, jaxbWorkflow.description)
158 .append(creatorName, jaxbWorkflow.creatorName)
159 .append(organizationId, jaxbWorkflow.organizationId)
160 .append(dateCreated, jaxbWorkflow.dateCreated)
161 .append(dateCompleted, jaxbWorkflow.dateCompleted)
162 .append(mediaPackage, jaxbWorkflow.mediaPackage)
163 .append(operations, jaxbWorkflow.operations)
164 .append(configurations, jaxbWorkflow.configurations)
165 .append(mediaPackageId, jaxbWorkflow.mediaPackageId)
166 .append(seriesId, jaxbWorkflow.seriesId)
167 .isEquals();
168 }
169
170 @Override
171 public int hashCode() {
172 return new HashCodeBuilder(17, 37)
173 .append(id)
174 .append(state)
175 .append(template)
176 .append(title)
177 .append(description)
178 .append(creatorName)
179 .append(organizationId)
180 .append(dateCreated)
181 .append(dateCompleted)
182 .append(mediaPackage)
183 .append(operations)
184 .append(configurations)
185 .append(mediaPackageId)
186 .append(seriesId)
187 .toHashCode();
188 }
189 }