001/* 002 * The contents of this file are subject to the license and copyright 003 * detailed in the LICENSE and NOTICE files at the root of the source 004 * tree. 005 */ 006package org.fcrepo.client; 007 008import static org.fcrepo.client.FedoraHeaderConstants.CONTENT_DISPOSITION; 009import static org.fcrepo.client.FedoraHeaderConstants.SLUG; 010 011import java.io.File; 012import java.io.IOException; 013import java.io.InputStream; 014import java.net.URI; 015 016import org.apache.http.client.methods.HttpRequestBase; 017import org.springframework.http.ContentDisposition; 018import org.springframework.http.ContentDisposition.Builder; 019 020/** 021 * Builds a post request for interacting with the Fedora HTTP API in order to create a new resource within an LDP 022 * container. 023 * 024 * @author bbpennel 025 */ 026public class PostBuilder extends BodyRequestBuilder { 027 028 /** 029 * Instantiate builder 030 * 031 * @param uri uri of the resource this request is being made to 032 * @param client the client 033 */ 034 public PostBuilder(final URI uri, final FcrepoClient client) { 035 super(uri, client); 036 } 037 038 @Override 039 protected HttpRequestBase createRequest() { 040 return HttpMethods.POST.createRequest(targetUri); 041 } 042 043 @Override 044 public PostBuilder body(final InputStream stream, final String contentType) { 045 return (PostBuilder) super.body(stream, contentType); 046 } 047 048 @Override 049 public PostBuilder body(final File file, final String contentType) throws IOException { 050 return (PostBuilder) super.body(file, contentType); 051 } 052 053 @Override 054 public PostBuilder body(final InputStream stream) { 055 return (PostBuilder) super.body(stream); 056 } 057 058 @Override 059 public PostBuilder externalContent(final URI contentURI, final String contentType, final String handling) { 060 return (PostBuilder) super.externalContent(contentURI, contentType, handling); 061 } 062 063 @Deprecated 064 @Override 065 public PostBuilder digest(final String digest) { 066 return (PostBuilder) super.digest(digest); 067 } 068 069 @Override 070 public PostBuilder digest(final String digest, final String alg) { 071 return (PostBuilder) super.digest(digest, alg); 072 } 073 074 @Override 075 public PostBuilder digestMd5(final String digest) { 076 return (PostBuilder) super.digestMd5(digest); 077 } 078 079 @Override 080 public PostBuilder digestSha1(final String digest) { 081 return (PostBuilder) super.digestSha1(digest); 082 } 083 084 @Override 085 public PostBuilder digestSha256(final String digest) { 086 return (PostBuilder) super.digestSha256(digest); 087 } 088 089 @Override 090 public PostBuilder addInteractionModel(final String interactionModelUri) { 091 return (PostBuilder) super.addInteractionModel(interactionModelUri); 092 } 093 094 @Override 095 public PostBuilder linkAcl(final String aclUri) { 096 return (PostBuilder) super.linkAcl(aclUri); 097 } 098 099 @Override 100 public PostBuilder addHeader(final String name, final String value) { 101 return (PostBuilder) super.addHeader(name, value); 102 } 103 104 @Override 105 public PostBuilder addTransaction(final URI transaction) { 106 return (PostBuilder) super.addTransaction(transaction); 107 } 108 109 @Override 110 public PostBuilder addLinkHeader(final FcrepoLink linkHeader) { 111 return (PostBuilder) super.addLinkHeader(linkHeader); 112 } 113 114 /** 115 * Provide a content disposition header which will be used as the filename 116 * 117 * @param filename the name of the file being provided in the body of the request 118 * @return this builder 119 * @throws FcrepoOperationFailedException if unable to encode filename 120 */ 121 public PostBuilder filename(final String filename) throws FcrepoOperationFailedException { 122 final Builder builder = ContentDisposition.builder("attachment"); 123 if (filename != null) { 124 builder.filename(filename); 125 } 126 request.addHeader(CONTENT_DISPOSITION, builder.build().toString()); 127 return this; 128 } 129 130 /** 131 * Provide a suggested name for the new child resource, which the repository may ignore. 132 * 133 * @param slug value to supply as the slug header 134 * @return this builder 135 */ 136 public PostBuilder slug(final String slug) { 137 if (slug != null) { 138 request.addHeader(SLUG, slug); 139 } 140 return this; 141 } 142}