Skip to content

Commit bbccd24

Browse files
committed
Add query parameters to delete and put options for large objects
This change adds primitive support for large objects of Swift to ObjectStorageObjectService interface. Large objects are documented at http://docs.openstack.org/developer/swift/api/large_objects.html.
1 parent 942f64d commit bbccd24

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)