Show display name in "Shared with me"
[pithos-web-client] / src / gr / grnet / pithos / web / client / catalog / GetUserCatalogs.java
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         // 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, "/");
51
52         // https://server.com/user_catalogs
53         this.url = path + CallEndPoint;
54
55         this.ids = Helpers.safeList(ids);
56         this.names = Helpers.safeList(names);
57         this.userToken = app.getUserToken();
58     }
59
60     public String getURL() {
61         return url;
62     }
63
64     private JSONObject makeRequestData() {
65         final JSONObject root = new JSONObject();
66         final JSONArray uuids = Helpers.listToJSONArray(ids);
67         final JSONArray displaynames = Helpers.listToJSONArray(names);
68
69         root.put(RequestField_uuids, uuids);
70         root.put(RequestField_displaynames, displaynames);
71
72         return root;
73     }
74
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();
79
80         for(String uuid: uuid_catalog.keySet()) {
81             final String name = uuid_catalog.get(uuid).isString().stringValue();
82             userCatalogs.updateWithIDAndName(uuid, name);
83         }
84
85         for(String name: displayname_catalog.keySet()) {
86             final String uuid = displayname_catalog.get(name).isString().stringValue();
87             userCatalogs.updateWithIDAndName(uuid, name);
88         }
89
90         return userCatalogs;
91     }
92
93     public void onSuccess(Request request, Response response, JSONObject result, UserCatalogs userCatalogs) {
94         System.out.println("GetUserCatalogs: " + result);
95     }
96
97     public void onBadStatusCode(Request request, Response response) {
98
99     }
100
101     public void onError(Request request, Throwable t) {
102         GWT.log("GetUserCatalogs", t);
103         System.out.print("GetUserCatalogs: " + t.getClass().getName() + ": " + t.getMessage());
104     }
105
106     @Override
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();
111
112         try {
113             System.out.println("==================================");
114             System.out.println("POST " + getURL());
115             System.out.println("==================================");
116             rb.sendRequest(requestData, new RequestCallback() {
117                 @Override
118                 public void onResponseReceived(Request request, Response response) {
119                     final int statusCode = response.getStatusCode();
120
121                     if(statusCode != SuccessCode) {
122                         GetUserCatalogs.this.onBadStatusCode(request, response);
123                         return;
124                     }
125
126                     final String responseText = response.getText();
127                     final JSONValue jsonValue = JSONParser.parseStrict(responseText);
128                     final JSONObject result = jsonValue.isObject();
129
130                     if(result == null) {
131                         GetUserCatalogs.this.onError(request, new Exception("GetUserCatalogs: json result is not an object"));
132                         return;
133                     }
134
135                     final UserCatalogs userCatalogs = parseResult(result);
136
137                     GetUserCatalogs.this.onSuccess(request, response, result, userCatalogs);
138                 }
139
140                 @Override
141                 public void onError(Request request, Throwable exception) {
142                     GetUserCatalogs.this.onError(request, exception);
143                 }
144             });
145         }
146         catch(Exception e) {
147             GWT.log("GetUserCatalogs", e);
148         }
149     }
150
151     public void scheduleDeferred() {
152         Scheduler.get().scheduleDeferred(this);
153     }
154 }