1 package gr.grnet.pithos.web.client.catalog;
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;
13 import java.util.List;
16 * The request via which we obtain user catalog info.
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;
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";
31 public GetUserCatalogs(Pithos app) {
32 this(app, null, null);
35 public GetUserCatalogs(Pithos app, String userID) {
36 this(app, Helpers.toList(userID), null);
39 public GetUserCatalogs(Pithos app, List<String> ids) {
43 public GetUserCatalogs(Pithos app, List<String> ids, List<String> names) {
46 // https://server.com/v1/ --> https://server.com
47 String path = app.getApiPath();
48 path = Helpers.stripTrailing(path, "/");
49 path = Helpers.upToIncludingLastPart(path, "/");
50 path = Helpers.stripTrailing(path, "/");
52 // https://server.com/user_catalogs
53 this.url = path + CallEndPoint;
55 this.ids = Helpers.safeList(ids);
56 this.names = Helpers.safeList(names);
57 this.userToken = app.getUserToken();
60 public String getURL() {
64 private JSONObject makeRequestData() {
65 final JSONObject root = new JSONObject();
66 final JSONArray uuids = Helpers.listToJSONArray(ids);
67 final JSONArray displaynames = Helpers.listToJSONArray(names);
69 root.put(RequestField_uuids, uuids);
70 root.put(RequestField_displaynames, displaynames);
75 public UserCatalogs parseResult(JSONObject result) {
76 final UserCatalogs userCatalogs = new UserCatalogs();
77 final JSONObject uuid_catalog = result.get(ResponseField_uuid_catalog).isObject();
78 final JSONObject displayname_catalog = result.get(ResponseField_displayname_catalog).isObject();
80 for(String uuid: uuid_catalog.keySet()) {
81 final String name = uuid_catalog.get(uuid).isString().stringValue();
82 userCatalogs.updateWithIDAndName(uuid, name);
85 for(String name: displayname_catalog.keySet()) {
86 final String uuid = displayname_catalog.get(name).isString().stringValue();
87 userCatalogs.updateWithIDAndName(uuid, name);
93 public void onSuccess(Request request, Response response, JSONObject result, UserCatalogs userCatalogs) {
94 System.out.println("GetUserCatalogs: " + result);
97 public void onBadStatusCode(Request request, Response response) {
101 public void onError(Request request, Throwable t) {
102 GWT.log("GetUserCatalogs", t);
103 System.out.print("GetUserCatalogs: " + t.getClass().getName() + ": " + t.getMessage());
107 public void execute() {
108 final RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, getURL());
109 rb.setHeader("X-Auth-Token", userToken);
110 final String requestData = makeRequestData().toString();
113 System.out.println("==================================");
114 System.out.println("POST " + getURL());
115 System.out.println("==================================");
116 rb.sendRequest(requestData, new RequestCallback() {
118 public void onResponseReceived(Request request, Response response) {
119 final int statusCode = response.getStatusCode();
121 if(statusCode != SuccessCode) {
122 GetUserCatalogs.this.onBadStatusCode(request, response);
126 final String responseText = response.getText();
127 final JSONValue jsonValue = JSONParser.parseStrict(responseText);
128 final JSONObject result = jsonValue.isObject();
131 GetUserCatalogs.this.onError(request, new Exception("GetUserCatalogs: json result is not an object"));
135 final UserCatalogs userCatalogs = parseResult(result);
137 GetUserCatalogs.this.onSuccess(request, response, result, userCatalogs);
141 public void onError(Request request, Throwable exception) {
142 GetUserCatalogs.this.onError(request, exception);
147 GWT.log("GetUserCatalogs", e);
151 public void scheduleDeferred() {
152 Scheduler.get().scheduleDeferred(this);