Statistics
| Branch: | Tag: | Revision:

root / web_client / src / gr / grnet / pithos / web / client / foldertree / AccountResource.java @ 9fce5629

History | View | Annotate | Download (7.2 kB)

1
/*
2
 * Copyright 2011 GRNET S.A. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or
5
 * without modification, are permitted provided that the following
6
 * conditions are met:
7
 *
8
 *   1. Redistributions of source code must retain the above
9
 *      copyright notice, this list of conditions and the following
10
 *      disclaimer.
11
 *
12
 *   2. Redistributions in binary form must reproduce the above
13
 *      copyright notice, this list of conditions and the following
14
 *      disclaimer in the documentation and/or other materials
15
 *      provided with the distribution.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
 * POSSIBILITY OF SUCH DAMAGE.
29
 *
30
 * The views and conclusions contained in the software and
31
 * documentation are those of the authors and should not be
32
 * interpreted as representing official policies, either expressed
33
 * or implied, of GRNET S.A.
34
 */
35

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

    
38
import com.google.gwt.http.client.Header;
39
import com.google.gwt.http.client.Response;
40
import com.google.gwt.i18n.client.DateTimeFormat;
41
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
42
import com.google.gwt.i18n.client.NumberFormat;
43
import com.google.gwt.json.client.JSONArray;
44
import com.google.gwt.json.client.JSONObject;
45
import com.google.gwt.json.client.JSONParser;
46
import com.google.gwt.json.client.JSONValue;
47
import gr.grnet.pithos.web.client.rest.resource.RestResource;
48
import java.util.ArrayList;
49
import java.util.Date;
50
import java.util.LinkedHashSet;
51
import java.util.List;
52
import java.util.Set;
53

    
54
/**
55
 * Created by IntelliJ IDEA. User: chstath Date: 5/19/11 Time: 2:55 PM To change this template use File | Settings |
56
 * File Templates.
57
 */
58
public class AccountResource extends Resource {
59

    
60
    private long numberOfContainers = 0;
61

    
62
    private long numberOfObjects = 0;
63

    
64
    private long bytesUsed = 0;
65

    
66
    private long bytesRemaining = 0;
67

    
68
    private Date lastLogin = null;
69

    
70
    private Date lastModified = null;
71
    
72
    private Set<Folder> containers = new LinkedHashSet<Folder>();
73

    
74
    private Date currentLogin = null;
75

    
76
    private List<Group> groups = new ArrayList<Group>();
77

    
78
    public long getBytesRemaining() {
79
        return bytesRemaining;
80
    }
81

    
82
    public void setBytesRemaining(long bytesRemaining) {
83
        this.bytesRemaining = bytesRemaining;
84
    }
85

    
86
    public long getBytesUsed() {
87
        return bytesUsed;
88
    }
89

    
90
    public void setBytesUsed(long bytesUsed) {
91
        this.bytesUsed = bytesUsed;
92
    }
93

    
94
    public Date getLastLogin() {
95
        return lastLogin;
96
    }
97

    
98
    public void setLastLogin(Date lastLogin) {
99
        this.lastLogin = lastLogin;
100
    }
101

    
102
    public Date getLastModified() {
103
        return lastModified;
104
    }
105

    
106
    public void setLastModified(Date lastModified) {
107
        this.lastModified = lastModified;
108
    }
109

    
110
    public long getNumberOfContainers() {
111
        return numberOfContainers;
112
    }
113

    
114
    public void setNumberOfContainers(long numberOfContainers) {
115
        this.numberOfContainers = numberOfContainers;
116
    }
117

    
118
    public long getNumberOfObjects() {
119
        return numberOfObjects;
120
    }
121

    
122
    public void setNumberOfObjects(long numberOfObjects) {
123
        this.numberOfObjects = numberOfObjects;
124
    }
125

    
126
    public Set<Folder> getContainers() {
127
        return containers;
128
    }
129

    
130
    public Date getCurrentLogin() {
131
        return currentLogin;
132
    }
133

    
134
    public void setCurrentLogin(Date currentLogin) {
135
        this.currentLogin = currentLogin;
136
    }
137

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

    
170
        JSONValue json = JSONParser.parseStrict(response.getText());
171
        JSONArray array = json.isArray();
172
        if (array != null) {
173
            for (int i=0; i<array.size(); i++) {
174
                JSONObject o = array.get(i).isObject();
175
                if (o != null) {
176
                    Folder f = new Folder();
177
                    f.populate(null, o, owner, null);
178
                    containers.add(f);
179
                }
180
            }
181
        }
182
    }
183

    
184
    public static AccountResource createFromResponse(String owner, Response response) {
185
        AccountResource a = new AccountResource();
186
        a.populate(owner, response);
187
        return a;
188
    }
189

    
190
    private String getSize(Long size, Double division){
191
        Double res = Double.valueOf(size.toString())/division;
192
        NumberFormat nf = NumberFormat.getFormat("######.#");
193
        return nf.format(res);
194
    }
195

    
196
    public String getFileSizeAsString() {
197
        if (bytesUsed < 1024)
198
            return String.valueOf(bytesUsed) + " B";
199
        else if (bytesUsed < 1024*1024)
200
            return getSize(bytesUsed, 1024D) + " KB";
201
        else if (bytesUsed < 1024*1024*1024)
202
            return getSize(bytesUsed,(1024D*1024D)) + " MB";
203
        return getSize(bytesUsed , (1024D*1024D*1024D)) + " GB";
204
    }
205

    
206
    public String getQuotaLeftAsString() {
207
        if (bytesRemaining < 1024)
208
            return String.valueOf(bytesRemaining) + " B";
209
        else if (bytesRemaining < 1024 * 1024)
210
            return getSize(bytesRemaining, 1024D) + " KB";
211
        else if (bytesRemaining < 1024 * 1024 * 1024)
212
            return getSize(bytesRemaining,(1024D * 1024D)) + " MB";
213
        return getSize(bytesRemaining , (1024D * 1024D * 1024D)) + " GB";
214
    }
215

    
216
    public List<Group> getGroups() {
217
        return groups;
218
    }
219
}