/** * Serializes media package element list to a string. * * @param elements * element list to be serialized * @return serialized media package element list * @throws MediaPackageException * if serialization fails */ public static String getArrayAsXml(Collection<? extends MediaPackageElement> elements) throws MediaPackageException { // TODO write real serialization function if (elements == null || elements.isEmpty()) return ""; try { StringBuilder builder = new StringBuilder(); Iterator<? extends MediaPackageElement> it = elements.iterator(); builder.append(getAsXml(it.next())); while (it.hasNext()) { builder.append("###"); builder.append(getAsXml(it.next())); } return builder.toString(); } catch (Exception e) { if (e instanceof MediaPackageException) { throw (MediaPackageException) e; } else { throw new MediaPackageException(e); } } }
/** * Parses the serialized media package element list. * * @param xml * String to be parsed * @return parsed media package element list * @throws MediaPackageException * if de-serialization fails */ public static List<? extends MediaPackageElement> getArrayFromXml(String xml) throws MediaPackageException { // TODO write real deserialization function try { List<MediaPackageElement> elements = new LinkedList<MediaPackageElement>(); String[] xmlArray = xml.split("###"); for (String xmlElement : xmlArray) { if ("".equals(xmlElement.trim())) continue; elements.add(getFromXml(xmlElement.trim())); } return elements; } catch (Exception e) { if (e instanceof MediaPackageException) { throw (MediaPackageException) e; } else { throw new MediaPackageException(e); } } }
params.add(new BasicNameValuePair("mediapackage", MediaPackageParser.getAsXml(mediaPackage))); params.add(new BasicNameValuePair("channel", channelId)); params.add(new BasicNameValuePair("addElements", MediaPackageElementParser.getArrayAsXml(addElements))); params.add(new BasicNameValuePair("retractElements", gson.toJson(retractElementIds))); try { final String xml = IOUtils.toString(response.getEntity().getContent(), Charset.forName("utf-8")); return (Publication) MediaPackageElementParser.getFromXml(xml); } catch (final Exception e) { throw new PublicationException(
/** * {@inheritDoc} * * @see org.opencastproject.job.api.AbstractJobProducer#process(org.opencastproject.job.api.Job) */ @Override protected String process(Job job) throws Exception { Operation op = null; String operation = job.getOperation(); List<String> arguments = job.getArguments(); try { op = Operation.valueOf(operation); switch (op) { case Waveform: Track track = (Track) MediaPackageElementParser.getFromXml(arguments.get(0)); int pixelsPerMinute = Integer.parseInt(arguments.get(1)); int minWidth = Integer.parseInt(arguments.get(2)); int maxWidth = Integer.parseInt(arguments.get(3)); int height = Integer.parseInt(arguments.get(4)); Attachment waveformMpe = extractWaveform(track, pixelsPerMinute, minWidth, maxWidth, height); return MediaPackageElementParser.getAsXml(waveformMpe); default: throw new ServiceRegistryException("This service can't handle operations of type '" + op + "'"); } } catch (IndexOutOfBoundsException e) { throw new ServiceRegistryException("This argument list for operation '" + op + "' does not meet expectations", e); } catch (MediaPackageException | WaveformServiceException e) { throw new ServiceRegistryException("Error handling operation '" + op + "'", e); } }
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); try { params.add(new BasicNameValuePair("track", MediaPackageElementParser.getAsXml(sourceTrack))); if (referencedTracks != null && referencedTracks.length > 0) { String referencedTracksXml = MediaPackageElementParser.getArrayAsXml(Arrays.asList(referencedTracks)); params.add(new BasicNameValuePair("referenceTracks", referencedTracksXml));
params.add(new BasicNameValuePair("mediapackage", MediaPackageParser.getAsXml(mediaPackage))); params.add(new BasicNameValuePair("channel", channelId)); params.add(new BasicNameValuePair("addElements", MediaPackageElementParser.getArrayAsXml(addElements))); params.add(new BasicNameValuePair("retractElements", gson.toJson(retractElementIds)));
@Override public Option<List<MediaPackageElement>> apply(HttpResponse response) { try { final String xml = IOUtils.toString(response.getEntity().getContent(), Charset.forName("utf-8")); List<MediaPackageElement> result = new ArrayList<>(MediaPackageElementParser.getArrayFromXml(xml)); return some(result); } catch (Exception e) { logger.error("Error parsing Job from HTTP response", e); return none(); } } };
switch (op) { case Analyze: audioTrack = (TrackImpl) MediaPackageElementParser.getFromXml(arguments.get(0)); serialized = analyze(job, audioTrack).map(MediaPackageElementParser.<Track> getAsXml()).getOrElse(""); break; case Normalize: audioTrack = (TrackImpl) MediaPackageElementParser.getFromXml(arguments.get(0)); Float targetRmsLevDb = new Float(arguments.get(1)); serialized = normalize(job, audioTrack, targetRmsLevDb).map(MediaPackageElementParser.<Track> getAsXml()) .getOrElse(""); break;
/** * Same as getArrayFromXml(), but throwing a RuntimeException instead of a checked exception. Useful in streams. * * @param xml * String to be parsed * @return parsed media package element list * * @throws MediaPackageRuntimeException * if de-serialization fails */ public static List<? extends MediaPackageElement> getArrayFromXmlUnchecked(String xml) { try { return getArrayFromXml(xml); } catch (MediaPackageException e) { throw new MediaPackageRuntimeException(e); } }
/** * {@inheritDoc} * * @see org.opencastproject.waveform.api.WaveformService#createWaveformImage(org.opencastproject.mediapackage.Track, * int, int, int, int) */ @Override public Job createWaveformImage(Track sourceTrack, int pixelsPerMinute, int minWidth, int maxWidth, int height) throws MediaPackageException, WaveformServiceException { try { return serviceRegistry.createJob(jobType, Operation.Waveform.toString(), Arrays.asList(MediaPackageElementParser.getAsXml(sourceTrack), Integer.toString(pixelsPerMinute), Integer.toString(minWidth), Integer.toString(maxWidth), Integer.toString(height)), waveformJobLoad); } catch (ServiceRegistryException ex) { throw new WaveformServiceException("Unable to create waveform job", ex); } }
/** * {@inheritDoc} * * @see org.opencastproject.job.api.AbstractJobProducer#process(org.opencastproject.job.api.Job) */ @Override protected String process(Job job) throws Exception { Operation op = null; String operation = job.getOperation(); List<String> arguments = job.getArguments(); try { op = Operation.valueOf(operation); switch (op) { case TimelinePreview: Track track = (Track) MediaPackageElementParser .getFromXml(arguments.get(0)); int imageCount = Integer.parseInt(arguments.get(1)); Attachment timelinePreviewsMpe = generatePreviewImages(job, track, imageCount); return MediaPackageElementParser.getAsXml(timelinePreviewsMpe); default: throw new IllegalStateException("Don't know how to handle operation '" + operation + "'"); } } catch (IllegalArgumentException e) { throw new ServiceRegistryException("This service can't handle operations of type '" + op + "'", e); } catch (IndexOutOfBoundsException e) { throw new ServiceRegistryException("This argument list for operation '" + op + "' does not meet expectations", e); } catch (Exception e) { throw new ServiceRegistryException("Error handling operation '" + op + "'", e); } }
/** * Remove all files created by the given jobs * @param jobs */ private void cleanupWorkspace(List<Job> jobs) { for (Job job : jobs) { String jobPayload = job.getPayload(); if (StringUtils.isNotEmpty(jobPayload)) { try { MediaPackageElement timelinepreviewsMpe = MediaPackageElementParser.getFromXml(jobPayload); URI timelinepreviewsUri = timelinepreviewsMpe.getURI(); workspace.delete(timelinepreviewsUri); } catch (MediaPackageException ex) { // unexpected job payload logger.error("Can't parse timeline previews attachment from job {}", job.getId()); } catch (NotFoundException ex) { // this is ok, because we want delete the file } catch (IOException ex) { logger.warn("Deleting timeline previews image file from workspace failed: {}", ex.getMessage()); // this is ok, because workspace cleaner will remove old files if they exist } } } }
/** * {@inheritDoc} * * @see org.opencastproject.sox.api.SoxService#normalize(Track, Float) */ @Override public Job normalize(Track sourceAudioTrack, Float targetRmsLevDb) throws MediaPackageException, SoxException { try { return serviceRegistry.createJob(JOB_TYPE, Operation.Normalize.toString(), Arrays.asList(MediaPackageElementParser.getAsXml(sourceAudioTrack), targetRmsLevDb.toString()), normalizeJobLoad); } catch (ServiceRegistryException e) { throw new SoxException("Unable to create a job", e); } }
break; case Enrich: MediaPackageElement element = MediaPackageElementParser.getFromXml(arguments.get(0)); boolean overwrite = Boolean.parseBoolean(arguments.get(1)); options = Options.fromJson(arguments.get(2)); throw new IllegalStateException("Don't know how to handle operation '" + operation + "'"); return MediaPackageElementParser.getAsXml(inspectedElement); } catch (IllegalArgumentException e) { throw new ServiceRegistryException("This service can't handle operations of type '" + op + "'", e);
MediaPackageElement sourceTrack = MediaPackageElementParser.getFromXml(sourceAudioTrackAsXml); if (!Track.TYPE.equals(sourceTrack.getElementType())) return Response.status(Response.Status.BAD_REQUEST).entity("sourceAudioTrack element must be of type track")
/** * {@inheritDoc} * * @see org.opencastproject.timelinepreviews.api.TimelinePreviewsService#createTimelinePreviewImages(org.opencastproject.mediapackage.Track, int) */ @Override public Job createTimelinePreviewImages(Track track, int imageCount) throws TimelinePreviewsException, MediaPackageException { try { List<String> parameters = Arrays.asList(MediaPackageElementParser.getAsXml(track), Integer.toString(imageCount)); return serviceRegistry.createJob(JOB_TYPE, Operation.TimelinePreview.toString(), parameters, timelinepreviewsJobLoad); } catch (ServiceRegistryException e) { throw new TimelinePreviewsException("Unable to create timelinepreviews job", e); } }
MediaPackageElement sourceTrack = MediaPackageElementParser.getFromXml(sourceAudioTrackAsXml); if (!Track.TYPE.equals(sourceTrack.getElementType())) return Response.status(Response.Status.BAD_REQUEST).entity("sourceAudioTrack element must be of type track")
/** * {@inheritDoc} * * @see org.opencastproject.sox.api.SoxService#analyze(Track) */ @Override public Job analyze(Track sourceAudioTrack) throws MediaPackageException, SoxException { try { return serviceRegistry.createJob(JOB_TYPE, Operation.Analyze.toString(), Arrays.asList(MediaPackageElementParser.getAsXml(sourceAudioTrack)), analyzeJobLoad); } catch (ServiceRegistryException e) { throw new SoxException("Unable to create a job", e); } }
@POST @Produces(MediaType.TEXT_XML) @Path("enrich") @RestQuery(name = "enrich", description = "Analyze and add missing metadata of a given media file", restParameters = { @RestParameter(description = "MediaPackage Element, that should be enriched with metadata ", isRequired = true, name = "mediaPackageElement", type = RestParameter.Type.TEXT), @RestParameter(description = "Should the existing metadata values remain", isRequired = true, name = "override", type = RestParameter.Type.BOOLEAN), @RestParameter(description = "Options passed to media inspection service", isRequired = false, name = "options", type = RestParameter.Type.STRING) }, reponses = { @RestResponse(description = "XML encoded receipt is returned.", responseCode = HttpServletResponse.SC_OK), @RestResponse(description = "Service unavailabe or not currently present", responseCode = HttpServletResponse.SC_SERVICE_UNAVAILABLE), @RestResponse(description = "Problem retrieving media file or invalid media file or URL.", responseCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR) }, returnDescription = "Return a receipt to check on the status and outcome of the job") public Response enrichTrack(@FormParam("mediaPackageElement") String mediaPackageElement, @FormParam("override") boolean override, @FormParam("options") String options) { checkNotNull(service); try { Job job = service.enrich(MediaPackageElementParser.getFromXml(mediaPackageElement), override, Options.fromJson(options)); return Response.ok(new JaxbJob(job)).build(); } catch (Exception e) { logger.info(e.getMessage(), e); return Response.serverError().build(); } }
try { List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); params.add(new BasicNameValuePair("captions", MediaPackageElementParser.getAsXml(input))); params.add(new BasicNameValuePair("input", format)); post.setEntity(new UrlEncodedFormEntity(params));