forked from fcrepo-exts/fcrepo-java-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TransactionalFcrepoClient.java
148 lines (129 loc) · 4.21 KB
/
TransactionalFcrepoClient.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
/*
* 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 java.net.URI;
import org.apache.http.client.methods.HttpRequestBase;
/**
* A Transaction aware client which adds the Atomic_ID header to requests and provides functionality for interacting
* with the Fedora Transaction API
*
* @author mikejritter
*/
public class TransactionalFcrepoClient extends FcrepoClient {
private final FcrepoResponse.TransactionURI transactionURI;
/**
*
* @param transactionURI the transaction to append to all requests
* @param httpClientBuilder the httpclient
* @param throwExceptionOnFailure whether to throw an exception on any non-2xx or 3xx HTTP responses
*/
public TransactionalFcrepoClient(final FcrepoResponse.TransactionURI transactionURI,
final FcrepoHttpClientBuilder httpClientBuilder,
final Boolean throwExceptionOnFailure) {
super(httpClientBuilder, throwExceptionOnFailure);
if (transactionURI == null) {
throw new IllegalArgumentException("TransactionURI cannot be null");
}
this.transactionURI = transactionURI;
}
public FcrepoResponse.TransactionURI getTransactionURI() {
return transactionURI;
}
/**
* Commit a transaction by performing a PUT
*
* @return the commit RequestBuilder
*/
public RequestBuilder commit() {
return new RequestBuilder(transactionURI.get(), this) {
@Override
protected HttpRequestBase createRequest() {
return HttpMethods.PUT.createRequest(targetUri);
}
};
}
/**
* Retrieve the status of a transaction by performing a GET
*
* @return the status RequestBuilder
*/
public RequestBuilder status() {
return new RequestBuilder(transactionURI.get(), this) {
@Override
protected HttpRequestBase createRequest() {
return HttpMethods.GET.createRequest(targetUri);
}
};
}
/**
* Keep a transaction alive by performing a POST
*
* @return the keep alive RequestBuilder
*/
public RequestBuilder keepAlive() {
return new RequestBuilder(transactionURI.get(), this) {
@Override
protected HttpRequestBase createRequest() {
return HttpMethods.POST.createRequest(targetUri);
}
};
}
/**
* Rollback a transaction by performing a DELETE
*
* @return the rollback RequestBuilder
*/
public RequestBuilder rollback() {
return new RequestBuilder(transactionURI.get(), this) {
@Override
protected HttpRequestBase createRequest() {
return HttpMethods.DELETE.createRequest(targetUri);
}
};
}
@Override
public GetBuilder get(final URI url) {
final var builder = super.get(url);
builder.addTransaction(transactionURI);
return builder;
}
@Override
public HeadBuilder head(final URI url) {
final var builder = super.head(url);
builder.addTransaction(transactionURI);
return builder;
}
@Override
public DeleteBuilder delete(final URI url) {
final var builder = super.delete(url);
builder.addTransaction(transactionURI);
return builder;
}
@Override
public OptionsBuilder options(final URI url) {
final var builder = super.options(url);
builder.addTransaction(transactionURI);
return builder;
}
@Override
public PatchBuilder patch(final URI url) {
final var builder = super.patch(url);
builder.addTransaction(transactionURI);
return builder;
}
@Override
public PostBuilder post(final URI url) {
final var builder = super.post(url);
builder.addTransaction(transactionURI);
return builder;
}
@Override
public PutBuilder put(final URI url) {
final var builder = super.put(url);
builder.addTransaction(transactionURI);
return builder;
}
}