Revision ee77dbf1 src/gr/grnet/pithos/web/client/foldertree/AccountResource.java

b/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java
35 35

  
36 36
package gr.grnet.pithos.web.client.foldertree;
37 37

  
38
import gr.grnet.pithos.web.client.Const;
39
import gr.grnet.pithos.web.client.Resource;
40
import gr.grnet.pithos.web.client.grouptree.Group;
41

  
42
import java.util.ArrayList;
43
import java.util.Date;
44
import java.util.List;
45

  
46 38
import com.google.gwt.http.client.Header;
47 39
import com.google.gwt.http.client.Response;
48 40
import com.google.gwt.http.client.URL;
......
53 45
import com.google.gwt.json.client.JSONObject;
54 46
import com.google.gwt.json.client.JSONParser;
55 47
import com.google.gwt.json.client.JSONValue;
48
import gr.grnet.pithos.web.client.Const;
49
import gr.grnet.pithos.web.client.Pithos;
50
import gr.grnet.pithos.web.client.Resource;
51
import gr.grnet.pithos.web.client.catalog.UpdateUserCatalogs;
52
import gr.grnet.pithos.web.client.catalog.UserCatalogs;
53
import gr.grnet.pithos.web.client.grouptree.Group;
54
import gr.grnet.pithos.web.client.grouptree.User;
55

  
56
import java.util.*;
56 57

  
57 58
/**
58 59
 * Created by IntelliJ IDEA. User: chstath Date: 5/19/11 Time: 2:55 PM To change this template use File | Settings |
59 60
 * File Templates.
60 61
 */
61 62
public class AccountResource extends Resource {
63
    private final Pithos app;
62 64

  
63 65
    private long numberOfContainers = 0;
64 66

  
......
71 73
    private Date lastLogin = null;
72 74

  
73 75
    private Date lastModified = null;
74
    
76

  
75 77
    private List<Folder> containers = new ArrayList<Folder>();
76 78

  
77 79
    private Date currentLogin = null;
78 80

  
79 81
    private List<Group> groups = new ArrayList<Group>();
80 82

  
83
    public AccountResource(Pithos app) {
84
        this.app = app;
85
    }
86

  
81 87
    public long getQuota() {
82 88
        return quota;
83 89
    }
......
103 109
    }
104 110

  
105 111
    @Override
106
	public Date getLastModified() {
112
    public Date getLastModified() {
107 113
        return lastModified;
108 114
    }
109 115

  
......
139 145
        this.currentLogin = currentLogin;
140 146
    }
141 147

  
148
    private void doAddUsersByIDs(final List<String> userIDs, final String groupName) {
149
        app.LOG("AccountResource::doAddUsersByIDs(), group = ", groupName);
150
        final Group group = new Group(groupName);
151
        for(String userID : userIDs) {
152
            final String userDisplayName = app.getUserDisplayNameForID(userID);
153
            final User user = new User(userID, userDisplayName, groupName);
154
            group.addUser(user);
155
            app.LOG("AccountResource::doAddUsersByIDs(),   user = (", userID, ", ", userDisplayName, ")");
156

  
157
        }
158
        groups.add(group);
159

  
160
    }
