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.metadata.dublincore;
23
24 import static javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI;
25 import static org.opencastproject.mediapackage.XMLCatalogImpl.XSI_NS_PREFIX;
26 import static org.opencastproject.metadata.dublincore.DublinCore.ELEMENTS_1_1_NS_PREFIX;
27 import static org.opencastproject.metadata.dublincore.DublinCore.ELEMENTS_1_1_NS_URI;
28 import static org.opencastproject.metadata.dublincore.DublinCore.TERMS_NS_PREFIX;
29 import static org.opencastproject.metadata.dublincore.DublinCore.TERMS_NS_URI;
30
31 import org.opencastproject.mediapackage.EName;
32 import org.opencastproject.mediapackage.MediaPackageElementFlavor;
33 import org.opencastproject.mediapackage.MediaPackageElements;
34 import org.opencastproject.metadata.dublincore.OpencastDctermsDublinCore.Episode;
35 import org.opencastproject.metadata.dublincore.OpencastDctermsDublinCore.Series;
36 import org.opencastproject.util.XmlNamespaceBinding;
37 import org.opencastproject.util.XmlNamespaceContext;
38
39 import org.apache.commons.io.IOUtils;
40
41 import java.io.IOException;
42 import java.io.InputStream;
43 import java.nio.charset.StandardCharsets;
44
45 import javax.annotation.Nonnull;
46 import javax.annotation.ParametersAreNonnullByDefault;
47 import javax.xml.XMLConstants;
48
49
50
51
52 @ParametersAreNonnullByDefault
53 public final class DublinCores {
54
55
56
57
58 public static final String OC_DC_CATALOG_NS_URI = "http://www.opencastproject.org/xsd/1.0/dublincore/";
59
60
61 public static final EName OC_DC_CATALOG_ROOT_ELEMENT = new EName(OC_DC_CATALOG_NS_URI, "dublincore");
62
63
64 public static final String OC_PROPERTY_NS_URI = "http://www.opencastproject.org/matterhorn/";
65
66
67 public static final String OC_PROPERTY_NS_PREFIX = "oc";
68
69
70
71
72 public static final EName OC_PROPERTY_AGENT_TIMEZONE = new EName(OC_PROPERTY_NS_URI, "agentTimezone");
73
74
75
76
77
78 public static final EName OC_PROPERTY_RECURRENCE = new EName(OC_PROPERTY_NS_URI, "recurrence");
79 public static final EName OC_PROPERTY_ANNOTATION = new EName(OC_PROPERTY_NS_URI, "annotation");
80 public static final EName OC_PROPERTY_ADVERTISED = new EName(OC_PROPERTY_NS_URI, "advertised");
81 public static final EName OC_PROPERTY_PROMOTED = new EName(OC_PROPERTY_NS_URI, "promoted");
82 public static final EName OC_PROPERTY_DURATION = new EName(OC_PROPERTY_NS_URI, "duration");
83
84 private DublinCores() {
85 }
86
87
88
89
90
91
92
93
94
95
96
97
98 @Nonnull
99 @Deprecated
100 public static Episode mkOpencast() {
101 return mkOpencastEpisode();
102 }
103
104
105
106
107
108
109
110
111
112
113 @Nonnull
114 public static Episode mkOpencastEpisode() {
115 return new Episode(mkOpencast(MediaPackageElements.EPISODE));
116 }
117
118
119
120
121
122 @Nonnull
123 public static Episode mkOpencastEpisode(DublinCoreCatalog dc) {
124 return new Episode(dc);
125 }
126
127
128
129
130
131
132
133
134
135
136 @Nonnull
137 public static Series mkOpencastSeries() {
138 return new Series(mkOpencast(MediaPackageElements.SERIES));
139 }
140
141
142
143
144
145
146
147 @Nonnull
148 public static DublinCoreCatalog mkStandard() {
149 final DublinCoreCatalog dc = new DublinCoreCatalog();
150 dc.addBindings(XmlNamespaceContext.mk(
151 XmlNamespaceBinding.mk(ELEMENTS_1_1_NS_PREFIX, ELEMENTS_1_1_NS_URI),
152 XmlNamespaceBinding.mk(TERMS_NS_PREFIX, TERMS_NS_URI)));
153 return dc;
154 }
155
156
157 @Nonnull
158 public static DublinCoreCatalog mkSimple() {
159 return new DublinCoreCatalog();
160 }
161
162
163
164
165
166
167
168
169
170 @Nonnull
171 public static DublinCoreCatalog read(InputStream in) {
172 final String ser;
173 try {
174 ser = IOUtils.toString(in, StandardCharsets.UTF_8);
175 } catch (IOException e) {
176 throw new RuntimeException("Unable to read DublinCore from stream", e);
177 }
178 if (DublinCoreJsonFormat.isJson(ser)) {
179 try {
180 return DublinCoreJsonFormat.read(ser);
181 } catch (Exception e) {
182 throw new RuntimeException("Unable to read DublinCore catalog, JSON parsing failed.", e);
183 }
184 } else {
185 try {
186 return DublinCoreXmlFormat.read(ser);
187 } catch (Exception e) {
188 throw new RuntimeException("Unable to read DublinCore catalog, XML parsing failed.", e);
189 }
190 }
191 }
192
193 private static DublinCoreCatalog mkOpencast(MediaPackageElementFlavor flavor) {
194 final DublinCoreCatalog dc = mkStandard();
195 dc.setFlavor(flavor);
196 dc.addBindings(XmlNamespaceContext.mk(
197
198 XmlNamespaceBinding.mk(OC_PROPERTY_NS_PREFIX, OC_PROPERTY_NS_URI),
199
200 XmlNamespaceBinding.mk(XMLConstants.DEFAULT_NS_PREFIX, OC_DC_CATALOG_NS_URI)));
201
202 XmlNamespaceBinding.mk(XSI_NS_PREFIX, W3C_XML_SCHEMA_INSTANCE_NS_URI);
203 dc.setRootTag(OC_DC_CATALOG_ROOT_ELEMENT);
204 return dc;
205 }
206 }