root / src / gr / grnet / pithos / web / client / rest / GetRequest.java @ 6084aa02
History | View | Annotate | Download (2.5 kB)
1 | 6084aa02 | Christos Stathis | /*
|
---|---|---|---|
2 | 6084aa02 | Christos Stathis | * Copyright (c) 2011 Greek Research and Technology Network
|
3 | 6084aa02 | Christos Stathis | */
|
4 | 6084aa02 | Christos Stathis | |
5 | 6084aa02 | Christos Stathis | package gr.grnet.pithos.web.client.rest; |
6 | 6084aa02 | Christos Stathis | |
7 | 6084aa02 | Christos Stathis | import com.google.gwt.core.client.GWT; |
8 | 6084aa02 | Christos Stathis | import com.google.gwt.core.client.Scheduler.ScheduledCommand; |
9 | 6084aa02 | Christos Stathis | import com.google.gwt.http.client.Request; |
10 | 6084aa02 | Christos Stathis | import com.google.gwt.http.client.RequestBuilder; |
11 | 6084aa02 | Christos Stathis | import com.google.gwt.http.client.RequestException; |
12 | 6084aa02 | Christos Stathis | import com.google.gwt.http.client.Response; |
13 | 6084aa02 | Christos Stathis | import gr.grnet.pithos.web.client.foldertree.Resource; |
14 | 6084aa02 | Christos Stathis | import java.util.HashMap; |
15 | 6084aa02 | Christos Stathis | import java.util.Map; |
16 | 6084aa02 | Christos Stathis | |
17 | 6084aa02 | Christos Stathis | public abstract class GetRequest<T extends Resource> implements ScheduledCommand { |
18 | 6084aa02 | Christos Stathis | |
19 | 6084aa02 | Christos Stathis | private Class<T> aClass; |
20 | 6084aa02 | Christos Stathis | |
21 | 6084aa02 | Christos Stathis | private String path; |
22 | 6084aa02 | Christos Stathis | |
23 | 6084aa02 | Christos Stathis | private int okCode; |
24 | 6084aa02 | Christos Stathis | |
25 | 6084aa02 | Christos Stathis | private String username; |
26 | 6084aa02 | Christos Stathis | |
27 | 6084aa02 | Christos Stathis | private T cached;
|
28 | 6084aa02 | Christos Stathis | |
29 | 6084aa02 | Christos Stathis | private Map<String, String> headers = new HashMap<String, String>(); |
30 | 6084aa02 | Christos Stathis | |
31 | 6084aa02 | Christos Stathis | public abstract void onSuccess(T result); |
32 | 6084aa02 | Christos Stathis | |
33 | 6084aa02 | Christos Stathis | public abstract void onError(Throwable t); |
34 | 6084aa02 | Christos Stathis | |
35 | 6084aa02 | Christos Stathis | public GetRequest(Class<T> aClass, String path, int okCode) { |
36 | 6084aa02 | Christos Stathis | this.aClass = aClass;
|
37 | 6084aa02 | Christos Stathis | this.path = path;
|
38 | 6084aa02 | Christos Stathis | this.okCode = okCode;
|
39 | 6084aa02 | Christos Stathis | } |
40 | 6084aa02 | Christos Stathis | |
41 | 6084aa02 | Christos Stathis | public GetRequest(Class<T> aClass, String path) { |
42 | 6084aa02 | Christos Stathis | this(aClass, path, -1); |
43 | 6084aa02 | Christos Stathis | } |
44 | 6084aa02 | Christos Stathis | |
45 | 6084aa02 | Christos Stathis | @Override
|
46 | 6084aa02 | Christos Stathis | public void execute() { |
47 | 6084aa02 | Christos Stathis | RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
|
48 | 6084aa02 | Christos Stathis | for (String header : headers.keySet()) |
49 | 6084aa02 | Christos Stathis | builder.setHeader(header, headers.get(header)); |
50 | 6084aa02 | Christos Stathis | try {
|
51 | 6084aa02 | Christos Stathis | builder.sendRequest("", new RestRequestCallback<T>(path, okCode) { |
52 | 6084aa02 | Christos Stathis | @Override
|
53 | 6084aa02 | Christos Stathis | public void onSuccess(T object) { |
54 | 6084aa02 | Christos Stathis | GetRequest.this.onSuccess(object); |
55 | 6084aa02 | Christos Stathis | } |
56 | 6084aa02 | Christos Stathis | |
57 | 6084aa02 | Christos Stathis | @Override
|
58 | 6084aa02 | Christos Stathis | public T deserialize(Response response) {
|
59 | 6084aa02 | Christos Stathis | return Resource.createFromResponse(aClass, response);
|
60 | 6084aa02 | Christos Stathis | } |
61 | 6084aa02 | Christos Stathis | |
62 | 6084aa02 | Christos Stathis | @Override
|
63 | 6084aa02 | Christos Stathis | public void onError(Request request, Throwable throwable) { |
64 | 6084aa02 | Christos Stathis | if (throwable instanceof RestException) { |
65 | 6084aa02 | Christos Stathis | if (((RestException) throwable).getHttpStatusCode() == 304 && cached != null){ |
66 | 6084aa02 | Christos Stathis | GWT.log("Using cache: " + cached.getUri(), null); |
67 | 6084aa02 | Christos Stathis | onSuccess(cached); |
68 | 6084aa02 | Christos Stathis | return;
|
69 | 6084aa02 | Christos Stathis | } |
70 | 6084aa02 | Christos Stathis | } |
71 | 6084aa02 | Christos Stathis | GetRequest.this.onError(throwable); |
72 | 6084aa02 | Christos Stathis | } |
73 | 6084aa02 | Christos Stathis | }); |
74 | 6084aa02 | Christos Stathis | } |
75 | 6084aa02 | Christos Stathis | catch (RequestException e) {
|
76 | 6084aa02 | Christos Stathis | } |
77 | 6084aa02 | Christos Stathis | } |
78 | 6084aa02 | Christos Stathis | |
79 | 6084aa02 | Christos Stathis | public void setHeader(String header, String value) { |
80 | 6084aa02 | Christos Stathis | headers.put(header, value); |
81 | 6084aa02 | Christos Stathis | } |
82 | 6084aa02 | Christos Stathis | } |