package org.odata4j.consumer; import java.util.ArrayList; import java.util.List; import org.odata4j.core.Guid; import org.odata4j.core.OBatchSupport; import org.odata4j.core.OChangeSetRequest; import org.odata4j.core.OCreateRequest; import org.odata4j.core.ODataConstants; import org.odata4j.core.ODataVersion; import org.odata4j.core.OEntityDeleteRequest; import org.odata4j.core.OModifyLinkRequest; import org.odata4j.core.OModifyRequest; import org.odata4j.format.FormatType; import org.odata4j.producer.resources.ODataBatchProvider; /** * An implementation of the OChangeSetRequest * * Copyright 2013 Halliburton * @author <a href="mailto:peng.chen@halliburton.com">Kevin Chen</a> */ public class ConsumerChangeSetRequest implements OChangeSetRequest { final ODataClient client; List<OBatchSupport> reqs = new ArrayList<OBatchSupport>(); public ConsumerChangeSetRequest(ODataClient oClient) { client = oClient; } @Override public List<OBatchSupport> getReqs() { return reqs; } @Override public String formatRequest(FormatType formatType) { StringBuilder sb = new StringBuilder(); // nothing to add if (reqs == null || reqs.size() == 0) { return ""; } String boundary = "changeset_" + Guid.randomGuid().toString(); String cType = ODataBatchProvider.MULTIPART_MIXED + "; " + "boundary=" + boundary; sb.append(ODataConstants.Headers.CONTENT_TYPE).append(": ").append(cType).append("\n"); sb.append("\n"); for (OBatchSupport req : reqs) { sb.append("\n--").append(boundary).append("\n"); sb.append(req.formatRequest(formatType)); } // ending the change set sb.append("\n--").append(boundary).append("--\n"); return sb.toString(); } @Override public Object getResult(ODataVersion version, Object payLoad, FormatType formatType) { // we send the a single response in case of changeset failure; so return the detailed error message which was part of the response. return payLoad.toString(); } @Override public OChangeSetRequest addRequest(OCreateRequest<?> request) { reqs.add(request); return this; } @Override public OChangeSetRequest addRequest(OModifyRequest<?> request) { reqs.add(request); return this; } @Override public OChangeSetRequest addRequest(OEntityDeleteRequest request) { reqs.add(request); return this; } @Override public OChangeSetRequest addRequest(OModifyLinkRequest request) { reqs.add(request); return this; } }