/** * Copyright © Microsoft Open Technologies, Inc. * * All Rights Reserved * * 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 * * THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION * ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A * PARTICULAR PURPOSE, MERCHANTABILITY OR NON-INFRINGEMENT. * * See the Apache License, Version 2.0 for the specific language * governing permissions and limitations under the License. */ package com.msopentech.odatajclient.engine.communication.request.streamed; import com.msopentech.odatajclient.engine.client.http.HttpMethod; import com.msopentech.odatajclient.engine.communication.request.ODataStreamManager; import com.msopentech.odatajclient.engine.communication.request.batch.ODataBatchableRequest; import com.msopentech.odatajclient.engine.communication.request.streamed.ODataMediaEntityUpdateRequest.MediaEntityUpdateStreamManager; import com.msopentech.odatajclient.engine.communication.response.ODataMediaEntityUpdateResponse; import com.msopentech.odatajclient.engine.communication.response.ODataResponseImpl; import com.msopentech.odatajclient.engine.data.ODataEntity; import com.msopentech.odatajclient.engine.data.ODataReader; import java.io.InputStream; import java.net.URI; import java.util.concurrent.TimeUnit; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; /** * This class implements an OData Media Entity create request. * Get instance by using ODataStreamedRequestFactory. * * @see ODataStreamedRequestFactory#getMediaEntityUpdateRequest(java.net.URI, java.io.InputStream) */ public class ODataMediaEntityUpdateRequest extends ODataStreamedEntityRequestImpl<ODataMediaEntityUpdateResponse, MediaEntityUpdateStreamManager> implements ODataBatchableRequest { private final InputStream media; /** * Constructor. * * @param method request method. * @param editURI edit URI of the entity to be updated. * @param media media entity blob to be created. */ ODataMediaEntityUpdateRequest(final HttpMethod method, final URI editURI, final InputStream media) { super(method, editURI); this.media = media; } /** * {@inheritDoc } */ @Override protected MediaEntityUpdateStreamManager getStreamManager() { if (streamManager == null) { streamManager = new MediaEntityUpdateStreamManager(media); } return (MediaEntityUpdateStreamManager) streamManager; } /** * Media entity payload object. */ public class MediaEntityUpdateStreamManager extends ODataStreamManager<ODataMediaEntityUpdateResponse> { /** * Private constructor. * * @param input media stream. */ private MediaEntityUpdateStreamManager(final InputStream input) { super(ODataMediaEntityUpdateRequest.this.futureWrapper, input); } /** * {@inheritDoc } */ @Override protected ODataMediaEntityUpdateResponse getResponse(final long timeout, final TimeUnit unit) { finalizeBody(); return new ODataMediaEntityUpdateResponseImpl(client, getHttpResponse(timeout, unit)); } } /** * Response class about an ODataMediaEntityUpdateRequest. */ private class ODataMediaEntityUpdateResponseImpl extends ODataResponseImpl implements ODataMediaEntityUpdateResponse { private ODataEntity entity = null; /** * Constructor. * <p> * Just to create response templates to be initialized from batch. */ private ODataMediaEntityUpdateResponseImpl() { } /** * Constructor. * * @param client HTTP client. * @param res HTTP response. */ private ODataMediaEntityUpdateResponseImpl(final HttpClient client, final HttpResponse res) { super(client, res); } /** * {@inheritDoc } */ @Override public ODataEntity getBody() { if (entity == null) { try { entity = ODataReader.readEntity(getRawResponse(), getFormat()); } finally { this.close(); } } return entity; } } }