Skip to content

Commit d972dca

Browse files
committed
Merge pull request #439 from treasure-data/put-delete-query-params
Add query parameters to delete and put options for large objects
2 parents 942f64d + bbccd24 commit d972dca

File tree

5 files changed

+94
-1
lines changed

5 files changed

+94
-1
lines changed

core/src/main/java/org/openstack4j/api/storage/ObjectStorageObjectService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.openstack4j.model.storage.object.SwiftObject;
1212
import org.openstack4j.model.storage.object.options.ObjectListOptions;
1313
import org.openstack4j.model.storage.object.options.ObjectLocation;
14+
import org.openstack4j.model.storage.object.options.ObjectDeleteOptions;
1415
import org.openstack4j.model.storage.object.options.ObjectPutOptions;
1516

1617
/**
@@ -121,6 +122,15 @@ public interface ObjectStorageObjectService extends RestService {
121122
*/
122123
ActionResponse delete(ObjectLocation location);
123124

125+
/**
126+
* Deletes an Object from the specified container
127+
*
128+
* @param location location containing container name and object name
129+
* @param options the deleting options
130+
* @return the action response
131+
*/
132+
ActionResponse delete(ObjectLocation location, ObjectDeleteOptions options);
133+
124134
/**
125135
* Copies an object to another object in the object store
126136
*
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.openstack4j.model.storage.object.options;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Map;
6+
7+
import com.google.common.collect.Maps;
8+
9+
/**
10+
* Options used for the deletion of Objects
11+
*/
12+
public final class ObjectDeleteOptions {
13+
14+
public static final ObjectDeleteOptions NONE = new ObjectDeleteOptions();
15+
16+
private Map<String, List<Object>> queryParams = Maps.newHashMap();
17+
18+
private ObjectDeleteOptions() { }
19+
20+
public static ObjectDeleteOptions create() {
21+
return new ObjectDeleteOptions();
22+
}
23+
24+
public ObjectDeleteOptions queryParam(String key, Object value) {
25+
if (value == null)
26+
return this;
27+
28+
if (queryParams.containsKey(key)) {
29+
List<Object> list = queryParams.get(key);
30+
list.add(value);
31+
} else {
32+
List<Object> list = new ArrayList<Object>();
33+
list.add(value);
34+
queryParams.put(key, list);
35+
}
36+
return this;
37+
}
38+
39+
public Map<String, List<Object>> getQueryParams() {
40+
return queryParams;
41+
}
42+
}

core/src/main/java/org/openstack4j/model/storage/object/options/ObjectPutOptions.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import static org.openstack4j.model.storage.object.SwiftHeaders.OBJECT_METADATA_PREFIX;
44
import static org.openstack4j.model.storage.object.SwiftHeaders.CONTENT_TYPE;
55

6+
import java.util.ArrayList;
7+
import java.util.List;
68
import java.util.Map;
79

810
import org.openstack4j.openstack.storage.object.functions.MetadataToHeadersFunction;
@@ -18,6 +20,7 @@ public final class ObjectPutOptions {
1820

1921
public static final ObjectPutOptions NONE = new ObjectPutOptions();
2022
Map<String, String> headers = Maps.newHashMap();
23+
private Map<String, List<Object>> queryParams = Maps.newHashMap();
2124
private String path;
2225

2326
private ObjectPutOptions() { }
@@ -65,4 +68,23 @@ public String getContentType() {
6568
public String getPath() {
6669
return path;
6770
}
71+
72+
public ObjectPutOptions queryParam(String key, Object value) {
73+
if (value == null)
74+
return this;
75+
76+
if (queryParams.containsKey(key)) {
77+
List<Object> list = queryParams.get(key);
78+
list.add(value);
79+
} else {
80+
List<Object> list = new ArrayList<Object>();
81+
list.add(value);
82+
queryParams.put(key, list);
83+
}
84+
return this;
85+
}
86+
87+
public Map<String, List<Object>> getQueryParams() {
88+
return queryParams;
89+
}
6890
}

core/src/main/java/org/openstack4j/openstack/internal/BaseOpenStackService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,15 @@ public Invocation<R> param(boolean condition, String name, Object value) {
122122
return this;
123123
}
124124

125+
public Invocation<R> paramLists(Map<String, ? extends Iterable<? extends Object>> params) {
126+
if (params != null) {
127+
for (Map.Entry<String, ? extends Iterable<? extends Object>> pair : params.entrySet())
128+
for (Object value : pair.getValue())
129+
req.queryParam(pair.getKey(), value);
130+
}
131+
return this;
132+
}
133+
125134
public Invocation<R> serviceType(ServiceType serviceType) {
126135
req.serviceType(serviceType);
127136
return this;

core/src/main/java/org/openstack4j/openstack/storage/object/internal/ObjectStorageObjectServiceImpl.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.openstack4j.model.storage.object.SwiftObject;
2222
import org.openstack4j.model.storage.object.options.ObjectListOptions;
2323
import org.openstack4j.model.storage.object.options.ObjectLocation;
24+
import org.openstack4j.model.storage.object.options.ObjectDeleteOptions;
2425
import org.openstack4j.model.storage.object.options.ObjectPutOptions;
2526
import org.openstack4j.openstack.common.DLPayloadEntity;
2627
import org.openstack4j.openstack.common.functions.HeaderNameValuesToHeaderMap;
@@ -126,6 +127,7 @@ public String put(String containerName, String name, Payload<?> payload, ObjectP
126127
.entity(payload)
127128
.headers(options.getOptions())
128129
.contentType(options.getContentType())
130+
.paramLists(options.getQueryParams())
129131
.executeWithResponse();
130132
try
131133
{
@@ -146,8 +148,16 @@ public ActionResponse delete(String containerName, String name) {
146148

147149
@Override
148150
public ActionResponse delete(ObjectLocation location) {
151+
return delete(location, ObjectDeleteOptions.NONE);
152+
}
153+
154+
@Override
155+
public ActionResponse delete(ObjectLocation location, ObjectDeleteOptions options) {
149156
checkNotNull(location);
150-
return deleteWithResponse(location.getURI()).execute();
157+
checkNotNull(options);
158+
return delete(ActionResponse.class, location.getURI())
159+
.paramLists(options.getQueryParams())
160+
.execute();
151161
}
152162

153163
/**

0 commit comments

Comments
 (0)