1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.opencastproject.assetmanager.util;
22
23 import static org.opencastproject.assetmanager.api.fn.Enrichments.enrich;
24
25 import org.opencastproject.assetmanager.api.AssetManager;
26 import org.opencastproject.assetmanager.api.Snapshot;
27 import org.opencastproject.assetmanager.api.query.AQueryBuilder;
28 import org.opencastproject.mediapackage.MediaPackage;
29 import org.opencastproject.security.api.UnauthorizedException;
30 import org.opencastproject.workflow.api.ConfiguredWorkflow;
31 import org.opencastproject.workflow.api.WorkflowDatabaseException;
32 import org.opencastproject.workflow.api.WorkflowInstance;
33 import org.opencastproject.workflow.api.WorkflowParsingException;
34 import org.opencastproject.workflow.api.WorkflowService;
35
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38
39 import java.util.ArrayList;
40 import java.util.List;
41 import java.util.Optional;
42
43
44
45
46
47 public class Workflows {
48
49 private static final Logger logger = LoggerFactory.getLogger(Workflows.class);
50
51 private final AssetManager am;
52 private final WorkflowService wfs;
53
54 public Workflows(AssetManager am, WorkflowService wfs) {
55 this.am = am;
56 this.wfs = wfs;
57 }
58
59
60
61
62 public List<WorkflowInstance> applyWorkflowToLatestVersion(Iterable<String> mpIds, ConfiguredWorkflow wf) {
63 List<WorkflowInstance> result = new ArrayList<>();
64
65 for (String mpId : mpIds) {
66 List<Snapshot> snapshots = findLatestSnapshots(mpId);
67 for (Snapshot snapshot : snapshots) {
68 MediaPackage mp = snapshot.getMediaPackage();
69 Optional<WorkflowInstance> optWorkflow = applyWorkflow(wf, mp);
70 optWorkflow.ifPresent(result::add);
71 }
72 }
73
74 return result;
75 }
76
77
78
79
80
81 private Optional<WorkflowInstance> applyWorkflow(ConfiguredWorkflow wf, MediaPackage mp) {
82 try {
83 WorkflowInstance instance = wfs.start(wf.getWorkflowDefinition(), mp, wf.getParameters());
84 return Optional.of(instance);
85 } catch (WorkflowDatabaseException | WorkflowParsingException | UnauthorizedException e) {
86 logger.error("Cannot start workflow on media package {}", mp.getIdentifier(), e);
87 return Optional.empty();
88 }
89 }
90
91 private List<Snapshot> findLatestSnapshots(String mpId) {
92 AQueryBuilder q = am.createQuery();
93 Iterable<Snapshot> snapshots = enrich(q.select(q.snapshot())
94 .where(q.mediaPackageId(mpId).and(q.version().isLatest())).run())
95 .getSnapshots();
96
97 List<Snapshot> result = new ArrayList<>();
98 for (Snapshot snapshot : snapshots) {
99 result.add(snapshot);
100 }
101 return result;
102 }
103 }