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.publication.youtube;
23
24 import org.opencastproject.mediapackage.Catalog;
25 import org.opencastproject.mediapackage.MediaPackage;
26 import org.opencastproject.mediapackage.MediaPackageElements;
27 import org.opencastproject.metadata.dublincore.DublinCore;
28 import org.opencastproject.metadata.dublincore.DublinCoreCatalog;
29 import org.opencastproject.metadata.dublincore.DublinCores;
30 import org.opencastproject.publication.api.PublicationException;
31 import org.opencastproject.workspace.api.Workspace;
32
33 import org.apache.commons.io.IOUtils;
34 import org.apache.commons.lang3.StringUtils;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37
38 import java.io.File;
39 import java.io.FileInputStream;
40 import java.io.InputStream;
41
42
43
44
45 public class YouTubePublicationAdapter {
46
47
48 private static final Logger logger = LoggerFactory.getLogger(YouTubePublicationAdapter.class);
49
50
51 private final MediaPackage mediaPackage;
52
53
54 private final DublinCoreCatalog dcEpisode;
55
56
57 private final DublinCoreCatalog dcSeries;
58
59
60
61
62
63
64
65
66
67
68 public YouTubePublicationAdapter(MediaPackage mp, Workspace workspace) throws PublicationException {
69 if (mp == null) {
70 throw new PublicationException("Media package is null");
71 }
72 mediaPackage = mp;
73
74 Catalog[] episodeCatalogs = mediaPackage.getCatalogs(MediaPackageElements.EPISODE);
75 if (episodeCatalogs.length == 0) {
76 dcEpisode = null;
77 } else {
78 dcEpisode = parseDublinCoreCatalog(episodeCatalogs[0], workspace);
79 }
80
81 Catalog[] seriesCatalogs = mediaPackage.getCatalogs(MediaPackageElements.SERIES);
82 if (seriesCatalogs.length == 0) {
83 dcSeries = null;
84 } else {
85 dcSeries = parseDublinCoreCatalog(seriesCatalogs[0], workspace);
86 }
87 }
88
89
90
91
92
93
94 public String getContextName() {
95 return mediaPackage.getSeriesTitle();
96 }
97
98
99
100
101
102
103 public String getContextDescription() {
104 return dcSeries == null ? null : dcSeries.getFirst(DublinCore.PROPERTY_DESCRIPTION);
105 }
106
107
108
109
110
111
112 public String getEpisodeName() {
113 return dcEpisode == null ? null : dcEpisode.getFirst(DublinCore.PROPERTY_TITLE);
114 }
115
116
117
118
119
120
121 public String getEpisodeDescription() {
122 if (dcEpisode == null) {
123 return null;
124 }
125
126 String description = "";
127 if (dcSeries != null) {
128 description = StringUtils.trimToEmpty(dcSeries.getFirst(DublinCore.PROPERTY_TITLE));
129 }
130
131 String episodeDescription = dcEpisode.getFirst(DublinCore.PROPERTY_DESCRIPTION);
132 if (episodeDescription != null) {
133 description += '\n' + episodeDescription;
134 }
135
136 String episodeLicense = dcEpisode.getFirst(DublinCore.PROPERTY_LICENSE);
137 if (episodeLicense != null) {
138 description += '\n' + episodeLicense;
139 }
140
141 return description;
142 }
143
144
145
146
147
148
149
150
151 private DublinCoreCatalog parseDublinCoreCatalog(Catalog catalog, Workspace workspace) {
152 InputStream is = null;
153 try {
154 File dcFile = workspace.get(catalog.getURI());
155 is = new FileInputStream(dcFile);
156 return DublinCores.read(is);
157 } catch (Exception e) {
158 logger.error("Error loading Dublin Core metadata: {}", e.getMessage());
159 } finally {
160 IOUtils.closeQuietly(is);
161 }
162 return null;
163 }
164
165 }