161

  
142 162
    public void populate(String owner, Response response) {
143 163
        DateTimeFormat df = DateTimeFormat.getFormat(PredefinedFormat.RFC_2822);
144 164
        groups.clear();
145
        for (Header h : response.getHeaders()) {
146
        	if (h != null) {
147
		        String name = h.getName();
148
		        if (name.startsWith("X-Account-Group-")) {
149
		            String groupName = URL.decodePathSegment(name.substring("X-Account-Group-".length()));
150
		            Group g = new Group(groupName);
151
		            String[] members = h.getValue().split(",");
152
		            for (String s : members)
153
		                g.addMember(URL.decodePathSegment(s).trim());
154
		            groups.add(g);
155
		        }
156
		        else if (name.equals("X-Account-Container-Count")) {
157
		            numberOfContainers = Long.valueOf(h.getValue());
158
		        }
159
		        else if (name.equals("X-Account-Object-Count")) {
160
		            numberOfObjects = Long.valueOf(h.getValue());
161
		        }
162
		        else if (name.equals("X-Account-Bytes-Used")) {
163
		            bytesUsed = Long.valueOf(h.getValue());
164
		        }
165
		        else if (name.equals("X-Account-Policy-Quota")) {
166
		            quota = Long.valueOf(h.getValue());
167
		        }
168
		        else if (name.equals("X-Account-Last-Login")) {
169
		            lastLogin = df.parse(h.getValue());
170
		        }
171
		        else if (name.equals("Last-Modified")) {
172
		            lastModified = df.parse(h.getValue());
173
		        }
174
        	}
165

  
166
        final Map<String, List<String>> parsedGroups = new HashMap<String, List<String>>();
167

  
168
        for(Header h : response.getHeaders()) {
169
            if(h != null) {
170
                String name = h.getName();
171
                if(name.startsWith(Const.X_ACCOUNT_GROUP_)) {
172
                    final String groupName = URL.decodePathSegment(name.substring(Const.X_ACCOUNT_GROUP_.length()));
173
                    final String[] users = h.getValue().split(",");
174
                    final List<String> userIDs = new ArrayList<String>();
175
                    for(String user : users) {
176
                        final String userID = URL.decodePathSegment(user).trim();
177
                        userIDs.add(userID);
178
                    }
179
                    parsedGroups.put(groupName, userIDs);
180
                }
181
                else if(name.equals(Const.X_ACCOUNT_CONTAINER_COUNT)) {
182
                    numberOfContainers = Long.valueOf(h.getValue());
183
                }
184
                else if(name.equals(Const.X_ACCOUNT_OBJECT_COUNT)) {
185
                    numberOfObjects = Long.valueOf(h.getValue());
186
                }
187
                else if(name.equals(Const.X_ACCOUNT_BYTES_USED)) {
188
                    bytesUsed = Long.valueOf(h.getValue());
189
                }
190
                else if(name.equals(Const.X_ACCOUNT_POLICY_QUOTA)) {
191
                    quota = Long.valueOf(h.getValue());
192
                }
193
                else if(name.equals(Const.X_ACCOUNT_LAST_LOGIN)) {
194
                    lastLogin = df.parse(h.getValue());
195
                }
196
                else if(name.equals(Const.LAST_MODIFIED)) {
197
                    lastModified = df.parse(h.getValue());
198
                }
199
            }
200
        }
201
        
202
        // Gather all unknown users for the groups
203
        final List<String> userIDsWithUnknownDisplayName = new ArrayList<String>();
204
        for(Map.Entry<String, List<String>> parsedGroupEntry : parsedGroups.entrySet()) {
205
            final List<String> groupUserIDs = parsedGroupEntry.getValue();
206
            userIDsWithUnknownDisplayName.addAll(app.filterUserIDsWithUnknownDisplayName(groupUserIDs));
207
        }
208
        if(userIDsWithUnknownDisplayName.size() == 0) {
209
            for(Map.Entry<String, List<String>> parsedGroupEntry : parsedGroups.entrySet()) {
210
                final String groupName = parsedGroupEntry.getKey();
211
                final List<String> groupUserIDs = parsedGroupEntry.getValue();
212
                doAddUsersByIDs(groupUserIDs, groupName);
213
            }
214
        }
215
        else {
216
            new UpdateUserCatalogs(app, userIDsWithUnknownDisplayName) {
217
                @Override
218
                public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) {
219
                    for(Map.Entry<String, List<String>> parsedGroupEntry : parsedGroups.entrySet()) {
220
                        final String groupName = parsedGroupEntry.getKey();
221
                        final List<String> groupUserIDs = parsedGroupEntry.getValue();
222
                        doAddUsersByIDs(groupUserIDs, groupName);
223
                    }
224
                }
225
            }.scheduleEntry();
175 226
        }
176 227

  
177
        if (response.getText() != null && response.getText().length() > 0) {
178
        	containers.clear();
179
	        JSONValue json = JSONParser.parseStrict(response.getText());
180
	        JSONArray array = json.isArray();
181
	        if (array != null) {
182
	            for (int i=0; i<array.size(); i++) {
183
	                JSONObject o = array.get(i).isObject();
184
	                if (o != null) {
185
	                    Folder f = new Folder();
186
	                    f.populate(null, o, owner, null);
187
	                    containers.add(f);
188
	                }
189
	            }
190
	        }
228
        if(response.getText() != null && response.getText().length() > 0) {
229
            containers.clear();
230
            JSONValue json = JSONParser.parseStrict(response.getText());
231
            JSONArray array = json.isArray();
232
            if(array != null) {
233
                for(int i = 0; i < array.size(); i++) {
234
                    JSONObject o = array.get(i).isObject();
235
                    if(o != null) {
236
                        Folder f = new Folder();
237
                        f.populate(null, o, owner, null);
238
                        containers.add(f);
239
                    }
240
                }
241
            }
191 242
        }
192 243
    }
193 244

  
194
    public static AccountResource createFromResponse(String owner, Response response, AccountResource result) {
195
    	AccountResource a;
196
    	if (result == null)
197
    		a = new AccountResource();
198
    	else
199
    		a = result;
245
    public static AccountResource createFromResponse(Pithos app, String owner, Response response, AccountResource result) {
246
        AccountResource a;
247
        if(result == null) {
248
            a = new AccountResource(app);
249
        }
250
        else {
251
            a = result;
252
        }
200 253
        a.populate(owner, response);
201 254
        return a;
202 255
    }
203 256

  
204
    private String getSize(Long size, Double division){
205
        Double res = Double.valueOf(size.toString())/division;
206
        NumberFormat nf = NumberFormat.getFormat("######.#");
257
    private String getSize(Long size, Double division) {
258
        Double res = Double.valueOf(size.toString()) / division;
259
        NumberFormat nf = NumberFormat.getFormat(Const.NUMBER_FORMAT_1);
207 260
        return nf.format(res);
208 261
    }
209 262

  
210 263
    public String getFileSizeAsString() {
211
        if (bytesUsed < 1024)
264
        if(bytesUsed < 1024) {
212 265
            return String.valueOf(bytesUsed) + "B";
213
        else if (bytesUsed < 1024*1024)
266
        }
267
        else if(bytesUsed < 1024 * 1024) {
214 268
            return getSize(bytesUsed, 1024D) + "KB";
215
        else if (bytesUsed < 1024*1024*1024)
216
            return getSize(bytesUsed,(1024D*1024D)) + "MB";
217
        return getSize(bytesUsed , (1024D*1024D*1024D)) + "GB";
269
        }
270
        else if(bytesUsed < 1024 * 1024 * 1024) {
271
            return getSize(bytesUsed, (1024D * 1024D)) + "MB";
272
        }
273
        return getSize(bytesUsed, (1024D * 1024D * 1024D)) + "GB";
218 274
    }
219 275

  
220 276
    public String getQuotaAsString() {
221
        if (quota < 1024)
277
        if(quota < 1024) {
222 278
            return String.valueOf(quota) + "B";
223
        else if (quota < 1024 * 1024)
279
        }
280
        else if(quota < 1024 * 1024) {
224 281
            return getSize(quota, 1024D) + "KB";
225
        else if (quota < 1024 * 1024 * 1024)
226
            return getSize(quota,(1024D * 1024D)) + "MB";
227
        return getSize(quota , (1024D * 1024D * 1024D)) + "GB";
282
        }
283
        else if(quota < 1024 * 1024 * 1024) {
284
            return getSize(quota, (1024D * 1024D)) + "MB";
285
        }
286
        return getSize(quota, (1024D * 1024D * 1024D)) + "GB";
228 287
    }
229 288

  
230 289
    public List<Group> getGroups() {
231 290
        return groups;
232 291
    }
233
    
292

  
234 293
    public boolean hasHomeContainer() {
235
    	for (Folder f : containers)
236
    		if (f.getName().equals(Const.HOME_CONTAINER))
237
    			return true;
238
    	return false;
294
        for(Folder f : containers) {
295
            if(f.getName().equals(Const.HOME_CONTAINER)) {
296
                return true;
297
            }
298
        }
299
        return false;
239 300
    }
240 301

  
241 302
    public boolean hasTrashContainer() {
242
    	for (Folder f : containers)
243
    		if (f.getName().equals(Const.TRASH_CONTAINER))
244
    			return true;
245
    	return false;
303
        for(Folder f : containers) {
304
            if(f.getName().equals(Const.TRASH_CONTAINER)) {
305
                return true;
306
            }
307
        }
308
        return false;
309
    }
310

  
311
    public void addGroup(Group group) {
312
        groups.add(group);
313
    }
314

  
315
    public void removeGroup(Group group) {
316
        groups.remove(group);
246 317
    }
247 318

  
248
	public void addGroup(Group newGroup) {
249
		groups.add(newGroup);
250
	}
251

  
252
	public void removeGroup(Group group) {
253
		groups.remove(group);
254
	}
255

  
256
	public Folder getTrash() {
257
		for (Folder c : containers) {
258
			if (c.getName().equals(Const.TRASH_CONTAINER))
259
				return c;
260
		}
261
		return null;
262
	}
263

  
264
	public double getUsedPercentage() {
265
		if (quota == 0)
266
			return 0;
267
		return ((double) bytesUsed) / quota;
268
	}
269

  
270
	public Folder getPithos() {
271
		for (Folder f : containers)
272
			if (f.getName().equals(Const.HOME_CONTAINER))
273
				return f;
274
		return null;
275
	}
276

  
277
	public Group getGroup(String groupName) {
278
		for (Group g : groups)
279
			if (g.getName().equalsIgnoreCase(groupName))
280
				return g;
281
		return null;
282
	}
319
    public Folder getTrash() {
320
        for(Folder c : containers) {
321
            if(c.getName().equals(Const.TRASH_CONTAINER)) {
322
                return c;
323
            }
324
        }
325
        return null;
326
    }
327

  
328
    public double getUsedPercentage() {
329
        if(quota == 0) {
330
            return 0;
331
        }
332
        return ((double) bytesUsed) / quota;
333
    }
334

  
335
    public Folder getPithos() {
336
        for(Folder f : containers) {
337
            if(f.getName().equals(Const.HOME_CONTAINER)) {
338
                return f;
339
            }
340
        }
341
        return null;
342
    }
343

  
344
    public Group getGroup(String groupName) {
345
        for(Group g : groups) {
346
            if(g.getName().equalsIgnoreCase(groupName)) {
347
                return g;
348
            }
349
        }
350
        return null;
351
    }
283 352
}

Also available in: Unified diff