use of org.opencastproject.mediapackage.Attachment in project opencast by opencast.
the class XACMLAuthorizationService method removeFromMediaPackageAndWorkspace.
/**
* Remove all attachments of the given flavors from media package and workspace.
*
* @return the a tuple with the mutated (!) media package as A and the deleted Attachment as B
*/
private Tuple<MediaPackage, Attachment> removeFromMediaPackageAndWorkspace(MediaPackage mp, List<MediaPackageElementFlavor> flavors) {
Attachment attachment = null;
for (Attachment a : getAttachments(mp, flavors)) {
attachment = (Attachment) a.clone();
try {
workspace.delete(a.getURI());
} catch (Exception e) {
logger.warn("Unable to delete XACML file:", e);
}
mp.remove(a);
}
return Tuple.tuple(mp, attachment);
}
use of org.opencastproject.mediapackage.Attachment in project opencast by opencast.
the class IndexServiceImplTest method testCreateEventInputNormalExpectsCreatedEvent.
@Test
public void testCreateEventInputNormalExpectsCreatedEvent() throws Exception {
String expectedTitle = "Test Event Creation";
String username = "akm220";
String org = "mh_default_org";
String[] creators = new String[] {};
Id mpId = new IdImpl("mp-id");
String testResourceLocation = "/events/create-event.json";
JSONObject metadataJson = (JSONObject) parser.parse(IOUtils.toString(IndexServiceImplTest.class.getResourceAsStream(testResourceLocation)));
Capture<Catalog> result = EasyMock.newCapture();
Capture<String> mediapackageIdResult = EasyMock.newCapture();
Capture<String> catalogIdResult = EasyMock.newCapture();
Capture<String> filenameResult = EasyMock.newCapture();
Capture<InputStream> catalogResult = EasyMock.newCapture();
Capture<String> mediapackageTitleResult = EasyMock.newCapture();
SecurityService securityService = setupSecurityService(username, org);
Workspace workspace = EasyMock.createMock(Workspace.class);
EasyMock.expect(workspace.put(EasyMock.capture(mediapackageIdResult), EasyMock.capture(catalogIdResult), EasyMock.capture(filenameResult), EasyMock.capture(catalogResult))).andReturn(new URI("catalog.xml"));
EasyMock.replay(workspace);
// Create Common Event Catalog UI Adapter
CommonEventCatalogUIAdapter commonEventCatalogUIAdapter = setupCommonCatalogUIAdapter(workspace).getA();
// Setup mediapackage.
MediaPackage mediapackage = EasyMock.createMock(MediaPackage.class);
mediapackage.add(EasyMock.capture(result));
EasyMock.expectLastCall();
EasyMock.expect(mediapackage.getCatalogs(EasyMock.anyObject(MediaPackageElementFlavor.class))).andReturn(new Catalog[] {});
EasyMock.expect(mediapackage.getIdentifier()).andReturn(mpId).anyTimes();
EasyMock.expect(mediapackage.getCreators()).andReturn(creators);
mediapackage.addCreator("");
EasyMock.expectLastCall();
mediapackage.setTitle(EasyMock.capture(mediapackageTitleResult));
EasyMock.expectLastCall();
EasyMock.expect(mediapackage.getElements()).andReturn(new MediaPackageElement[] {}).anyTimes();
EasyMock.expect(mediapackage.getCatalogs(EasyMock.anyObject(MediaPackageElementFlavor.class))).andReturn(new Catalog[] {}).anyTimes();
EasyMock.expect(mediapackage.getSeries()).andReturn(null).anyTimes();
mediapackage.setSeries(EasyMock.anyString());
mediapackage.setSeriesTitle(EasyMock.anyString());
EasyMock.expectLastCall();
EasyMock.replay(mediapackage);
IngestService ingestService = setupIngestService(mediapackage, Capture.<InputStream>newInstance());
// Setup Authorization Service
Tuple<MediaPackage, Attachment> returnValue = new Tuple<MediaPackage, Attachment>(mediapackage, null);
AuthorizationService authorizationService = EasyMock.createMock(AuthorizationService.class);
EasyMock.expect(authorizationService.setAcl(EasyMock.anyObject(MediaPackage.class), EasyMock.anyObject(AclScope.class), EasyMock.anyObject(AccessControlList.class))).andReturn(returnValue);
EasyMock.replay(authorizationService);
// Run Test
IndexServiceImpl indexServiceImpl = new IndexServiceImpl();
indexServiceImpl.setAuthorizationService(setupAuthorizationService(mediapackage));
indexServiceImpl.setIngestService(ingestService);
indexServiceImpl.setCommonEventCatalogUIAdapter(commonEventCatalogUIAdapter);
indexServiceImpl.addCatalogUIAdapter(commonEventCatalogUIAdapter);
indexServiceImpl.setUserDirectoryService(noUsersUserDirectoryService);
indexServiceImpl.setSecurityService(securityService);
indexServiceImpl.setWorkspace(workspace);
indexServiceImpl.createEvent(metadataJson, mediapackage);
assertTrue("The catalog must be added to the mediapackage", result.hasCaptured());
assertEquals("The catalog should have been added to the correct mediapackage", mpId.toString(), mediapackageIdResult.getValue());
assertTrue("The catalog should have a new id", catalogIdResult.hasCaptured());
assertTrue("The catalog should have a new filename", filenameResult.hasCaptured());
assertTrue("The catalog should have been added to the input stream", catalogResult.hasCaptured());
assertTrue("The mediapackage should have had its title updated", catalogResult.hasCaptured());
assertEquals("The mediapackage title should have been updated.", expectedTitle, mediapackageTitleResult.getValue());
assertTrue("The catalog should have been created", catalogResult.hasCaptured());
}
use of org.opencastproject.mediapackage.Attachment in project opencast by opencast.
the class IngestServiceImplTest method testMergeScheduledMediaPackage.
@Test
public void testMergeScheduledMediaPackage() throws Exception {
MediaPackage ingestMediaPackage = MediaPackageParser.getFromXml(IOUtils.toString(getClass().getResourceAsStream("/source-manifest-partial.xml"), "UTF-8"));
WorkflowInstance instance = service.ingest(ingestMediaPackage);
MediaPackage mergedMediaPackage = instance.getMediaPackage();
Assert.assertEquals(4, mergedMediaPackage.getTracks().length);
Track track = mergedMediaPackage.getTrack("track-1");
Assert.assertEquals("/vonlya1.mov", track.getURI().toString());
Assert.assertEquals(3, mergedMediaPackage.getCatalogs().length);
Assert.assertEquals(1, mergedMediaPackage.getAttachments().length);
Attachment attachment = mergedMediaPackage.getAttachment("cover");
Assert.assertEquals("attachments/cover.png", attachment.getURI().toString());
// Validate fields
Assert.assertEquals(new Date(DateTimeSupport.fromUTC("2007-12-05T13:45:00")), mergedMediaPackage.getDate());
Assert.assertEquals(10045L, mergedMediaPackage.getDuration().doubleValue(), 0L);
Assert.assertEquals("t2", mergedMediaPackage.getTitle());
Assert.assertEquals("s2", mergedMediaPackage.getSeries());
Assert.assertEquals("st2", mergedMediaPackage.getSeriesTitle());
Assert.assertEquals("l2", mergedMediaPackage.getLicense());
Assert.assertEquals(1, mergedMediaPackage.getSubjects().length);
Assert.assertEquals("s2", mergedMediaPackage.getSubjects()[0]);
Assert.assertEquals(1, mergedMediaPackage.getContributors().length);
Assert.assertEquals("sd2", mergedMediaPackage.getContributors()[0]);
Assert.assertEquals(1, mergedMediaPackage.getCreators().length);
Assert.assertEquals("p2", mergedMediaPackage.getCreators()[0]);
}
use of org.opencastproject.mediapackage.Attachment in project opencast by opencast.
the class EventIndexUtils method updateEvent.
/**
* Update the given {@link Event} with the given {@link MediaPackage}.
*
* @param event
* the event to update
* @param mp
* the mediapackage containing the metadata for the update
* @return the updated event
*/
public static Event updateEvent(Event event, MediaPackage mp) {
// Tracks
List<String> trackMimeTypes = new ArrayList<String>();
List<String> trackStreamResolutions = new ArrayList<String>();
List<String> trackFlavors = new ArrayList<String>();
for (Track t : mp.getTracks()) {
if (t.getMimeType() != null)
trackMimeTypes.add(t.getMimeType().toString());
if (t.getFlavor() != null)
trackFlavors.add(t.getFlavor().toString());
VideoStream[] streams = TrackSupport.byType(t.getStreams(), VideoStream.class);
for (VideoStream s : streams) {
trackStreamResolutions.add(s.getFrameWidth() + "x" + s.getFrameHeight());
}
}
event.setTrackMimetypes(trackMimeTypes);
event.setTrackStreamResolutions(trackStreamResolutions);
event.setTrackFlavors(trackFlavors);
// Metadata
List<String> metadataFlavors = new ArrayList<String>();
List<String> metadataMimetypes = new ArrayList<String>();
for (Catalog c : mp.getCatalogs()) {
if (c.getFlavor() != null)
metadataFlavors.add(c.getFlavor().toString());
if (c.getMimeType() != null)
metadataMimetypes.add(c.getMimeType().toString());
}
event.setMetadataFlavors(metadataFlavors);
event.setMetadataMimetypes(metadataMimetypes);
// Attachments
List<String> attachmentFlavors = new ArrayList<String>();
for (Attachment a : mp.getAttachments()) {
if (a.getFlavor() != null)
attachmentFlavors.add(a.getFlavor().toString());
}
event.setAttachmentFlavors(attachmentFlavors);
// Publications
List<Publication> publications = new ArrayList<Publication>();
for (Publication p : mp.getPublications()) {
publications.add(p);
}
event.setPublications(publications);
event.setSeriesName(mp.getSeriesTitle());
return event;
}
use of org.opencastproject.mediapackage.Attachment in project opencast by opencast.
the class SolrIndexManager method createEpisodeInputDocument.
/**
* Creates a solr input document for the episode metadata of the media package.
*
* @param mediaPackage
* the media package
* @param acl
* the access control list for this mediapackage
* @return an input document ready to be posted to solr
* @throws MediaPackageException
* if serialization of the media package fails
*/
private SolrInputDocument createEpisodeInputDocument(MediaPackage mediaPackage, AccessControlList acl) throws MediaPackageException, IOException {
SolrInputDocument doc = new SolrInputDocument();
String mediaPackageId = mediaPackage.getIdentifier().toString();
// Fill the input document
Schema.setId(doc, mediaPackageId);
// /
// OC specific fields
Schema.setOcMediatype(doc, SearchResultItemType.AudioVisual.toString());
Schema.setOrganization(doc, securityService.getOrganization().getId());
Schema.setOcMediapackage(doc, MediaPackageParser.getAsXml(mediaPackage));
Schema.setOcElementtags(doc, tags(mediaPackage));
Schema.setOcElementflavors(doc, flavors(mediaPackage));
// Add cover
Attachment[] cover = mediaPackage.getAttachments(MediaPackageElements.MEDIAPACKAGE_COVER_FLAVOR);
if (cover != null && cover.length > 0) {
Schema.setOcCover(doc, cover[0].getURI().toString());
}
// naive approach. works as long as only setters, not adders are available in the schema
for (StaticMetadata md : getMetadata(mdServices, mediaPackage)) addEpisodeMetadata(doc, md);
// /
// Add mpeg7
logger.debug("Looking for mpeg-7 catalogs containing segment texts");
Catalog[] mpeg7Catalogs = mediaPackage.getCatalogs(MediaPackageElements.TEXTS);
if (mpeg7Catalogs.length == 0) {
logger.debug("No text catalogs found, trying segments only");
mpeg7Catalogs = mediaPackage.getCatalogs(MediaPackageElements.SEGMENTS);
}
// TODO: merge the segments from each mpeg7 if there is more than one mpeg7 catalog
if (mpeg7Catalogs.length > 0) {
try {
Mpeg7Catalog mpeg7Catalog = loadMpeg7Catalog(mpeg7Catalogs[0]);
addMpeg7Metadata(doc, mediaPackage, mpeg7Catalog);
} catch (IOException e) {
logger.error("Error loading mpeg7 catalog. Skipping catalog: {}", e.getMessage());
}
} else {
logger.debug("No segmentation catalog found");
}
// /
// Add authorization
setAuthorization(doc, securityService, acl);
return doc;
}
Aggregations