Statistics
| Branch: | Tag: | Revision:

root / src / gr / grnet / pithos / web / client / foldertree / File.java @ 4d869bf1

History | View | Annotate | Download (8.6 kB)

1
/*
2
 * Copyright 2011-2012 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 java.util.Date;
39
import java.util.HashMap;
40
import java.util.Map;
41

    
42
import com.google.gwt.http.client.Header;
43
import com.google.gwt.http.client.Response;
44
import com.google.gwt.http.client.URL;
45
import com.google.gwt.i18n.client.DateTimeFormat;
46
import com.google.gwt.i18n.client.NumberFormat;
47
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
48
import com.google.gwt.json.client.JSONObject;
49
import com.google.gwt.json.client.JSONValue;
50

    
51
public class File extends Resource {
52
    private String name;
53

    
54
    private String hash;
55

    
56
    private int version;
57

    
58
    private long bytes;
59

    
60
    private String contentType;
61

    
62
    private Date lastModified;
63

    
64
    private String modifiedBy;
65

    
66
    private Date versionTimestamp;
67

    
68
    private String path;
69

    
70
    private String owner;
71

    
72
    private String container;
73

    
74
    private Folder parent;
75

    
76
    private Map<String, String> meta = new HashMap<String, String>();
77

    
78
    private boolean published;
79

    
80
    private String publicUri;
81

    
82
    private Map<String, Boolean[]> permissions = new HashMap<String, Boolean[]>();
83

    
84
    private String inheritedPermissionsFrom;
85

    
86
    public String getContentType() {
87
        return contentType;
88
    }
89

    
90
    public String getHash() {
91
        return hash;
92
    }
93

    
94
    @Override
95
        public Date getLastModified() {
96
        return lastModified;
97
    }
98

    
99
    public String getModifiedBy() {
100
        return modifiedBy;
101
    }
102

    
103
    public String getName() {
104
        return name;
105
    }
106

    
107
    public int getVersion() {
108
        return version;
109
    }
110

    
111
    public Date getVersionTimestamp() {
112
        return versionTimestamp;
113
    }
114

    
115
    public String getUri() {
116
        return "/" + container + "/" + path;
117
    }
118

    
119
    public String getOwner() {
120
        return owner;
121
    }
122

    
123
    public String getPath() {
124
        return path;
125
    }
126

    
127
    public long getBytes() {
128
        return bytes;
129
    }
130

    
131
    public String getSizeAsString() {
132
        NumberFormat nf = NumberFormat.getFormat("######.#");
133
        if (bytes < 1024)
134
            return String.valueOf(bytes) + " B";
135
        else if (bytes < 1024 * 1024)
136
            return nf.format(Double.valueOf(bytes)/(1024)) + " KB";
137
        else if (bytes < 1024 * 1024 * 1024)
138
            return nf.format(Double.valueOf(bytes)/(1024 * 1024)) + " MB";
139
        return nf.format(Double.valueOf(bytes)/(1024 * 1024 * 1024)) + " GB";
140
    }
141

    
142
    public boolean isShared() {
143
        return !permissions.isEmpty() || published;
144
    }
145

    
146
    public void populate(Folder _parent, JSONObject o, String _owner, String _container) {
147
        this.parent = _parent;
148
        path = unmarshallString(o, "name");
149
        if (parent != null && parent.getPrefix().length() > 0)
150
                name = path.substring(parent.getPrefix().length() + 1);
151
        else
152
            name = path;
153
        this.owner = _owner;
154
        hash = unmarshallString(o, "hash");
155
        bytes = unmarshallLong(o, "bytes");
156
        version = unmarshallInt(o, "version");
157
        contentType = unmarshallString(o, "content_type");
158
        lastModified = unmarshallDate(o, "last_modified");
159
        modifiedBy = unmarshallString(o, "modified_by");
160
        versionTimestamp = unmarshallDate(o, "version_timestamp");
161
        published = o.containsKey("x_object_public") ? true : false;
162
        publicUri = unmarshallString(o, "x_object_public");
163
        this.container = _container;
164

    
165
        inheritedPermissionsFrom = unmarshallString(o, "x_object_shared_by");
166
        String rawPermissions = unmarshallString(o, "x_object_sharing");
167
        if (rawPermissions != null)
168
            parsePermissions(rawPermissions);
169

    
170
        JSONValue metaValue = o.get("x_object_meta");
171
        if (metaValue != null) {
172
                JSONObject metaObj = metaValue.isObject();
173
                if (metaObj != null) {
174
                        for (String key: metaObj.keySet()) {
175
                    meta.put(key, unmarshallString(metaObj, key));
176
                        }
177
                }
178
        }
179
    }
180

    
181
    private void parsePermissions(String rawPermissions) {
182
        String[] readwrite = rawPermissions.split(";");
183
        for (String s : readwrite) {
184
            String[] part = s.split("=");
185
            String perm = part[0].trim();
186
            String[] users = part[1].split(",");
187
            for (String u : users) {
188
                String user = u.trim();
189
                Boolean[] userPerm = permissions.get(u);
190
                if (userPerm == null) {
191
                    userPerm = new Boolean[2];
192
                    permissions.put(user, userPerm);
193
                }
194
                if (perm.equals("read")) {
195
                    userPerm[0] = Boolean.TRUE;
196
                }
197
                else if (perm.equals("write")) {
198
                    userPerm[1] = Boolean.TRUE;
199
                }
200
            }
201
        }
202
    }
203

    
204
    @Override
205
        public boolean equals(Object other) {
206
        if (other instanceof File) {
207
            File o = (File) other;
208
            return name.equals(o.getName());
209
        }
210
        return false;
211
    }
212

    
213
    @Override
214
        public int hashCode() {
215
        return name.hashCode();
216
    }
217

    
218
    public String getContainer() {
219
        return container;
220
    }
221

    
222
    public static File createFromResponse(String owner, Response response, File result) {
223
        result.populate(owner, response);
224
        return result;
225
    }
226

    
227
    private void populate(String _owner, Response response) {
228
        this.owner = _owner;
229
        published = false;
230
        publicUri = null;
231
        permissions.clear();
232
        for (Header h : response.getHeaders()) {
233
                if (h == null)
234
                        continue; //IE bug. h cannot be null in the general case
235
            String header = h.getName();
236
            if (header.startsWith("X-Object-Meta-"))
237
                meta.put(URL.decodePathSegment(header.substring("X-Object-Meta-".length())), URL.decodePathSegment(h.getValue()));
238
            else if (header.equals("X-Object-Sharing")) {
239
                String rawPermissions = h.getValue();
240
                parsePermissions(URL.decodePathSegment(rawPermissions));
241
            }
242
            else if (header.equals("X-Object-Shared-By")) {
243
                inheritedPermissionsFrom = URL.decodePathSegment(h.getValue());
244
            }
245
            else if (header.equals("Content-Length")) {
246
                bytes = Long.parseLong(h.getValue());
247
            }
248
            else if (header.equals("Content-Type")) {
249
                    contentType = h.getValue();
250
            }
251
            else if (header.equals("Last-Modified")) {
252
                    lastModified = DateTimeFormat.getFormat(PredefinedFormat.RFC_2822).parse(h.getValue());
253
            }
254
            else if (header.equals("X-Object-Public")) {
255
                    published = true;
256
                    publicUri = h.getValue();
257
            }
258
        }
259
    }
260

    
261
    public Folder getParent() {
262
        return parent;
263
    }
264

    
265
    public Map<String, String> getMeta() {
266
        return meta;
267
    }
268

    
269
    public boolean isPublished() {
270
        return published;
271
    }
272

    
273
    public String getPublicUri() {
274
        return publicUri;
275
    }
276

    
277
    public Map<String, Boolean[]> getPermissions() {
278
        return permissions;
279
    }
280

    
281
    public String getInheritedPermissionsFrom() {
282
        return inheritedPermissionsFrom;
283
    }
284
}