Statistics
| Branch: | Tag: | Revision:

root / src / gr / grnet / pithos / web / client / rest / resource / FolderResource.java @ 63366925

History | View | Annotate | Download (16.1 kB)

1 a57faaf0 Christos Stathis
/*
2 63366925 Christos Stathis
 * Copyright 2011 GRNET S.A. All rights reserved.
3 63366925 Christos Stathis
 *
4 63366925 Christos Stathis
 * Redistribution and use in source and binary forms, with or
5 63366925 Christos Stathis
 * without modification, are permitted provided that the following
6 63366925 Christos Stathis
 * conditions are met:
7 63366925 Christos Stathis
 *
8 63366925 Christos Stathis
 *   1. Redistributions of source code must retain the above
9 63366925 Christos Stathis
 *      copyright notice, this list of conditions and the following
10 63366925 Christos Stathis
 *      disclaimer.
11 63366925 Christos Stathis
 *
12 63366925 Christos Stathis
 *   2. Redistributions in binary form must reproduce the above
13 63366925 Christos Stathis
 *      copyright notice, this list of conditions and the following
14 63366925 Christos Stathis
 *      disclaimer in the documentation and/or other materials
15 63366925 Christos Stathis
 *      provided with the distribution.
16 63366925 Christos Stathis
 *
17 63366925 Christos Stathis
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18 63366925 Christos Stathis
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 63366925 Christos Stathis
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 63366925 Christos Stathis
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21 63366925 Christos Stathis
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 63366925 Christos Stathis
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 63366925 Christos Stathis
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 63366925 Christos Stathis
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 63366925 Christos Stathis
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 63366925 Christos Stathis
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 63366925 Christos Stathis
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 63366925 Christos Stathis
 * POSSIBILITY OF SUCH DAMAGE.
29 63366925 Christos Stathis
 *
30 63366925 Christos Stathis
 * The views and conclusions contained in the software and
31 63366925 Christos Stathis
 * documentation are those of the authors and should not be
32 63366925 Christos Stathis
 * interpreted as representing official policies, either expressed
33 63366925 Christos Stathis
 * or implied, of GRNET S.A.
34 a57faaf0 Christos Stathis
 */
