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 org.opencastproject.assetmanager.api.AssetManager;
24 import org.opencastproject.assetmanager.api.Snapshot;
25 import org.opencastproject.mediapackage.MediaPackage;
26 import org.opencastproject.security.api.UnauthorizedException;
27 import org.opencastproject.workflow.api.ConfiguredWorkflow;
28 import org.opencastproject.workflow.api.WorkflowDatabaseException;
29 import org.opencastproject.workflow.api.WorkflowInstance;
30 import org.opencastproject.workflow.api.WorkflowParsingException;
31 import org.opencastproject.workflow.api.WorkflowService;
32
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36 import java.util.ArrayList;
37 import java.util.List;
38 import java.util.Optional;
39
40
41
42
43
44 public class Workflows {
45
46 private static final Logger logger = LoggerFactory.getLogger(Workflows.class);
47
48 private final AssetManager am;
49 private final WorkflowService wfs;
50
51 public Workflows(AssetManager am, WorkflowService wfs) {
52 this.am = am;
53 this.wfs = wfs;
54 }
55
56
57
58
59 public List<WorkflowInstance> applyWorkflowToLatestVersion(Iterable<String> mpIds, ConfiguredWorkflow wf) {
60 List<WorkflowInstance> result = new ArrayList<>();
61
62 for (String mpId : mpIds) {
63 List<Snapshot> snapshots = findLatestSnapshots(mpId);
64 for (Snapshot snapshot : snapshots) {
65 MediaPackage mp = snapshot.getMediaPackage();
66 Optional<WorkflowInstance> optWorkflow = applyWorkflow(wf, mp);
67 optWorkflow.ifPresent(result::add);
68 }
69 }
70
71 return result;
72 }
73
74
75
76
77
78 private Optional<WorkflowInstance> applyWorkflow(ConfiguredWorkflow wf, MediaPackage mp) {
79 try {
80 WorkflowInstance instance = wfs.start(wf.getWorkflowDefinition(), mp, wf.getParameters());
81 return Optional.of(instance);
82 } catch (WorkflowDatabaseException | WorkflowParsingException | UnauthorizedException e) {
83 logger.error("Cannot start workflow on media package {}", mp.getIdentifier(), e);
84 return Optional.empty();
85 }
86 }
87
88 private List<Snapshot> findLatestSnapshots(String mpId) {
89 List<Snapshot> list = new ArrayList<>();
90 Optional<Snapshot> snapshot = am.getLatestSnapshot(mpId);
91 if (snapshot.isPresent()) {
92 list.add(snapshot.get());
93 }
94 return list;
95 }
96 }