use of org.opencastproject.job.api.Job in project opencast by opencast.
the class CoverImageServiceRemoteImpl method generateCoverImage.
@Override
public Job generateCoverImage(String xml, String xsl, String width, String height, String posterImageUri, String targetFlavor) throws CoverImageException {
HttpPost post = new HttpPost("/generate");
try {
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("xml", xml));
params.add(new BasicNameValuePair("xsl", xsl));
params.add(new BasicNameValuePair("width", width));
params.add(new BasicNameValuePair("height", height));
params.add(new BasicNameValuePair("posterimage", posterImageUri));
params.add(new BasicNameValuePair("targetflavor", targetFlavor));
post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
} catch (Exception e) {
throw new CoverImageException("Unable to assemble a remote cover image request", e);
}
HttpResponse response = null;
try {
response = getResponse(post);
if (response != null) {
String content = EntityUtils.toString(response.getEntity(), "UTF-8");
Job r = JobParser.parseJob(content);
logger.info("Cover image generation job {} started on a remote composer", r.getId());
return r;
}
} catch (Exception e) {
throw new CoverImageException("Unable to generate cover image using a remote generation service", e);
} finally {
closeConnection(response);
}
throw new CoverImageException("Unable to generate cover image using a remote generation service");
}
use of org.opencastproject.job.api.Job in project opencast by opencast.
the class CoverImageWorkflowOperationHandlerBase method start.
@Override
public WorkflowOperationResult start(final WorkflowInstance workflowInstance, JobContext context) throws WorkflowOperationException {
MediaPackage mediaPackage = workflowInstance.getMediaPackage();
WorkflowOperationInstance operation = workflowInstance.getCurrentOperation();
logger.info("Cover Image Workflow started for media package '{}'", mediaPackage.getIdentifier());
// User XML metadata from operation configuration, fallback to default metadata
String xml = operation.getConfiguration(XML_METADATA);
if (xml == null) {
xml = getMetadataXml(mediaPackage);
logger.debug("Metadata was not part of operation configuration, using Dublin Core as fallback");
}
logger.debug("Metadata set to: {}", xml);
String xsl = loadXsl(operation);
logger.debug("XSL for transforming metadata to SVG loaded: {}", xsl);
// Read image dimensions
int width = getIntConfiguration(operation, WIDTH);
logger.debug("Image width set to {}px", width);
int height = getIntConfiguration(operation, HEIGHT);
logger.debug("Image height set to {}px", height);
// Read optional poster image flavor
String posterImgUri = getPosterImageFileUrl(operation.getConfiguration(POSTERIMAGE_URL));
if (posterImgUri == null)
posterImgUri = getPosterImageFileUrl(mediaPackage, operation.getConfiguration(POSTERIMAGE_FLAVOR));
if (posterImgUri == null) {
logger.debug("No optional poster image set");
} else {
logger.debug("Poster image found at '{}'", posterImgUri);
}
// Read target flavor
String targetFlavor = operation.getConfiguration(TARGET_FLAVOR);
if (StringUtils.isBlank(targetFlavor)) {
logger.warn("Required configuration key '{}' is blank", TARGET_FLAVOR);
throw new WorkflowOperationException("Configuration key '" + TARGET_FLAVOR + "' must be set");
}
try {
MediaPackageElementFlavor.parseFlavor(targetFlavor);
} catch (IllegalArgumentException e) {
logger.warn("Given target flavor '{}' is not a valid flavor", targetFlavor);
throw new WorkflowOperationException(e);
}
Job generate;
try {
generate = getCoverImageService().generateCoverImage(xml, xsl, String.valueOf(width), String.valueOf(height), posterImgUri, targetFlavor);
logger.debug("Job for cover image generation created");
if (!waitForStatus(generate).isSuccess()) {
throw new WorkflowOperationException("'Cover image' job did not successfuly end");
}
generate = serviceRegistry.getJob(generate.getId());
Attachment coverImage = (Attachment) MediaPackageElementParser.getFromXml(generate.getPayload());
URI attachmentUri = getWorkspace().moveTo(coverImage.getURI(), mediaPackage.getIdentifier().compact(), UUID.randomUUID().toString(), COVERIMAGE_FILENAME);
coverImage.setURI(attachmentUri);
coverImage.setMimeType(MimeTypes.PNG);
// Add tags
final String targetTags = StringUtils.trimToNull(operation.getConfiguration(TARGET_TAGS));
if (targetTags != null) {
for (String tag : asList(targetTags)) {
logger.trace("Tagging image with '{}'", tag);
if (StringUtils.trimToNull(tag) != null)
coverImage.addTag(tag);
}
}
mediaPackage.add(coverImage);
} catch (MediaPackageException e) {
throw new WorkflowOperationException(e);
} catch (NotFoundException e) {
throw new WorkflowOperationException(e);
} catch (ServiceRegistryException e) {
throw new WorkflowOperationException(e);
} catch (CoverImageException e) {
throw new WorkflowOperationException(e);
} catch (IllegalArgumentException e) {
throw new WorkflowOperationException(e);
} catch (IOException e) {
throw new WorkflowOperationException(e);
}
logger.info("Cover Image Workflow finished successfully for media package '{}' within {}ms", mediaPackage.getIdentifier(), generate.getQueueTime());
return createResult(mediaPackage, Action.CONTINUE, generate.getQueueTime());
}
use of org.opencastproject.job.api.Job in project opencast by opencast.
the class ComposerServiceRemoteImpl method convertImage.
/**
* {@inheritDoc}
*
* @see org.opencastproject.composer.api.ComposerService#convertImage(org.opencastproject.mediapackage.Attachment,
* java.lang.String)
*/
@Override
public Job convertImage(Attachment image, String profileId) throws EncoderException, MediaPackageException {
HttpPost post = new HttpPost("/convertimage");
try {
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("sourceImage", MediaPackageElementParser.getAsXml(image)));
params.add(new BasicNameValuePair("profileId", profileId));
post.setEntity(new UrlEncodedFormEntity(params));
} catch (Exception e) {
throw new EncoderException(e);
}
HttpResponse response = null;
try {
response = getResponse(post);
if (response != null) {
Job r = JobParser.parseJob(response.getEntity().getContent());
logger.info("Image conversion job {} started on a remote composer", r.getId());
return r;
}
} catch (Exception e) {
throw new EncoderException(e);
} finally {
closeConnection(response);
}
throw new EncoderException("Unable to convert image at " + image + " using the remote composer service proxy");
}
use of org.opencastproject.job.api.Job in project opencast by opencast.
the class ComposerServiceRemoteImpl method image.
/**
* {@inheritDoc}
*
* @see org.opencastproject.composer.api.ComposerService#image(Track, String, Map)
*/
@Override
public Job image(Track sourceTrack, String profileId, Map<String, String> properties) throws EncoderException, MediaPackageException {
HttpPost post = new HttpPost("/image");
try {
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("sourceTrack", MediaPackageElementParser.getAsXml(sourceTrack)));
params.add(new BasicNameValuePair("profileId", profileId));
if (properties != null)
params.add(new BasicNameValuePair("properties", mapToString(properties)));
post.setEntity(new UrlEncodedFormEntity(params));
} catch (Exception e) {
throw new EncoderException(e);
}
HttpResponse response = null;
try {
response = getResponse(post);
if (response != null) {
Job r = JobParser.parseJob(response.getEntity().getContent());
logger.info("Image extraction job {} started on a remote composer", r.getId());
return r;
}
} catch (Exception e) {
throw new EncoderException(e);
} finally {
closeConnection(response);
}
throw new EncoderException("Unable to compose an image from track " + sourceTrack + " using the remote composer service proxy");
}
use of org.opencastproject.job.api.Job in project opencast by opencast.
the class ComposerServiceRemoteImpl method imageToVideo.
@Override
public Job imageToVideo(Attachment sourceImageAttachment, String profileId, double time) throws EncoderException, MediaPackageException {
HttpPost post = new HttpPost("/imagetovideo");
try {
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("sourceAttachment", MediaPackageElementParser.getAsXml(sourceImageAttachment)));
params.add(new BasicNameValuePair("profileId", profileId));
params.add(new BasicNameValuePair("time", Double.toString(time)));
post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
} catch (Exception e) {
throw new EncoderException(e);
}
HttpResponse response = null;
try {
response = getResponse(post);
if (response != null) {
Job r = JobParser.parseJob(response.getEntity().getContent());
logger.info("Image to video converting job {} started on a remote composer", r.getId());
return r;
}
} catch (Exception e) {
throw new EncoderException(e);
} finally {
closeConnection(response);
}
throw new EncoderException("Unable to convert an image to a video from attachment " + sourceImageAttachment + " using the remote composer service proxy");
}
Aggregations