35 a57faaf0 Christos Stathis
36 a57faaf0 Christos Stathis
package gr.grnet.pithos.web.client.rest.resource;
37 a57faaf0 Christos Stathis
38 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.DisplayHelper;
39 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.GSS;
40 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.rest.MultipleGetCommand;
41 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.rest.MultipleGetCommand.Cached;
42 a57faaf0 Christos Stathis
43 a57faaf0 Christos Stathis
import java.util.ArrayList;
44 a57faaf0 Christos Stathis
import java.util.Date;
45 a57faaf0 Christos Stathis
import java.util.HashSet;
46 a57faaf0 Christos Stathis
import java.util.LinkedList;
47 a57faaf0 Christos Stathis
import java.util.List;
48 a57faaf0 Christos Stathis
import java.util.Set;
49 a57faaf0 Christos Stathis
50 a57faaf0 Christos Stathis
import com.google.gwt.core.client.GWT;
51 a57faaf0 Christos Stathis
import com.google.gwt.http.client.URL;
52 a57faaf0 Christos Stathis
import com.google.gwt.json.client.JSONArray;
53 a57faaf0 Christos Stathis
import com.google.gwt.json.client.JSONObject;
54 a57faaf0 Christos Stathis
import com.google.gwt.json.client.JSONParser;
55 a57faaf0 Christos Stathis
import com.google.gwt.user.client.ui.TreeItem;
56 a57faaf0 Christos Stathis
57 a57faaf0 Christos Stathis
public class FolderResource extends RestResource {
58 a57faaf0 Christos Stathis
59 a57faaf0 Christos Stathis
        public FolderResource(String aUri) {
60 a57faaf0 Christos Stathis
                super(aUri);
61 a57faaf0 Christos Stathis
        }
62 a57faaf0 Christos Stathis
63 a57faaf0 Christos Stathis
        String name;
64 a57faaf0 Christos Stathis
65 a57faaf0 Christos Stathis
        String owner;
66 a57faaf0 Christos Stathis
67 a57faaf0 Christos Stathis
        String createdBy;
68 a57faaf0 Christos Stathis
69 a57faaf0 Christos Stathis
        String modifiedBy;
70 a57faaf0 Christos Stathis
71 a57faaf0 Christos Stathis
        Date creationDate;
72 a57faaf0 Christos Stathis
73 a57faaf0 Christos Stathis
        Date modificationDate;
74 a57faaf0 Christos Stathis
75 a57faaf0 Christos Stathis
        List<String> filePaths = new LinkedList<String>();
76 a57faaf0 Christos Stathis
77 a57faaf0 Christos Stathis
        List<String> subfolderPaths = new LinkedList<String>();
78 a57faaf0 Christos Stathis
79 a57faaf0 Christos Stathis
        Set<PermissionHolder> permissions = new HashSet<PermissionHolder>();
80 a57faaf0 Christos Stathis
81 a57faaf0 Christos Stathis
        List<FolderResource> folders = new ArrayList<FolderResource>();
82 a57faaf0 Christos Stathis
83 a57faaf0 Christos Stathis
        List<FileResource> files = new ArrayList<FileResource>();
84 a57faaf0 Christos Stathis
85 a57faaf0 Christos Stathis
        String parentURI;
86 a57faaf0 Christos Stathis
87 a57faaf0 Christos Stathis
        boolean deleted = false;
88 a57faaf0 Christos Stathis
89 a57faaf0 Christos Stathis
        boolean needsExpanding = false;
90 a57faaf0 Christos Stathis
91 a57faaf0 Christos Stathis
        String parentName;
92 a57faaf0 Christos Stathis
93 a57faaf0 Christos Stathis
        private boolean filesExpanded=false;
94 a57faaf0 Christos Stathis
95 a57faaf0 Christos Stathis
        boolean readForAll;
96 a57faaf0 Christos Stathis
        
97 a57faaf0 Christos Stathis
        Boolean shared;
98 a57faaf0 Christos Stathis
        
99 a57faaf0 Christos Stathis
        
100 a57faaf0 Christos Stathis
        
101 a57faaf0 Christos Stathis
        
102 a57faaf0 Christos Stathis
        
103 a57faaf0 Christos Stathis
        /**
104 a57faaf0 Christos Stathis
         * Modify the shared.
105 a57faaf0 Christos Stathis
         *
106 a57faaf0 Christos Stathis
         * @param shared the shared to set
107 a57faaf0 Christos Stathis
         */
108 a57faaf0 Christos Stathis
        public void setShared(Boolean shared) {
109 a57faaf0 Christos Stathis
                this.shared = shared;
110 a57faaf0 Christos Stathis
        }
111 a57faaf0 Christos Stathis
112 a57faaf0 Christos Stathis
        /**
113 a57faaf0 Christos Stathis
         * Modify the parentName.
114 a57faaf0 Christos Stathis
         *
115 a57faaf0 Christos Stathis
         * @param aParentName the parentName to set
116 a57faaf0 Christos Stathis
         */
117 a57faaf0 Christos Stathis
        public void setParentName(String aParentName) {
118 a57faaf0 Christos Stathis
                parentName = aParentName;
119 a57faaf0 Christos Stathis
        }
120 a57faaf0 Christos Stathis
121 a57faaf0 Christos Stathis
        /**
122 a57faaf0 Christos Stathis
         * Retrieve the name.
123 a57faaf0 Christos Stathis
         *
124 a57faaf0 Christos Stathis
         * @return the name
125 a57faaf0 Christos Stathis
         */
126 a57faaf0 Christos Stathis
        @Override
127 a57faaf0 Christos Stathis
        public String getName() {
128 a57faaf0 Christos Stathis
                return name;
129 a57faaf0 Christos Stathis
        }
130 a57faaf0 Christos Stathis
131 a57faaf0 Christos Stathis
        /**
132 a57faaf0 Christos Stathis
         * Modify the name.
133 a57faaf0 Christos Stathis
         *
134 a57faaf0 Christos Stathis
         * @param aName the name to set
135 a57faaf0 Christos Stathis
         */
136 a57faaf0 Christos Stathis
        public void setName(String aName) {
137 a57faaf0 Christos Stathis
                name = aName;
138 a57faaf0 Christos Stathis
        }
139 a57faaf0 Christos Stathis
140 a57faaf0 Christos Stathis
        /**
141 a57faaf0 Christos Stathis
         * Retrieve the owner.
142 a57faaf0 Christos Stathis
         *
143 a57faaf0 Christos Stathis
         * @return the owner
144 a57faaf0 Christos Stathis
         */
145 a57faaf0 Christos Stathis
        public String getOwner() {
146 a57faaf0 Christos Stathis
                return owner;
147 a57faaf0 Christos Stathis
        }
148 a57faaf0 Christos Stathis
149 a57faaf0 Christos Stathis
        /**
150 a57faaf0 Christos Stathis
         * Modify the owner.
151 a57faaf0 Christos Stathis
         *
152 a57faaf0 Christos Stathis
         * @param anOwner the owner to set
153 a57faaf0 Christos Stathis
         */
154 a57faaf0 Christos Stathis
        public void setOwner(String anOwner) {
155 a57faaf0 Christos Stathis
                owner = anOwner;
156 a57faaf0 Christos Stathis
        }
157 a57faaf0 Christos Stathis
158 a57faaf0 Christos Stathis
        /**
159 a57faaf0 Christos Stathis
         * Retrieve the createdBy.
160 a57faaf0 Christos Stathis
         *
161 a57faaf0 Christos Stathis
         * @return the createdBy
162 a57faaf0 Christos Stathis
         */
163 a57faaf0 Christos Stathis
        public String getCreatedBy() {
164 a57faaf0 Christos Stathis
                return createdBy;
165 a57faaf0 Christos Stathis
        }
166 a57faaf0 Christos Stathis
167 a57faaf0 Christos Stathis
        /**
168 a57faaf0 Christos Stathis
         * Modify the createdBy.
169 a57faaf0 Christos Stathis
         *
170 a57faaf0 Christos Stathis
         * @param aCreatedBy the createdBy to set
171 a57faaf0 Christos Stathis
         */
172 a57faaf0 Christos Stathis
        public void setCreatedBy(String aCreatedBy) {
173 a57faaf0 Christos Stathis
                createdBy = aCreatedBy;
174 a57faaf0 Christos Stathis
        }
175 a57faaf0 Christos Stathis
176 a57faaf0 Christos Stathis
        /**
177 a57faaf0 Christos Stathis
         * Retrieve the modifiedBy.
178 a57faaf0 Christos Stathis
         *
179 a57faaf0 Christos Stathis
         * @return the modifiedBy
180 a57faaf0 Christos Stathis
         */
181 a57faaf0 Christos Stathis
        public String getModifiedBy() {
182 a57faaf0 Christos Stathis
                return modifiedBy;
183 a57faaf0 Christos Stathis
        }
184 a57faaf0 Christos Stathis
185 a57faaf0 Christos Stathis
        /**
186 a57faaf0 Christos Stathis
         * Modify the modifiedBy.
187 a57faaf0 Christos Stathis
         *
188 a57faaf0 Christos Stathis
         * @param aModifiedBy the modifiedBy to set
189 a57faaf0 Christos Stathis
         */
190 a57faaf0 Christos Stathis
        public void setModifiedBy(String aModifiedBy) {
191 a57faaf0 Christos Stathis
                modifiedBy = aModifiedBy;
192 a57faaf0 Christos Stathis
        }
193 a57faaf0 Christos Stathis
194 a57faaf0 Christos Stathis
        /**
195 a57faaf0 Christos Stathis
         * Retrieve the creationDate.
196 a57faaf0 Christos Stathis
         *
197 a57faaf0 Christos Stathis
         * @return the creationDate
198 a57faaf0 Christos Stathis
         */
199 a57faaf0 Christos Stathis
        public Date getCreationDate() {
200 a57faaf0 Christos Stathis
                return creationDate;
201 a57faaf0 Christos Stathis
        }
202 a57faaf0 Christos Stathis
203 a57faaf0 Christos Stathis
        /**
204 a57faaf0 Christos Stathis
         * Modify the creationDate.
205 a57faaf0 Christos Stathis
         *
206 a57faaf0 Christos Stathis
         * @param aCreationDate the creationDate to set
207 a57faaf0 Christos Stathis
         */
208 a57faaf0 Christos Stathis
        public void setCreationDate(Date aCreationDate) {
209 a57faaf0 Christos Stathis
                creationDate = aCreationDate;
210 a57faaf0 Christos Stathis
        }
211 a57faaf0 Christos Stathis
212 a57faaf0 Christos Stathis
        /**
213 a57faaf0 Christos Stathis
         * Retrieve the modificationDate.
214 a57faaf0 Christos Stathis
         *
215 a57faaf0 Christos Stathis
         * @return the modificationDate
216 a57faaf0 Christos Stathis
         */
217 a57faaf0 Christos Stathis
        public Date getModificationDate() {
218 a57faaf0 Christos Stathis
                return modificationDate;
219 a57faaf0 Christos Stathis
        }
220 a57faaf0 Christos Stathis
221 a57faaf0 Christos Stathis
        /**
222 a57faaf0 Christos Stathis
         * Modify the modificationDate.
223 a57faaf0 Christos Stathis
         *
224 a57faaf0 Christos Stathis
         * @param aModificationDate the modificationDate to set
225 a57faaf0 Christos Stathis
         */
226 a57faaf0 Christos Stathis
        public void setModificationDate(Date aModificationDate) {
227 a57faaf0 Christos Stathis
                modificationDate = aModificationDate;
228 a57faaf0 Christos Stathis
        }
229 a57faaf0 Christos Stathis
230 a57faaf0 Christos Stathis
        /**
231 a57faaf0 Christos Stathis
         * Retrieve the filePaths.
232 a57faaf0 Christos Stathis
         *
233 a57faaf0 Christos Stathis
         * @return the filePaths
234 a57faaf0 Christos Stathis
         */
235 a57faaf0 Christos Stathis
        public List<String> getFilePaths() {
236 a57faaf0 Christos Stathis
                return filePaths;
237 a57faaf0 Christos Stathis
        }
238 a57faaf0 Christos Stathis
239 a57faaf0 Christos Stathis
        /**
240 a57faaf0 Christos Stathis
         * Modify the filePaths.
241 a57faaf0 Christos Stathis
         *
242 a57faaf0 Christos Stathis
         * @param newFilePaths the filePaths to set
243 a57faaf0 Christos Stathis
         */
244 a57faaf0 Christos Stathis
        public void setFilePaths(List<String> newFilePaths) {
245 a57faaf0 Christos Stathis
                filePaths = newFilePaths;
246 a57faaf0 Christos Stathis
        }
247 a57faaf0 Christos Stathis
248 a57faaf0 Christos Stathis
        /**
249 a57faaf0 Christos Stathis
         * Retrieve the subfolderPaths.
250 a57faaf0 Christos Stathis
         *
251 a57faaf0 Christos Stathis
         * @return the subfolderPaths
252 a57faaf0 Christos Stathis
         */
253 a57faaf0 Christos Stathis
        public List<String> getSubfolderPaths() {
254 a57faaf0 Christos Stathis
                return subfolderPaths;
255 a57faaf0 Christos Stathis
        }
256 a57faaf0 Christos Stathis
257 a57faaf0 Christos Stathis
        /**
258 a57faaf0 Christos Stathis
         * Modify the subfolderPaths.
259 a57faaf0 Christos Stathis
         *
260 a57faaf0 Christos Stathis
         * @param newSubfolderPaths the subfolderPaths to set
261 a57faaf0 Christos Stathis
         */
262 a57faaf0 Christos Stathis
        public void setSubfolderPaths(List<String> newSubfolderPaths) {
263 a57faaf0 Christos Stathis
                subfolderPaths = newSubfolderPaths;
264 a57faaf0 Christos Stathis
        }
265 a57faaf0 Christos Stathis
266 a57faaf0 Christos Stathis
        /**
267 a57faaf0 Christos Stathis
         * Retrieve the permissions.
268 a57faaf0 Christos Stathis
         *
269 a57faaf0 Christos Stathis
         * @return the permissions
270 a57faaf0 Christos Stathis
         */
271 a57faaf0 Christos Stathis
        public Set<PermissionHolder> getPermissions() {
272 a57faaf0 Christos Stathis
                return permissions;
273 a57faaf0 Christos Stathis
        }
274 a57faaf0 Christos Stathis
275 a57faaf0 Christos Stathis
        /**
276 a57faaf0 Christos Stathis
         * Modify the permissions.
277 a57faaf0 Christos Stathis
         *
278 a57faaf0 Christos Stathis
         * @param newPermissions the permissions to set
279 a57faaf0 Christos Stathis
         */
280 a57faaf0 Christos Stathis
        public void setPermissions(Set<PermissionHolder> newPermissions) {
281 a57faaf0 Christos Stathis
                permissions = newPermissions;
282 a57faaf0 Christos Stathis
        }
283 a57faaf0 Christos Stathis
284 a57faaf0 Christos Stathis
        /**
285 a57faaf0 Christos Stathis
         * Retrieve the deleted.
286 a57faaf0 Christos Stathis
         *
287 a57faaf0 Christos Stathis
         * @return the deleted
288 a57faaf0 Christos Stathis
         */
289 a57faaf0 Christos Stathis
        public boolean isDeleted() {
290 a57faaf0 Christos Stathis
                return deleted;
291 a57faaf0 Christos Stathis
        }
292 a57faaf0 Christos Stathis
293 a57faaf0 Christos Stathis
        /**
294 a57faaf0 Christos Stathis
         * Modify the deleted.
295 a57faaf0 Christos Stathis
         *
296 a57faaf0 Christos Stathis
         * @param newDeleted the deleted to set
297 a57faaf0 Christos Stathis
         */
298 a57faaf0 Christos Stathis
        public void setDeleted(boolean newDeleted) {
299 a57faaf0 Christos Stathis
                deleted = newDeleted;
300 a57faaf0 Christos Stathis
        }
301 a57faaf0 Christos Stathis
302 a57faaf0 Christos Stathis
        public void removeSubfolderPath(String spath) {
303 a57faaf0 Christos Stathis
                if (subfolderPaths.remove(spath))
304 a57faaf0 Christos Stathis
                        return;
305 a57faaf0 Christos Stathis
                else if (subfolderPaths.remove(spath + "/"))
306 a57faaf0 Christos Stathis
                        return;
307 a57faaf0 Christos Stathis
                else
308 a57faaf0 Christos Stathis
                        subfolderPaths.remove(spath.substring(0, spath.length() - 1));
309 a57faaf0 Christos Stathis
        }
310 a57faaf0 Christos Stathis
311 a57faaf0 Christos Stathis
        /**
312 a57faaf0 Christos Stathis
         * Retrieve the folders.
313 a57faaf0 Christos Stathis
         *
314 a57faaf0 Christos Stathis
         * @return the folders
315 a57faaf0 Christos Stathis
         */
316 a57faaf0 Christos Stathis
        public List<FolderResource> getFolders() {
317 a57faaf0 Christos Stathis
                return folders;
318 a57faaf0 Christos Stathis
        }
319 a57faaf0 Christos Stathis
320 a57faaf0 Christos Stathis
        /**
321 a57faaf0 Christos Stathis
         * Modify the folders.
322 a57faaf0 Christos Stathis
         *
323 a57faaf0 Christos Stathis
         * @param newFolders the folders to set
324 a57faaf0 Christos Stathis
         */
325 a57faaf0 Christos Stathis
        public void setFolders(List<FolderResource> newFolders) {
326 a57faaf0 Christos Stathis
                folders = newFolders;
327 a57faaf0 Christos Stathis
        }
328 a57faaf0 Christos Stathis
329 a57faaf0 Christos Stathis
        /**
330 a57faaf0 Christos Stathis
         * Retrieve the files.
331 a57faaf0 Christos Stathis
         *
332 a57faaf0 Christos Stathis
         * @return the files
333 a57faaf0 Christos Stathis
         */
334 a57faaf0 Christos Stathis
        public List<FileResource> getFiles() {
335 a57faaf0 Christos Stathis
                return files;
336 a57faaf0 Christos Stathis
        }
337 a57faaf0 Christos Stathis
338 a57faaf0 Christos Stathis
        /**
339 a57faaf0 Christos Stathis
         * Modify the files.
340 a57faaf0 Christos Stathis
         *
341 a57faaf0 Christos Stathis
         * @param newFiles the files to set
342 a57faaf0 Christos Stathis
         */
343 a57faaf0 Christos Stathis
        public void setFiles(List<FileResource> newFiles) {
344 a57faaf0 Christos Stathis
                files = newFiles;
345 a57faaf0 Christos Stathis
        }
346 a57faaf0 Christos Stathis
347 a57faaf0 Christos Stathis
        /**
348 a57faaf0 Christos Stathis
         * Retrieve the parentURI.
349 a57faaf0 Christos Stathis
         *
350 a57faaf0 Christos Stathis
         * @return the parentURI
351 a57faaf0 Christos Stathis
         */
352 a57faaf0 Christos Stathis
        public String getParentURI() {
353 a57faaf0 Christos Stathis
                return parentURI;
354 a57faaf0 Christos Stathis
        }
355 a57faaf0 Christos Stathis
356 a57faaf0 Christos Stathis
        /**
357 a57faaf0 Christos Stathis
         * Modify the parentURI.
358 a57faaf0 Christos Stathis
         *
359 a57faaf0 Christos Stathis
         * @param aParentURI the parentURI to set
360 a57faaf0 Christos Stathis
         */
361 a57faaf0 Christos Stathis
        public void setParentURI(String aParentURI) {
362 a57faaf0 Christos Stathis
                parentURI = aParentURI;
363 a57faaf0 Christos Stathis
        }
364 a57faaf0 Christos Stathis
365 a57faaf0 Christos Stathis
        @Override
366 a57faaf0 Christos Stathis
        public void createFromJSON(String text) {
367 a57faaf0 Christos Stathis
                JSONObject json = (JSONObject) JSONParser.parse(text);
368 a57faaf0 Christos Stathis
                name = unmarshallString(json, "name");
369 a57faaf0 Christos Stathis
                owner = unmarshallString(json, "owner");
370 a57faaf0 Christos Stathis
                createdBy = unmarshallString(json, "createdBy");
371 a57faaf0 Christos Stathis
                modifiedBy = unmarshallString(json, "modifiedBy");
372 a57faaf0 Christos Stathis
                deleted = unmarshallBoolean(json, "deleted");
373 a57faaf0 Christos Stathis
                shared = unmarshallBoolean(json, "shared");
374 a57faaf0 Christos Stathis
                readForAll = unmarshallBoolean(json, "readForAll");
375 a57faaf0 Christos Stathis
                if (deleted)
376 a57faaf0 Christos Stathis
                        GWT.log("FOUND A DELETED FOLDER:" + name, null);
377 a57faaf0 Christos Stathis
378 a57faaf0 Christos Stathis
                if (json.get("parent") != null) {
379 a57faaf0 Christos Stathis
                        JSONObject parent = json.get("parent").isObject();
380 a57faaf0 Christos Stathis
                        parentURI = unmarshallString(parent, "uri");
381 a57faaf0 Christos Stathis
                        parentName = unmarshallString(parent, "name");
382 a57faaf0 Christos Stathis
                }
383 a57faaf0 Christos Stathis
384 a57faaf0 Christos Stathis
                if (json.get("permissions") != null) {
385 a57faaf0 Christos Stathis
                        JSONArray perm = json.get("permissions").isArray();
386 a57faaf0 Christos Stathis
                        if (perm != null)
387 a57faaf0 Christos Stathis
                                for (int i = 0; i < perm.size(); i++) {
388 a57faaf0 Christos Stathis
                                        JSONObject obj = perm.get(i).isObject();
389 a57faaf0 Christos Stathis
                                        if (obj != null) {
390 a57faaf0 Christos Stathis
                                                PermissionHolder permission = new PermissionHolder();
391 a57faaf0 Christos Stathis
                                                if (obj.get("user") != null)
392 a57faaf0 Christos Stathis
                                                        permission.setUser(unmarshallString(obj, "user"));
393 a57faaf0 Christos Stathis
                                                if (obj.get("group") != null)
394 a57faaf0 Christos Stathis
                                                        permission.setGroup(URL.decodeComponent(unmarshallString(obj, "group")));
395 a57faaf0 Christos Stathis
                                                permission.setRead(unmarshallBoolean(obj, "read"));
396 a57faaf0 Christos Stathis
                                                permission.setWrite(unmarshallBoolean(obj, "write"));
397 a57faaf0 Christos Stathis
                                                permission.setModifyACL(unmarshallBoolean(obj, "modifyACL"));
398 a57faaf0 Christos Stathis
                                                permissions.add(permission);
399 a57faaf0 Christos Stathis
                                        }
400 a57faaf0 Christos Stathis
                                }
401 a57faaf0 Christos Stathis
                }
402 a57faaf0 Christos Stathis
                if (json.get("folders") != null) {
403 a57faaf0 Christos Stathis
                        JSONArray subs = json.get("folders").isArray();
404 a57faaf0 Christos Stathis
                        if (subs != null)
405 a57faaf0 Christos Stathis
                                for (int i = 0; i < subs.size(); i++) {
406 a57faaf0 Christos Stathis
                                        JSONObject so = subs.get(i).isObject();
407 a57faaf0 Christos Stathis
                                        if (so != null) {
408 a57faaf0 Christos Stathis
                                                String subUri = unmarshallString(so, "uri");
409 a57faaf0 Christos Stathis
                                                String subName = unmarshallString(so, "name");
410 a57faaf0 Christos Stathis
                                                if (subUri != null && subName != null) {
411 a57faaf0 Christos Stathis
                                                        if (!subUri.endsWith("/"))
412 a57faaf0 Christos Stathis
                                                                subUri = subUri + "/";
413 a57faaf0 Christos Stathis
                                                        FolderResource sub = new FolderResource(subUri);
414 a57faaf0 Christos Stathis
                                                        sub.setName(subName);
415 a57faaf0 Christos Stathis
                                                        sub.setParentURI(uri);
416 a57faaf0 Christos Stathis
                                                        sub.setParentName(name);
417 a57faaf0 Christos Stathis
                                                        sub.setNeedsExpanding(true);
418 a57faaf0 Christos Stathis
                                                        folders.add(sub);
419 a57faaf0 Christos Stathis
                                                        subfolderPaths.add(subUri);
420 a57faaf0 Christos Stathis
                                                }
421 a57faaf0 Christos Stathis
                                        }
422 a57faaf0 Christos Stathis
                                }
423 a57faaf0 Christos Stathis
                }
424 a57faaf0 Christos Stathis
                if (json.get("files") != null) {
425 a57faaf0 Christos Stathis
                        JSONArray subs = json.get("files").isArray();
426 a57faaf0 Christos Stathis
                        if (subs != null)
427 a57faaf0 Christos Stathis
                                for (int i = 0; i < subs.size(); i++) {
428 a57faaf0 Christos Stathis
                                        JSONObject fo = subs.get(i).isObject();
429 a57faaf0 Christos Stathis
                                        if (fo != null) {
430 a57faaf0 Christos Stathis
                                                String fname = unmarshallString(fo, "name");
431 a57faaf0 Christos Stathis
                                                String fowner = unmarshallString(fo, "owner");
432 a57faaf0 Christos Stathis
                                                String fcontent = unmarshallString(fo, "content");
433 a57faaf0 Christos Stathis
                                                String fpath = unmarshallString(fo, "path");
434 a57faaf0 Christos Stathis
                                                Boolean fshared = unmarshallBoolean(fo, "shared");
435 a57faaf0 Christos Stathis
                                                fpath = URL.decodeComponent(fpath);
436 a57faaf0 Christos Stathis
                                                Integer fversion = null;
437 a57faaf0 Christos Stathis
                                                if (fo.get("version") != null)
438 a57faaf0 Christos Stathis
                                                        fversion = new Integer(fo.get("version").toString());
439 a57faaf0 Christos Stathis
                                                boolean fdeleted = unmarshallBoolean(fo, "deleted");
440 a57faaf0 Christos Stathis
                                                Date fcreationDate = null;
441 a57faaf0 Christos Stathis
                                                if (fo.get("creationDate") != null)
442 a57faaf0 Christos Stathis
                                                        fcreationDate = new Date(new Long(fo.get("creationDate").toString()));
443 a57faaf0 Christos Stathis
                                                Date fmodificationDate = null;
444 a57faaf0 Christos Stathis
                                                if (fo.get("modificationDate") != null)
445 a57faaf0 Christos Stathis
                                                        fmodificationDate = new Date(new Long(fo.get("modificationDate").toString()));
446 a57faaf0 Christos Stathis
                                                String furi = unmarshallString(fo, "uri");
447 a57faaf0 Christos Stathis
                                                Long fsize = 0L;
448 a57faaf0 Christos Stathis
                                                if (fo.get("size") != null)
449 a57faaf0 Christos Stathis
                                                        fsize = new Long(fo.get("size").toString());
450 a57faaf0 Christos Stathis
                                                filePaths.add(furi);
451 a57faaf0 Christos Stathis
                                                FileResource fs = new FileResource(furi);
452 a57faaf0 Christos Stathis
                                                fs.setName(fname);
453 a57faaf0 Christos Stathis
                                                fs.setOwner(fowner);
454 a57faaf0 Christos Stathis
                                                fs.setPath(fpath);
455 a57faaf0 Christos Stathis
                                                fs.setVersioned(unmarshallBoolean(fo, "versioned"));
456 a57faaf0 Christos Stathis
                                                fs.setVersion(fversion);
457 a57faaf0 Christos Stathis
                                                fs.setContentLength(fsize);
458 a57faaf0 Christos Stathis
                                                fs.setDeleted(fdeleted);
459 a57faaf0 Christos Stathis
                                                fs.setShared(fshared);
460 a57faaf0 Christos Stathis
                                                fs.setCreationDate(fcreationDate);
461 a57faaf0 Christos Stathis
                                                fs.setModificationDate(fmodificationDate);
462 a57faaf0 Christos Stathis
                                                fs.setContentType(fcontent);
463 a57faaf0 Christos Stathis
                                                files.add(fs);
464 a57faaf0 Christos Stathis
                                        }
465 a57faaf0 Christos Stathis
                                }
466 a57faaf0 Christos Stathis
                }
467 a57faaf0 Christos Stathis
                if (json.get("creationDate") != null)
468 a57faaf0 Christos Stathis
                        creationDate = new Date(new Long(json.get("creationDate").toString()));
469 a57faaf0 Christos Stathis
                if (json.get("modificationDate") != null)
470 a57faaf0 Christos Stathis
                        modificationDate = new Date(new Long(json.get("modificationDate").toString()));
471 a57faaf0 Christos Stathis
        }
472 a57faaf0 Christos Stathis
473 a57faaf0 Christos Stathis
        public String getParentName(){
474 a57faaf0 Christos Stathis
                return parentName;
475 a57faaf0 Christos Stathis
        }
476 a57faaf0 Christos Stathis
477 a57faaf0 Christos Stathis
        /**
478 a57faaf0 Christos Stathis
         * Retrieve the needsExpanding.
479 a57faaf0 Christos Stathis
         *
480 a57faaf0 Christos Stathis
         * @return the needsExpanding
481 a57faaf0 Christos Stathis
         */
482 a57faaf0 Christos Stathis
        public boolean isNeedsExpanding() {
483 a57faaf0 Christos Stathis
                return needsExpanding;
484 a57faaf0 Christos Stathis
        }
485 a57faaf0 Christos Stathis
486 a57faaf0 Christos Stathis
        /**
487 a57faaf0 Christos Stathis
         * Modify the needsExpanding.
488 a57faaf0 Christos Stathis
         *
489 a57faaf0 Christos Stathis
         * @param newNeedsExpanding the needsExpanding to set
490 a57faaf0 Christos Stathis
         */
491 a57faaf0 Christos Stathis
        public void setNeedsExpanding(boolean newNeedsExpanding) {
492 a57faaf0 Christos Stathis
                needsExpanding = newNeedsExpanding;
493 a57faaf0 Christos Stathis
        }
494 a57faaf0 Christos Stathis
495 a57faaf0 Christos Stathis
        public boolean isShared(){
496 a57faaf0 Christos Stathis
                return shared;
497 a57faaf0 Christos Stathis
        }
498 a57faaf0 Christos Stathis
499 a57faaf0 Christos Stathis
        @Override
500 a57faaf0 Christos Stathis
        public String getLastModifiedSince() {
501 a57faaf0 Christos Stathis
                if(modificationDate != null)
502 a57faaf0 Christos Stathis
                        return getDate(modificationDate.getTime());
503 a57faaf0 Christos Stathis
                return null;
504 a57faaf0 Christos Stathis
        }
505 a57faaf0 Christos Stathis
506 a57faaf0 Christos Stathis
        public MultipleGetCommand.Cached[] getCache(){
507 a57faaf0 Christos Stathis
                if(getSubfolderPaths().size() != getFolders().size()){
508 a57faaf0 Christos Stathis
                        GWT.log("MISMATCH IN PATH AND FOLDERS SIZE", null);
509 a57faaf0 Christos Stathis
                        return null;
510 a57faaf0 Christos Stathis
                }
511 a57faaf0 Christos Stathis
                MultipleGetCommand.Cached[] result = new MultipleGetCommand.Cached[getSubfolderPaths().size()];
512 a57faaf0 Christos Stathis
                for(int i=0; i<getFolders().size();i++){
513 a57faaf0 Christos Stathis
                        FolderResource r = getFolders().get(i);
514 a57faaf0 Christos Stathis
                        Cached c = new Cached();
515 a57faaf0 Christos Stathis
                        c.cache=r;
516 a57faaf0 Christos Stathis
                        c.uri=r.uri;
517 a57faaf0 Christos Stathis
                        result[i] = c;
518 a57faaf0 Christos Stathis
                }
519 a57faaf0 Christos Stathis
                return result;
520 a57faaf0 Christos Stathis
        }
521 a57faaf0 Christos Stathis
522 a57faaf0 Christos Stathis
        public MultipleGetCommand.Cached[] getFileCache(){
523 a57faaf0 Christos Stathis
                if(getFilePaths().size() != getFiles().size()){
524 a57faaf0 Christos Stathis
                        GWT.log("MISMATCH IN PATH AND FILES SIZE", null);
525 a57faaf0 Christos Stathis
                        return null;
526 a57faaf0 Christos Stathis
                }
527 a57faaf0 Christos Stathis
                if(!filesExpanded)
528 a57faaf0 Christos Stathis
                        return null;
529 a57faaf0 Christos Stathis
                MultipleGetCommand.Cached[] result = new MultipleGetCommand.Cached[getFilePaths().size()];
530 a57faaf0 Christos Stathis
                for(int i=0; i<getFiles().size();i++){
531 a57faaf0 Christos Stathis
                        FileResource r = getFiles().get(i);
532 a57faaf0 Christos Stathis
                        Cached c = new Cached();
533 a57faaf0 Christos Stathis
                        c.cache=r;
534 a57faaf0 Christos Stathis
                        c.uri=r.uri;
535 a57faaf0 Christos Stathis
                        result[i] = c;
536 a57faaf0 Christos Stathis
                }
537 a57faaf0 Christos Stathis
                return result;
538 a57faaf0 Christos Stathis
        }
539 a57faaf0 Christos Stathis
540 a57faaf0 Christos Stathis
        public void setFilesExpanded(boolean newFilesExpanded) {
541 a57faaf0 Christos Stathis
                filesExpanded = newFilesExpanded;
542 a57faaf0 Christos Stathis
        }
543 a57faaf0 Christos Stathis
        /**
544 a57faaf0 Christos Stathis
         * this method constructs the partial path of a given TreeItem using it's text
545 a57faaf0 Christos Stathis
         *
546 a57faaf0 Christos Stathis
         * @param selectedItem the selectedItem to check
547 a57faaf0 Christos Stathis
         */
548 a57faaf0 Christos Stathis
        private String constructPartialPath(TreeItem selectedItem){
549 a57faaf0 Christos Stathis
           String result = DisplayHelper.trim(selectedItem.getText());
550 a57faaf0 Christos Stathis
           TreeItem parent = selectedItem.getParentItem();
551 a57faaf0 Christos Stathis
           while (!(DisplayHelper.trim(parent.getText()).equals("My Shared") || DisplayHelper.trim(parent.getText()).equals("Other's Shared")||DisplayHelper.trim(parent.getText()).equals("Trash"))){
552 a57faaf0 Christos Stathis
              result = DisplayHelper.trim(parent.getText()) + "/" + result;
553 a57faaf0 Christos Stathis
              if(result.equals("My Shared")||result.equals("Other's Shared")) return result;
554 a57faaf0 Christos Stathis
              parent = parent.getParentItem();
555 a57faaf0 Christos Stathis
           }
556 a57faaf0 Christos Stathis
557 a57faaf0 Christos Stathis
           return result;
558 a57faaf0 Christos Stathis
        }
559 a57faaf0 Christos Stathis
        /**
560 a57faaf0 Christos Stathis
         * examine whether a folder name like "Trash", "My Shared", "Other's Shared" is inside path
561 a57faaf0 Christos Stathis
         *
562 a57faaf0 Christos Stathis
         * @param selectedItem the selectedTreeItem to check
563 a57faaf0 Christos Stathis
         */
564 a57faaf0 Christos Stathis
565 a57faaf0 Christos Stathis
        private boolean containsFolder(TreeItem selectedItem, String folderName){
566 a57faaf0 Christos Stathis
                TreeItem parent = selectedItem.getParentItem();
567 a57faaf0 Christos Stathis
                while (parent != null){
568 a57faaf0 Christos Stathis
                        String parentItemText = parent.getText();
569 a57faaf0 Christos Stathis
                        String parentItemTextTr = DisplayHelper.trim(parentItemText);
570 a57faaf0 Christos Stathis
                        if(parentItemTextTr.equals(folderName)) return true;
571 a57faaf0 Christos Stathis
                        parent = parent.getParentItem();
572 a57faaf0 Christos Stathis
                        }
573 a57faaf0 Christos Stathis
                return false;
574 a57faaf0 Christos Stathis
        }
575 a57faaf0 Christos Stathis
        @Override
576 a57faaf0 Christos Stathis
        public String constructUri(TreeItem treeItem, String path){
577 a57faaf0 Christos Stathis
                String constructedUri = "";
578 a57faaf0 Christos Stathis
                if(containsFolder(treeItem, "My Shared")){
579 a57faaf0 Christos Stathis
                        //case: selected folders below My Shared folder
580 a57faaf0 Christos Stathis
                        String partialUri = constructPartialPath(treeItem);
581 a57faaf0 Christos Stathis
                        constructedUri = constructedUri + "Files/shared/" + partialUri;
582 a57faaf0 Christos Stathis
                        return constructedUri;
583 a57faaf0 Christos Stathis
                }else if(containsFolder(treeItem, "Other's Shared")){
584 a57faaf0 Christos Stathis
                        //case: selected folders below Other's Shared folder
585 a57faaf0 Christos Stathis
                        String partialPath = constructPartialPath(treeItem);
586 a57faaf0 Christos Stathis
                        constructedUri = constructedUri + "Files/others/"+ partialPath;
587 a57faaf0 Christos Stathis
                        return constructedUri;
588 a57faaf0 Christos Stathis
                }
589 a57faaf0 Christos Stathis
                else if(getParentURI()==null){
590 a57faaf0 Christos Stathis
                        if(containsFolder(treeItem, "Trash")){
591 a57faaf0 Christos Stathis
                                //case: selected folders below Trash folder
592 a57faaf0 Christos Stathis
                                String partialUri = constructPartialPath(treeItem);
593 a57faaf0 Christos Stathis
                                constructedUri = constructedUri + "Files/trash/" + partialUri;
594 a57faaf0 Christos Stathis
                                return constructedUri;
595 a57faaf0 Christos Stathis
                        }
596 a57faaf0 Christos Stathis
                        //case: home folder is selected
597 a57faaf0 Christos Stathis
                        constructedUri = constructedUri + "Files/files/" + getName();
598 a57faaf0 Christos Stathis
                        return constructedUri;
599 a57faaf0 Christos Stathis
                }
600 a57faaf0 Christos Stathis
                else if(treeItem.getParentItem() == null){
601 a57faaf0 Christos Stathis
                        //this is the case when the user uses the browser's forward arrow to navigate through other's
602 a57faaf0 Christos Stathis
                        //shared folders and item.getParentItem is null only inside other's shared folder
603 a57faaf0 Christos Stathis
                        String apiPath = GSS.get().getApiPath();
604 a57faaf0 Christos Stathis
                        String newPath = getParentURI().substring(apiPath.lastIndexOf("/"));
605 a57faaf0 Christos Stathis
                        constructedUri = constructedUri + "Files"+ newPath + getName();
606 a57faaf0 Christos Stathis
                        return constructedUri;
607 a57faaf0 Christos Stathis
                }
608 a57faaf0 Christos Stathis
                else{
609 a57faaf0 Christos Stathis
                        String finalUri = getParentURI().substring(path.lastIndexOf("/")) + getName();
610 a57faaf0 Christos Stathis
                        constructedUri = constructedUri + "Files"+ finalUri;
611 a57faaf0 Christos Stathis
                        return constructedUri;
612 a57faaf0 Christos Stathis
                }
613 a57faaf0 Christos Stathis
614 a57faaf0 Christos Stathis
        }
615 a57faaf0 Christos Stathis
616 a57faaf0 Christos Stathis
        /**
617 a57faaf0 Christos Stathis
         * Retrieve the readForAll.
618 a57faaf0 Christos Stathis
         *
619 a57faaf0 Christos Stathis
         * @return the readForAll
620 a57faaf0 Christos Stathis
         */
621 a57faaf0 Christos Stathis
        public boolean isReadForAll() {
622 a57faaf0 Christos Stathis
                return readForAll;
623 a57faaf0 Christos Stathis
        }
624 a57faaf0 Christos Stathis
        /**
625 a57faaf0 Christos Stathis
         * Modify the readForAll.
626 a57faaf0 Christos Stathis
         *
627 a57faaf0 Christos Stathis
         * @param newReadForAll the readForAll to set
628 a57faaf0 Christos Stathis
         */
629 a57faaf0 Christos Stathis
        public void setReadForAll(boolean newReadForAll) {
630 a57faaf0 Christos Stathis
                readForAll = newReadForAll;
631 a57faaf0 Christos Stathis
        }
632 a57faaf0 Christos Stathis
        
633 a57faaf0 Christos Stathis
        
634 a57faaf0 Christos Stathis
        public int countNotDeletedSubfolders(){
635 a57faaf0 Christos Stathis
                int count=0;
636 a57faaf0 Christos Stathis
                for(FolderResource r : folders){
637 a57faaf0 Christos Stathis
                        if(!r.isDeleted())
638 a57faaf0 Christos Stathis
                                count++;
639 a57faaf0 Christos Stathis
                }
640 a57faaf0 Christos Stathis
                return count;
641 a57faaf0 Christos Stathis
        }
642 a57faaf0 Christos Stathis
643 a57faaf0 Christos Stathis
}