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.AssetManager.DEFAULT_OWNER;
24 import static org.opencastproject.mediapackage.MediaPackageElements.XACML_POLICY_EPISODE;
25 import static org.opencastproject.mediapackage.MediaPackageElements.XACML_POLICY_SERIES;
26 import static org.opencastproject.systems.OpencastConstants.WORKFLOW_PROPERTIES_NAMESPACE;
27
28 import org.opencastproject.assetmanager.api.AssetManager;
29 import org.opencastproject.assetmanager.api.Property;
30 import org.opencastproject.assetmanager.api.PropertyId;
31 import org.opencastproject.assetmanager.api.Value;
32 import org.opencastproject.mediapackage.Attachment;
33 import org.opencastproject.mediapackage.Catalog;
34 import org.opencastproject.mediapackage.MediaPackage;
35 import org.opencastproject.mediapackage.MediaPackageElement;
36 import org.opencastproject.mediapackage.MediaPackageElementFlavor;
37
38 import java.util.Arrays;
39 import java.util.Collection;
40 import java.util.Collections;
41 import java.util.HashMap;
42 import java.util.HashSet;
43 import java.util.List;
44 import java.util.Map;
45 import java.util.Set;
46 import java.util.stream.Collectors;
47
48
49
50
51
52 public final class WorkflowPropertiesUtil {
53 private static final Set<MediaPackageElementFlavor> SECURITY_FLAVORS = new HashSet<>(
54 Arrays.asList(XACML_POLICY_EPISODE, XACML_POLICY_SERIES));
55
56 private WorkflowPropertiesUtil() {
57 }
58
59
60
61
62
63
64
65 public static Map<String, Map<String, String>> getLatestWorkflowPropertiesForEvents(final AssetManager assetManager,
66 final Collection<String> eventIds) {
67 final Map<String, Map<String, String>> workflowProperties = new HashMap<>(eventIds.size());
68 for (String eventId : eventIds) {
69 final List<Property> properties = assetManager.selectProperties(eventId, WORKFLOW_PROPERTIES_NAMESPACE);
70 final Map<String, String> eventMap = new HashMap<>(properties.size());
71 for (final Property property : properties) {
72 eventMap.put(property.getId().getName(), property.getValue().get(Value.STRING));
73 }
74 workflowProperties.put(eventId, eventMap);
75 }
76 return workflowProperties;
77 }
78
79
80
81
82
83
84
85 public static Map<String, String> getLatestWorkflowProperties(final AssetManager assetManager,
86 final String mediaPackageId) {
87 return assetManager.selectProperties(mediaPackageId, WORKFLOW_PROPERTIES_NAMESPACE)
88 .parallelStream()
89 .collect(Collectors.toMap(
90 p -> p.getId().getName(),
91 p -> p.getValue().get(Value.STRING)));
92 }
93
94
95
96
97
98
99
100 public static void storeProperties(final AssetManager assetManager, final MediaPackage mediaPackage,
101 final Map<String, String> properties) {
102
103
104
105
106 if (!assetManager.snapshotExists(mediaPackage.getIdentifier().toString())) {
107 MediaPackage simplifiedMediaPackage = (MediaPackage) mediaPackage.clone();
108 for (MediaPackageElement element : mediaPackage.getElements()) {
109 if (element instanceof Catalog) {
110 continue;
111 }
112 if (element instanceof Attachment && SECURITY_FLAVORS.contains(element.getFlavor())) {
113 continue;
114 }
115 simplifiedMediaPackage.remove(element);
116 }
117
118 assetManager.takeSnapshot(DEFAULT_OWNER, simplifiedMediaPackage);
119 }
120
121
122 for (final Map.Entry<String, String> entry : properties.entrySet()) {
123 final PropertyId propertyId = PropertyId
124 .mk(mediaPackage.getIdentifier().toString(), WORKFLOW_PROPERTIES_NAMESPACE, entry.getKey());
125 final Property property = Property.mk(propertyId, Value.mk(entry.getValue()));
126 assetManager.setProperty(property);
127 }
128 }
129
130 public static void storeProperty(final AssetManager assetManager, final MediaPackage mediaPackage,
131 final String name, final String value) {
132 storeProperties(assetManager, mediaPackage, Collections.singletonMap(name, value));
133 }
134 }