-
Notifications
You must be signed in to change notification settings - Fork 19
/
PutBuilder.java
157 lines (132 loc) · 4.8 KB
/
PutBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree.
*/
package org.fcrepo.client;
import static org.fcrepo.client.FedoraHeaderConstants.ATOMIC_ID;
import static org.fcrepo.client.FedoraHeaderConstants.CONTENT_DISPOSITION;
import static org.fcrepo.client.FedoraHeaderConstants.PREFER;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import org.apache.http.client.methods.HttpRequestBase;
import org.fcrepo.client.FcrepoResponse.TransactionURI;
import org.springframework.http.ContentDisposition;
import org.springframework.http.ContentDisposition.Builder;
/**
* Builds a PUT request for interacting with the Fedora HTTP API in order to create a resource with a specified path,
* or replace the triples associated with a resource with the triples provided in the request body.
*
* @author bbpennel
*/
public class PutBuilder extends BodyRequestBuilder {
/**
* Instantiate builder
*
* @param uri uri of the resource this request is being made to
* @param client the client
*/
public PutBuilder(final URI uri, final FcrepoClient client) {
super(uri, client);
}
@Override
protected HttpRequestBase createRequest() {
return HttpMethods.PUT.createRequest(targetUri);
}
@Override
public PutBuilder body(final InputStream stream, final String contentType) {
return (PutBuilder) super.body(stream, contentType);
}
@Override
public PutBuilder body(final File file, final String contentType) throws IOException {
return (PutBuilder) super.body(file, contentType);
}
@Override
public PutBuilder externalContent(final URI contentURI, final String contentType, final String handling) {
return (PutBuilder) super.externalContent(contentURI, contentType, handling);
}
@Override
public PutBuilder body(final InputStream stream) {
return (PutBuilder) super.body(stream);
}
@Override
public PutBuilder ifMatch(final String etag) {
return (PutBuilder) super.ifMatch(etag);
}
@Override
public PutBuilder ifUnmodifiedSince(final String modified) {
return (PutBuilder) super.ifUnmodifiedSince(modified);
}
@Override
public PutBuilder ifStateToken(final String token) {
return (PutBuilder) super.ifStateToken(token);
}
@Deprecated
@Override
public PutBuilder digest(final String digest) {
return (PutBuilder) super.digest(digest);
}
@Override
public PutBuilder digest(final String digest, final String alg) {
return (PutBuilder) super.digest(digest, alg);
}
@Override
public PutBuilder digestMd5(final String digest) {
return (PutBuilder) super.digestMd5(digest);
}
@Override
public PutBuilder digestSha1(final String digest) {
return (PutBuilder) super.digestSha1(digest);
}
@Override
public PutBuilder digestSha256(final String digest) {
return (PutBuilder) super.digestSha256(digest);
}
@Override
public PutBuilder addInteractionModel(final String interactionModelUri) {
return (PutBuilder) super.addInteractionModel(interactionModelUri);
}
@Override
public PutBuilder linkAcl(final String aclUri) {
return (PutBuilder) super.linkAcl(aclUri);
}
@Override
public PutBuilder addHeader(final String name, final String value) {
return (PutBuilder) super.addHeader(name, value);
}
@Override
public PutBuilder addLinkHeader(final FcrepoLink linkHeader) {
return (PutBuilder) super.addLinkHeader(linkHeader);
}
public PutBuilder addTransaction(final TransactionURI transaction) {
request.addHeader(ATOMIC_ID, transaction.asString());
return this;
}
/**
* Provide a content disposition header which will be used as the filename
*
* @param filename the name of the file being provided in the body of the request
* @return this builder
* @throws FcrepoOperationFailedException if unable to encode filename
*/
public PutBuilder filename(final String filename) throws FcrepoOperationFailedException {
final Builder builder = ContentDisposition.builder("attachment");
if (filename != null) {
builder.filename(filename);
}
request.addHeader(CONTENT_DISPOSITION, builder.build().toString());
return this;
}
/**
* Set the prefer header for this request to lenient handling, to indicate that server-managed triples will not
* be included in the request body.
*
* @return this builder
*/
public PutBuilder preferLenient() {
request.setHeader(PREFER, "handling=lenient; received=\"minimal\"");
return this;
}
}