Statistics
| Branch: | Tag: | Revision:

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
}