Statistics
| Branch: | Tag: | Revision:

root / web_client / src / gr / grnet / pithos / web / client / rest / GetRequest.java @ 9e8e14e4

History | View | Annotate | Download (2.5 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 Map<String, String> headers = new HashMap<String, String>();
30

    
31
    public abstract void onSuccess(T result);
32

    
33
    public abstract void onError(Throwable t);
34

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

    
41
    public GetRequest(Class<T> aClass, String path) {
42
        this(aClass, path, -1);
43
    }
44

    
45
    @Override
46
    public void execute() {
47
        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
48
        for (String header : headers.keySet())
49
            builder.setHeader(header, headers.get(header));
50
        try {
51
            builder.sendRequest("", new RestRequestCallback<T>(path, okCode) {
52
                @Override
53
                public void onSuccess(T object) {
54
                    GetRequest.this.onSuccess(object);
55
                }
56

    
57
                @Override
58
                public T deserialize(Response response) {
59
                    return Resource.createFromResponse(aClass, response);
60
                }
61

    
62
                @Override
63
                public void onError(Request request, Throwable throwable) {
64
                    if (throwable instanceof RestException) {
65
                        if (((RestException) throwable).getHttpStatusCode() == 304 && cached != null){
66
                            GWT.log("Using cache: " + cached.getUri(), null);
67
                            onSuccess(cached);
68
                            return;
69
                        }
70
                    }
71
                    GetRequest.this.onError(throwable);
72
                }
73
            });
74
        }
75
        catch (RequestException e) {
76
        }
77
    }
78

    
79
    public void setHeader(String header, String value) {
80
        headers.put(header, value);
81
    }
82
}