com.microsoft.windowsazure.services.media.models.Job Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of microsoft-windowsazure-api Show documentation
Show all versions of microsoft-windowsazure-api Show documentation
API for Microsoft Windows Azure Clients
/**
* Copyright Microsoft Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.microsoft.windowsazure.services.media.models;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMultipart;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.JAXBException;
import javax.xml.parsers.ParserConfigurationException;
import com.microsoft.windowsazure.services.core.ServiceException;
import com.microsoft.windowsazure.services.media.entityoperations.DefaultActionOperation;
import com.microsoft.windowsazure.services.media.entityoperations.DefaultDeleteOperation;
import com.microsoft.windowsazure.services.media.entityoperations.DefaultGetOperation;
import com.microsoft.windowsazure.services.media.entityoperations.DefaultListOperation;
import com.microsoft.windowsazure.services.media.entityoperations.EntityActionOperation;
import com.microsoft.windowsazure.services.media.entityoperations.EntityBatchOperation;
import com.microsoft.windowsazure.services.media.entityoperations.EntityCreateOperation;
import com.microsoft.windowsazure.services.media.entityoperations.EntityDeleteOperation;
import com.microsoft.windowsazure.services.media.entityoperations.EntityGetOperation;
import com.microsoft.windowsazure.services.media.entityoperations.EntityOperationSingleResultBase;
import com.microsoft.windowsazure.services.media.implementation.MediaBatchOperations;
import com.microsoft.windowsazure.services.media.implementation.content.JobType;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.GenericType;
/**
* Class for creating operations to manipulate Job entities.
*
*/
public class Job {
/** The Constant ENTITY_SET. */
private static final String ENTITY_SET = "Jobs";
// Prevent instantiation
/**
* Instantiates a new job.
*/
private Job() {
}
/**
* Creates an operation to create a new job.
*
* @return the creator
*/
public static Creator create() {
return new Creator();
}
/**
* The Class Creator.
*/
public static class Creator extends EntityOperationSingleResultBase implements
EntityCreateOperation {
/** The name. */
private String name;
/** The priority. */
private Integer priority;
/** The input media assets. */
private final List inputMediaAssets;
/** The content type. */
private MediaType contentType;
/** The task create batch operations. */
private final List taskCreateBatchOperations;
/** The fresh. */
private Boolean fresh;
/** The mime multipart. */
private MimeMultipart mimeMultipart;;
/** The media batch operations. */
private MediaBatchOperations mediaBatchOperations;
/**
* Builds the mime multipart.
*
* @throws ServiceException
* the service exception
*/
private void buildMimeMultipart(URI serviceUri) {
mediaBatchOperations = null;
CreateBatchOperation createJobBatchOperation = CreateBatchOperation.create(serviceUri, this);
try {
mediaBatchOperations = new MediaBatchOperations(serviceUri);
}
catch (JAXBException e) {
throw new RuntimeException(e);
}
catch (ParserConfigurationException e) {
throw new RuntimeException(e);
}
mediaBatchOperations.addOperation(createJobBatchOperation);
for (Task.CreateBatchOperation taskCreateBatchOperation : taskCreateBatchOperations) {
mediaBatchOperations.addOperation(taskCreateBatchOperation);
}
try {
mimeMultipart = mediaBatchOperations.getMimeMultipart();
}
catch (MessagingException e) {
throw new RuntimeException(e);
}
catch (IOException e) {
throw new RuntimeException(e);
}
catch (JAXBException e) {
throw new RuntimeException(e);
}
this.contentType = mediaBatchOperations.getContentType();
this.fresh = false;
}
/**
* Instantiates a new creator.
*
*/
public Creator() {
super(ENTITY_SET, JobInfo.class);
this.inputMediaAssets = new ArrayList();
this.taskCreateBatchOperations = new ArrayList();
this.fresh = true;
}
/* (non-Javadoc)
* @see com.microsoft.windowsazure.services.media.entityoperations.EntityCreateOperation#getRequestContents()
*/
@Override
public Object getRequestContents() throws ServiceException {
if (fresh) {
buildMimeMultipart(getProxyData().getServiceUri());
}
return mimeMultipart;
}
/* (non-Javadoc)
* @see com.microsoft.windowsazure.services.media.entityoperations.EntityOperationSingleResultBase#getResponseClass()
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public Class getResponseClass() {
return ClientResponse.class;
}
/* (non-Javadoc)
* @see com.microsoft.windowsazure.services.media.entityoperations.EntityCreateOperation#processResponse(java.lang.Object)
*/
@Override
public Object processResponse(Object clientResponse) throws ServiceException {
try {
this.mediaBatchOperations.parseBatchResult((ClientResponse) clientResponse);
}
catch (IOException e) {
throw new ServiceException(e);
}
JobInfo jobInfo = null;
for (EntityBatchOperation entityBatchOperation : this.mediaBatchOperations.getOperations()) {
if (entityBatchOperation instanceof Job.CreateBatchOperation) {
jobInfo = ((Job.CreateBatchOperation) entityBatchOperation).getJobInfo();
break;
}
}
return jobInfo;
}
/**
* Adds the task creator.
*
* @param taskCreateBatchOperation
* the task create batch operation
* @return the creator
*/
public Creator addTaskCreator(Task.CreateBatchOperation taskCreateBatchOperation) {
this.taskCreateBatchOperations.add(taskCreateBatchOperation);
this.fresh = true;
return this;
}
/**
* Set the name of the job to be created.
*
* @param name
* The name
* @return The creator object (for call chaining)
*/
public Creator setName(String name) {
this.name = name;
this.fresh = true;
return this;
}
/**
* Gets the name.
*
* @return the name
*/
public String getName() {
return this.name;
}
/**
* Sets the priority.
*
* @param priority
* the priority
* @return the creator
*/
public Creator setPriority(Integer priority) {
this.priority = priority;
this.fresh = true;
return this;
}
/**
* Gets the priority.
*
* @return the priority
*/
public Integer getPriority() {
return this.priority;
}
/**
* Gets the input media assets.
*
* @return the input media assets
*/
public List getInputMediaAssets() {
return inputMediaAssets;
}
/**
* Gets the task creators.
*
* @return the task creators
*/
public List getTaskCreators() {
return this.taskCreateBatchOperations;
}
/**
* Adds the input media asset.
*
* @param assetId
* the asset id
* @return the creator
*/
public Creator addInputMediaAsset(String assetId) {
this.inputMediaAssets.add(assetId);
this.fresh = true;
return this;
}
/* (non-Javadoc)
* @see com.microsoft.windowsazure.services.media.entityoperations.EntityOperationBase#getContentType()
*/
@Override
public MediaType getContentType() {
if (fresh) {
buildMimeMultipart(getProxyData().getServiceUri());
}
return this.contentType;
}
/* (non-Javadoc)
* @see com.microsoft.windowsazure.services.media.entityoperations.EntityOperationBase#getUri()
*/
@Override
public String getUri() {
return "$batch";
}
}
/**
* The Class CreateBatchOperation.
*/
public static class CreateBatchOperation extends EntityBatchOperation {
/** The service uri. */
private final URI serviceUri;
/** The job info. */
private JobInfo jobInfo;
/**
* Instantiates a new creates the batch operation.
*
* @param serviceUri
* the service uri
*/
public CreateBatchOperation(URI serviceUri) {
this.serviceUri = serviceUri;
this.verb = "POST";
}
/**
* Creates the.
*
* @param creator
* the creator
* @return the creates the batch operation
*/
public static CreateBatchOperation create(URI serviceUri, Creator creator) {
CreateBatchOperation createBatchOperation = new CreateBatchOperation(serviceUri);
JobType jobType = new JobType();
jobType.setName(creator.getName());
jobType.setPriority(creator.getPriority());
for (String inputMediaAsset : creator.getInputMediaAssets()) {
createBatchOperation.addLink("InputMediaAssets", String.format("%s/Assets('%s')", createBatchOperation
.getServiceUri().toString(), inputMediaAsset.toString()), "application/atom+xml;type=feed",
"http://schemas.microsoft.com/ado/2007/08/dataservices/related/InputMediaAssets");
}
createBatchOperation.addContentObject(jobType);
return createBatchOperation;
}
/**
* Gets the service uri.
*
* @return the service uri
*/
public URI getServiceUri() {
return this.serviceUri;
}
/**
* Sets the job info.
*
* @param jobInfo
* the job info
* @return the creates the batch operation
*/
public CreateBatchOperation setJobInfo(JobInfo jobInfo) {
this.jobInfo = jobInfo;
return this;
}
/**
* Gets the job info.
*
* @return the job info
*/
public JobInfo getJobInfo() {
return this.jobInfo;
}
}
/**
* Create an operation object that will get the state of the given job.
*
* @param jobId
* id of job to retrieve
* @return the get operation
*/
public static EntityGetOperation get(String jobId) {
return new DefaultGetOperation(ENTITY_SET, jobId, JobInfo.class);
}
/**
* Create an operation that will list all the jobs.
*
* @return The list operation
*/
public static DefaultListOperation list() {
return new DefaultListOperation(ENTITY_SET, new GenericType>() {
});
}
/**
* Create an operation to delete the given job.
*
* @param jobId
* id of job to delete
* @return the delete operation
*/
public static EntityDeleteOperation delete(String jobId) {
return new DefaultDeleteOperation(ENTITY_SET, jobId);
}
/**
* Cancel.
*
* @param jobId
* the job id
* @return the entity action operation
*/
public static EntityActionOperation cancel(String jobId) {
return new DefaultActionOperation("CancelJob").addQueryParameter("jobId", String.format("'%s'", jobId));
}
}