Skip to content

Commit a27b17d

Browse files
committed
exception mapping and nova filters support
1 parent 3e117de commit a27b17d

17 files changed

Lines changed: 184 additions & 54 deletions

src/main/java/org/openstack/api/common/OpenstackExceptionClientFilter.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
import javax.ws.rs.ext.Provider;
88
import javax.ws.rs.ext.ResponseFilter;
99

10-
import org.openstack.model.exceptions.OpenstackException;
10+
import org.openstack.model.exceptions.OpenStackComputeException;
11+
import org.openstack.model.exceptions.OpenStackException;
1112

1213
@Provider
1314
public class OpenstackExceptionClientFilter implements ResponseFilter {
@@ -18,11 +19,17 @@ public void postFilter(FilterContext context) throws IOException {
1819
if(httpStatus / 100 > 3) {
1920
MediaType responseType = context.getResponse().getHeaders().getMediaType();
2021
if (responseType != null && responseType.isCompatible(MediaType.APPLICATION_JSON_TYPE)) {
21-
throw context.getResponse().readEntity(OpenstackException.class);
22+
// the filter should be applied per project basics
23+
// for now is applied in a coarse grained fashion
24+
try {
25+
throw context.getResponse().readEntity(OpenStackComputeException.class);
26+
} catch (Exception e) {
27+
throw context.getResponse().readEntity(OpenStackException.class);
28+
}
2229
} else if (context.getResponse().hasEntity()) {
23-
throw new OpenstackException(context.getResponse().readEntity(String.class));
30+
throw new OpenStackException(context.getResponse().readEntity(String.class));
2431
} else {
25-
throw new OpenstackException("Unknown exception");
32+
throw new OpenStackException("Unknown exception");
2633
}
2734
}
2835
}

src/main/java/org/openstack/api/compute/AsyncServerOperation.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import java.util.logging.Logger;
99

1010
import org.openstack.model.compute.Server;
11-
import org.openstack.model.exceptions.OpenstackException;
11+
import org.openstack.model.exceptions.OpenStackException;
1212

1313
import com.google.common.collect.Lists;
1414

@@ -38,7 +38,7 @@ public AsyncServerOperation(TenantResource client, Server returnValue, String se
3838
this.finishStates = finishStates;
3939
}
4040

41-
Server waitForState(long timeout, TimeUnit unit) throws OpenstackException {
41+
Server waitForState(long timeout, TimeUnit unit) throws OpenStackException {
4242
try {
4343
long timeoutAt = unit != null ? System.currentTimeMillis() + unit.toMillis(timeout) : Long.MAX_VALUE;
4444
while (true) {
@@ -70,7 +70,7 @@ Server waitForState(long timeout, TimeUnit unit) throws OpenstackException {
7070
}
7171

7272
if (!acceptableTransitionStates.contains(status)) {
73-
throw new OpenstackException("Server is in unexpected state: " + status);
73+
throw new OpenStackException("Server is in unexpected state: " + status);
7474
}
7575

7676
if (server != null) {
@@ -80,12 +80,12 @@ Server waitForState(long timeout, TimeUnit unit) throws OpenstackException {
8080
}
8181

8282
if (System.currentTimeMillis() > timeoutAt)
83-
throw new OpenstackException("Server did not transition to expected state within timeout");
83+
throw new OpenStackException("Server did not transition to expected state within timeout");
8484

8585
try {
8686
Thread.sleep(POLL_INTERVAL_MILLISECONDS);
8787
} catch (InterruptedException e) {
88-
throw new OpenstackException(e.getMessage(), e);
88+
throw new OpenStackException(e.getMessage(), e);
8989
}
9090

9191
}
@@ -105,33 +105,33 @@ public Server get() {
105105
return get(0, null);
106106
} catch (Exception e) {
107107
// TimeoutException shouldn't happen without a timeout specified!!
108-
throw new OpenstackException("Unexpected error", e);
108+
throw new OpenStackException("Unexpected error", e);
109109
}
110110
}
111111

112112
@Override
113113
public Server get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
114114
try {
115115
return waitComplete(timeout, unit);
116-
} catch (OpenstackException e) {
116+
} catch (OpenStackException e) {
117117
throw new ExecutionException("Error with OpenStack", e);
118118
}
119119
}
120120

121121
/**
122122
* This method throws OpenStackComputeException instead of wrapping it in ExecutionException
123123
*
124-
* @throws OpenstackException
124+
* @throws OpenStackException
125125
*/
126126
public Server waitComplete(long timeout, TimeUnit unit) throws InterruptedException, TimeoutException,
127-
OpenstackException {
127+
OpenStackException {
128128
return this.waitForState(timeout, unit);
129129
}
130130

131131
/**
132132
* This method throws OpenStackComputeException instead of wrapping it in ExecutionException
133133
*/
134-
public Server waitComplete() throws InterruptedException, OpenstackException {
134+
public Server waitComplete() throws InterruptedException, OpenStackException {
135135
try {
136136
return waitComplete(0, null);
137137
} catch (TimeoutException e) {

src/main/java/org/openstack/api/compute/FlavorsResource.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.openstack.api.compute;
22

3+
import java.util.Map;
34
import java.util.Properties;
45

56
import javax.ws.rs.client.Entity;
@@ -9,16 +10,37 @@
910
import org.openstack.api.common.Resource;
1011
import org.openstack.model.compute.Flavor;
1112
import org.openstack.model.compute.FlavorList;
13+
import org.openstack.model.compute.ServerList;
1214
import org.openstack.model.compute.nova.NovaFlavorList;
15+
import org.openstack.model.compute.nova.NovaServerList;
1316

1417
public class FlavorsResource extends Resource {
1518

1619
public FlavorsResource(Target target, Properties properties) {
1720
super(target, properties);
1821
}
22+
23+
public FlavorList get(Map<String, Object> filters) {
24+
Target target = this.target.path("/detail");
25+
if(filters != null) {
26+
if(filters.get("minDisk") != null) {
27+
target = target.queryParam("minDisk", filters.get("minDisk"));
28+
}
29+
if(filters.get("minRam") != null) {
30+
target = target.queryParam("minRam", filters.get("minRam"));
31+
}
32+
if(filters.get("marker") != null) {
33+
target = target.queryParam("marker", filters.get("marker"));
34+
}
35+
if(filters.get("limit") != null) {
36+
target = target.queryParam("limit", filters.get("marker"));
37+
}
38+
}
39+
return target.request(MediaType.APPLICATION_JSON).get(NovaFlavorList.class);
40+
}
1941

2042
public FlavorList get() {
21-
return target.path("/detail").request(MediaType.APPLICATION_JSON).get(NovaFlavorList.class);
43+
return get(null);
2244
}
2345

2446
public Flavor post(Flavor flavor) {

src/main/java/org/openstack/api/compute/ImagesResource.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,53 @@
11
package org.openstack.api.compute;
22

3+
import java.util.Map;
34
import java.util.Properties;
45

56
import javax.ws.rs.client.Target;
67
import javax.ws.rs.core.MediaType;
78

89
import org.openstack.api.common.Resource;
10+
import org.openstack.model.compute.FlavorList;
911
import org.openstack.model.compute.ImageList;
12+
import org.openstack.model.compute.nova.NovaFlavorList;
1013
import org.openstack.model.compute.nova.NovaImageList;
1114

1215
public class ImagesResource extends Resource {
1316

1417
public ImagesResource(Target target, Properties properties) {
1518
super(target, properties);
1619
}
20+
21+
public ImageList get(Map<String, Object> filters) {
22+
Target target = this.target.path("/detail");
23+
if(filters != null) {
24+
if(filters.get("server") != null) {
25+
target = target.queryParam("server", filters.get("server"));
26+
}
27+
if(filters.get("name") != null) {
28+
target = target.queryParam("name", filters.get("name"));
29+
}
30+
if(filters.get("status") != null) {
31+
target = target.queryParam("status", filters.get("status"));
32+
}
33+
if(filters.get("marker") != null) {
34+
target = target.queryParam("marker", filters.get("marker"));
35+
}
36+
if(filters.get("limit") != null) {
37+
target = target.queryParam("limit", filters.get("marker"));
38+
}
39+
if(filters.get("changes-since") != null) {
40+
target = target.queryParam("changes-since", filters.get("changes-since"));
41+
}
42+
if(filters.get("type") != null) {
43+
target = target.queryParam("type", filters.get("type"));
44+
}
45+
}
46+
return target.request(MediaType.APPLICATION_JSON).get(NovaImageList.class);
47+
}
1748

1849
public ImageList get() {
19-
return target.path("/detail").request(MediaType.APPLICATION_JSON).get(NovaImageList.class);
50+
return get(null);
2051
}
2152

2253
public ImageResource image(String id) {

src/main/java/org/openstack/api/compute/ServersResource.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.openstack.api.compute;
22

3+
import java.util.Map;
34
import java.util.Properties;
45

56
import javax.ws.rs.client.Entity;
@@ -18,7 +19,7 @@ public class ServersResource extends Resource {
1819
public ServersResource(Target target, Properties properties) {
1920
super(target, properties);
2021
}
21-
22+
2223
/**
2324
* Returns a list of server names and ids for a given user
2425
*
@@ -31,8 +32,43 @@ public ServersResource(Target target, Properties properties) {
3132
* @param detail
3233
* @return
3334
*/
35+
public ServerList get(Map<String, Object> filters) {
36+
Target target = this.target.path("/detail");
37+
if(filters != null) {
38+
if(filters.get("all_tenants") != null) {
39+
target = target.queryParam("all_tenants", filters.get("all_tenants"));
40+
}
41+
if(filters.get("image") != null) {
42+
target = target.queryParam("image", filters.get("image"));
43+
}
44+
if(filters.get("flavor") != null) {
45+
target = target.queryParam("flavor", filters.get("flavor"));
46+
}
47+
if(filters.get("name") != null) {
48+
target = target.queryParam("name", filters.get("name"));
49+
}
50+
if(filters.get("status") != null) {
51+
target = target.queryParam("status", filters.get("status"));
52+
}
53+
if(filters.get("marker") != null) {
54+
target = target.queryParam("marker", filters.get("marker"));
55+
}
56+
if(filters.get("limit") != null) {
57+
target = target.queryParam("limit", filters.get("marker"));
58+
}
59+
if(filters.get("changes-since") != null) {
60+
target = target.queryParam("changes-since", filters.get("changes-since"));
61+
}
62+
if(filters.get("deleted") != null) {
63+
target = target.queryParam("deleted", filters.get("deleted"));
64+
}
65+
}
66+
return target.request(MediaType.APPLICATION_JSON).get(NovaServerList.class);
67+
}
68+
69+
3470
public ServerList get() {
35-
return target.path("/detail").request(MediaType.APPLICATION_JSON).get(NovaServerList.class);
71+
return get(null);
3672
}
3773

3874
public Server post(ServerForCreate serverForCreate) {

src/main/java/org/openstack/api/images/ImageResource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import javax.ws.rs.core.Response;
1111

1212
import org.openstack.api.common.Resource;
13-
import org.openstack.model.exceptions.OpenstackException;
13+
import org.openstack.model.exceptions.OpenStackException;
1414
import org.openstack.model.images.Image;
1515

1616
public class ImageResource extends Resource {
@@ -25,7 +25,7 @@ public void put(Map<String, Object> properties, Map<String, Object> metadata) {
2525
b.method("PUT");
2626
}
2727

28-
public Image head() throws OpenstackException {
28+
public Image head() throws OpenStackException {
2929
Response response = target.request().head();
3030
Image image = GlanceHeaderUtils.unmarshalHeaders(response.getHeaders());
3131
return image;

src/main/java/org/openstack/api/images/ImagesResource.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import org.glassfish.jersey.filter.LoggingFilter;
1717
import org.openstack.api.common.Resource;
1818
import org.openstack.api.compute.TenantResource;
19-
import org.openstack.model.exceptions.OpenstackException;
19+
import org.openstack.model.exceptions.OpenStackException;
2020
import org.openstack.model.images.Image;
2121
import org.openstack.model.images.ImageList;
2222
import org.openstack.model.images.glance.GlanceImage;
@@ -41,7 +41,7 @@ public ImageResource image(String id) {
4141
return new ImageResource(target.path("/{id}").pathParam("id", id), properties);
4242
}
4343

44-
public Image post(File imageFile, Image imageProperties) throws IOException, OpenstackException {
44+
public Image post(File imageFile, Image imageProperties) throws IOException, OpenStackException {
4545
FileInputStream fis = new FileInputStream(imageFile);
4646
try {
4747

@@ -51,7 +51,7 @@ public Image post(File imageFile, Image imageProperties) throws IOException, Ope
5151
}
5252
}
5353

54-
public Image post(InputStream imageStream, long size, Image imageProperties) throws OpenstackException, IOException {
54+
public Image post(InputStream imageStream, long size, Image imageProperties) throws OpenStackException, IOException {
5555

5656
Builder b = target.request(MediaType.APPLICATION_JSON);
5757

src/main/java/org/openstack/api/storage/ObjectResource.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import org.apache.commons.io.IOUtils;
1616
import org.openstack.api.common.Resource;
1717
import org.openstack.api.identity.admin.resources.TenantResource;
18-
import org.openstack.model.exceptions.OpenstackException;
18+
import org.openstack.model.exceptions.OpenStackException;
1919
import org.openstack.model.storage.StorageObjectProperties;
2020
import org.openstack.model.storage.swift.SwiftStorageObjectProperties;
2121

@@ -59,25 +59,25 @@ public InputStream openStream() {
5959
return target.request(MediaType.APPLICATION_OCTET_STREAM).get(InputStream.class);
6060
}
6161

62-
public Response put() throws OpenstackException {
62+
public Response put() throws OpenStackException {
6363
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON);
6464
builder = builder.header("Content-Length", "0");
6565
return builder.put(Entity.entity(new byte[1], "application/directory"));
6666
}
6767

68-
public Response put(File srcFile, SwiftStorageObjectProperties properties) throws OpenstackException {
68+
public Response put(File srcFile, SwiftStorageObjectProperties properties) throws OpenStackException {
6969
FileInputStream fis = null;
7070
try {
7171
fis = new FileInputStream(srcFile);
7272
return put(fis, srcFile.length(), properties);
7373
} catch(IOException e) {
74-
throw new OpenstackException(e.getMessage(), e);
74+
throw new OpenStackException(e.getMessage(), e);
7575
} finally {
7676
IOUtils.closeQuietly(fis);
7777
}
7878
}
7979

80-
public Response put(InputStream objectStream, long objectStreamLength, SwiftStorageObjectProperties properties) throws OpenstackException {
80+
public Response put(InputStream objectStream, long objectStreamLength, SwiftStorageObjectProperties properties) throws OpenStackException {
8181
Preconditions.checkNotNull(properties, "You have to supply object propeties");
8282
Preconditions.checkNotNull(properties, "You have to supply object name");
8383
try {
@@ -109,7 +109,7 @@ public Response put(InputStream objectStream, long objectStreamLength, SwiftStor
109109
*/
110110
return response;
111111
} catch(IOException e) {
112-
throw new OpenstackException(e.getMessage(), e);
112+
throw new OpenStackException(e.getMessage(), e);
113113
}
114114
}
115115

src/main/java/org/openstack/client/ComputeClient.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,8 @@ public ServerList listServers() {
4343
return resource.servers().get();
4444
}
4545

46-
public ServerList listServers(int offset, int max) {
47-
return resource.servers().get();
48-
}
49-
50-
public ServerList listServers(Map<String, Object> params) {
51-
return resource.servers().get();
46+
public ServerList listServers(Map<String, Object> filters) {
47+
return resource.servers().get(filters);
5248
}
5349

5450
public Server createServer(ServerForCreate serverForCreate) {

src/main/java/org/openstack/client/OpenStackClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import org.openstack.api.identity.IdentityPublicEndpoint;
1414
import org.openstack.api.images.ImagesResource;
1515
import org.openstack.api.storage.AccountResource;
16-
import org.openstack.model.exceptions.OpenstackException;
16+
import org.openstack.model.exceptions.OpenStackException;
1717
import org.openstack.model.identity.Access;
1818
import org.openstack.model.identity.Authentication;
1919
import org.openstack.model.identity.keystone.KeystoneAuthentication;
@@ -83,7 +83,7 @@ public static OpenStackClient authenticate() {
8383
properties.load(OpenStackClient.class.getResourceAsStream("/openstack.properties"));
8484
return authenticate(properties);
8585
} catch (IOException e) {
86-
throw new OpenstackException("openstack.properties not found in the CLASSPATH", e);
86+
throw new OpenStackException("openstack.properties not found in the CLASSPATH", e);
8787
}
8888
}
8989

0 commit comments

Comments
 (0)