Statistics
| Branch: | Tag: | Revision:

root / src / gr / grnet / pithos / web / client / catalog / GetUserCatalogs.java @ 2ef4bd13

History | View | Annotate | Download (5.5 kB)

1
package gr.grnet.pithos.web.client.catalog;
2

    
3
import com.google.gwt.core.client.GWT;
4
import com.google.gwt.core.client.Scheduler;
5
import com.google.gwt.http.client.*;
6
import com.google.gwt.json.client.JSONArray;
7
import com.google.gwt.json.client.JSONObject;
8
import com.google.gwt.json.client.JSONParser;
9
import com.google.gwt.json.client.JSONValue;
10
import gr.grnet.pithos.web.client.Helpers;
11
import gr.grnet.pithos.web.client.Pithos;
12

    
13
import java.util.List;
14

    
15
/**
16
 * The request via which we obtain user catalog info.
17
 */
18
public class GetUserCatalogs implements Scheduler.ScheduledCommand {
19
    private final String url;
20
    private final String userToken;
21
    private final List<String> ids;
22
    private final List<String> names;
23

    
24
    public static final int SuccessCode = 200;
25
    public static final String CallEndPoint = "/user_catalogs";
26
    public static final String RequestField_uuids = "uuids";
27
    public static final String RequestField_displaynames = "displaynames";
28
    public static final String ResponseField_displayname_catalog = "displayname_catalog";
29
    public static final String ResponseField_uuid_catalog = "uuid_catalog";
30

    
31
    public GetUserCatalogs(Pithos app) {
32
        this(app, null, null);
33
    }
34

    
35
    public GetUserCatalogs(Pithos app, String userID) {
36
        this(app, Helpers.toList(userID), null);
37
    }
38

    
39
    public GetUserCatalogs(Pithos app, List<String> ids) {
40
        this(app, ids, null);
41
    }
42

    
43
    public GetUserCatalogs(Pithos app, List<String> ids, List<String> names) {
44
        assert app != null;
45

    
46
        // FIXME: Probably use Window.Location.getHost()
47
        // https://server.com/v1/ --> https://server.com
48
        String path = app.getApiPath();
49
        path = Helpers.stripTrailing(path, "/");
50
        path = Helpers.upToIncludingLastPart(path, "/");
51
        path = Helpers.stripTrailing(path, "/");
52

    
53
        // https://server.com/user_catalogs
54
        this.url = path + CallEndPoint;
55

    
56
        this.ids = Helpers.safeList(ids);
57
        this.names = Helpers.safeList(names);
58
        this.userToken = app.getUserToken();
59
    }
60

    
61
    public String getURL() {
62
        return url;
63
    }
64

    
65
    private JSONObject makeRequestData() {
66
        final JSONObject root = new JSONObject();
67
        final JSONArray uuids = Helpers.listToJSONArray(ids);
68
        final JSONArray displaynames = Helpers.listToJSONArray(names);
69

    
70
        root.put(RequestField_uuids, uuids);
71
        root.put(RequestField_displaynames, displaynames);
72

    
73
        return root;
74
    }
75

    
76
    public UserCatalogs parseResult(JSONObject result) {
77
        final UserCatalogs userCatalogs = new UserCatalogs();
78
        final JSONObject uuid_catalog = result.get(ResponseField_uuid_catalog).isObject();
79
        final JSONObject displayname_catalog = result.get(ResponseField_displayname_catalog).isObject();
80

    
81
        for(String uuid: uuid_catalog.keySet()) {
82
            final String name = uuid_catalog.get(uuid).isString().stringValue();
83
            userCatalogs.updateWithIDAndName(uuid, name);
84
        }
85

    
86
        for(String name: displayname_catalog.keySet()) {
87
            final String uuid = displayname_catalog.get(name).isString().stringValue();
88
            userCatalogs.updateWithIDAndName(uuid, name);
89
        }
90

    
91
        return userCatalogs;
92
    }
93

    
94
    public void onSuccess(Request request, Response response, JSONObject result, UserCatalogs userCatalogs) {
95
        System.out.println("GetUserCatalogs: " + result);
96
    }
97

    
98
    public void onBadStatusCode(Request request, Response response) {
99

    
100
    }
101

    
102
    public void onError(Request request, Throwable t) {
103
        GWT.log("GetUserCatalogs", t);
104
        System.out.print("GetUserCatalogs: " + t.getClass().getName() + ": " + t.getMessage());
105
    }
106

    
107
    @Override
108
    public void execute() {
109
        final RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, getURL());
110
        rb.setHeader("X-Auth-Token", userToken);
111
        final String requestData = makeRequestData().toString();
112

    
113
        try {
114
            System.out.println("==================================");
115
            System.out.println("POST " + getURL());
116
            System.out.println("==================================");
117
            rb.sendRequest(requestData, new RequestCallback() {
118
                @Override
119
                public void onResponseReceived(Request request, Response response) {
120
                    final int statusCode = response.getStatusCode();
121

    
122
                    if(statusCode != SuccessCode) {
123
                        GetUserCatalogs.this.onBadStatusCode(request, response);
124
                        return;
125
                    }
126

    
127
                    final String responseText = response.getText();
128
                    final JSONValue jsonValue = JSONParser.parseStrict(responseText);
129
                    final JSONObject result = jsonValue.isObject();
130

    
131
                    if(result == null) {
132
                        GetUserCatalogs.this.onError(request, new Exception("GetUserCatalogs: json result is not an object"));
133
                        return;
134
                    }
135

    
136
                    final UserCatalogs userCatalogs = parseResult(result);
137

    
138
                    GetUserCatalogs.this.onSuccess(request, response, result, userCatalogs);
139
                }
140

    
141
                @Override
142
                public void onError(Request request, Throwable exception) {
143
                    GetUserCatalogs.this.onError(request, exception);
144
                }
145
            });
146
        }
147
        catch(Exception e) {
148
            GWT.log("GetUserCatalogs", e);
149
        }
150
    }
151

    
152
    public void scheduleDeferred() {
153
        Scheduler.get().scheduleDeferred(this);
154
    }
155
}