Statistics
| Branch: | Tag: | Revision:

root / web_client / src / gr / grnet / pithos / web / client / rest / GetRequest.java @ 1ac430a1

History | View | Annotate | Download (2.7 kB)

1
/*
2
 * Copyright (c) 2011 Greek Research and Technology Network
3
 */
4

    
5
package gr.grnet.pithos.web.client.rest;
6

    
7
import com.google.gwt.core.client.GWT;
8
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
9
import com.google.gwt.http.client.Request;
10
import com.google.gwt.http.client.RequestBuilder;
11
import com.google.gwt.http.client.RequestException;
12
import com.google.gwt.http.client.Response;
13
import gr.grnet.pithos.web.client.foldertree.Resource;
14
import java.util.HashMap;
15
import java.util.Map;
16

    
17
public abstract class GetRequest<T extends Resource> implements ScheduledCommand {
18

    
19
    private Class<T> aClass;
20

    
21
    private String path;
22

    
23
    private int okCode;
24
    
25
    private String username;
26

    
27
    private T cached;
28

    
29
    private T result;
30

    
31
    private Map<String, String> headers = new HashMap<String, String>();
32

    
33
    public abstract void onSuccess(T result);
34

    
35
    public abstract void onError(Throwable t);
36

    
37
    public GetRequest(Class<T> aClass, String path, int okCode, T result) {
38
        this.aClass = aClass;
39
        this.path = path;
40
        this.okCode = okCode;
41
        this.result = result;
42
    }
43

    
44
    public GetRequest(Class<T> aClass, String path) {
45
        this(aClass, path, -1, null);
46
    }
47

    
48
    public GetRequest(Class<T> aClass, String path, T result) {
49
        this(aClass, path, -1, result);
50
    }
51

    
52
    @Override
53
    public void execute() {
54
        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
55
        for (String header : headers.keySet())
56
            builder.setHeader(header, headers.get(header));
57
        try {
58
            builder.sendRequest("", new RestRequestCallback<T>(path, okCode) {
59
                @Override
60
                public void onSuccess(T object) {
61
                    GetRequest.this.onSuccess(object);
62
                }
63

    
64
                @Override
65
                public T deserialize(Response response) {
66
                    return Resource.createFromResponse(aClass, response, result);
67
                }
68

    
69
                @Override
70
                public void onError(Request request, Throwable throwable) {
71
                    if (throwable instanceof RestException) {
72
                        if (((RestException) throwable).getHttpStatusCode() == 304 && cached != null){
73
                            GWT.log("Using cache: " + cached.toString(), null);
74
                            onSuccess(cached);
75
                            return;
76
                        }
77
                    }
78
                    GetRequest.this.onError(throwable);
79
                }
80
            });
81
        }
82
        catch (RequestException e) {
83
        }
84
    }
85

    
86
    public void setHeader(String header, String value) {
87
        headers.put(header, value);
88
    }
89
}