Statistics
| Branch: | Tag: | Revision:

root / src / gr / grnet / pithos / web / client / foldertree / File.java @ 71875b42

History | View | Annotate | Download (8.7 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 isSharedOrPublished() {
143
        return !permissions.isEmpty() || published;
144
    }
145
    
146
    public boolean isShared() {
147
            return !permissions.isEmpty();
148
    }
149

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

    
169
        inheritedPermissionsFrom = unmarshallString(o, "x_object_shared_by");
170
        String rawPermissions = unmarshallString(o, "x_object_sharing");
171
        if (rawPermissions != null)
172
            parsePermissions(rawPermissions);
173

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

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

    
208
    @Override
209
        public boolean equals(Object other) {
210
        if (other instanceof File) {
211
            File o = (File) other;
212
            return name.equals(o.getName());
213
        }
214
        return false;
215
    }
216

    
217
    @Override
218
        public int hashCode() {
219
        return name.hashCode();
220
    }
221

    
222
    public String getContainer() {
223
        return container;
224
    }
225

    
226
    public static File createFromResponse(String owner, Response response, File result) {
227
        result.populate(owner, response);
228
        return result;
229
    }
230

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

    
265
    public Folder getParent() {
266
        return parent;
267
    }
268

    
269
    public Map<String, String> getMeta() {
270
        return meta;
271
    }
272

    
273
    public boolean isPublished() {
274
        return published;
275
    }
276

    
277
    public String getPublicUri() {
278
        return publicUri;
279
    }
280

    
281
    public Map<String, Boolean[]> getPermissions() {
282
        return permissions;
283
    }
284

    
285
    public String getInheritedPermissionsFrom() {
286
        return inheritedPermissionsFrom;
287
    }
288
}