Organized contect menus
[pithos-web-client] / src / gr / grnet / pithos / web / client / foldertree / Folder.java
index 3e9102c..5365f5e 100644 (file)
@@ -44,6 +44,7 @@ import com.google.gwt.json.client.JSONParser;
 import com.google.gwt.json.client.JSONValue;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
@@ -75,6 +76,8 @@ public class Folder extends Resource {
 
     private Set<File> files = new LinkedHashSet<File>();
 
+    private boolean inTrash = false;
+
     public Folder() {};
 
     public Folder(String name) {
@@ -126,7 +129,12 @@ public class Folder extends Resource {
         if (header != null)
             bytesUsed = Long.valueOf(header);
 
+        header = response.getHeader("X-Object-Meta-Trash");
+        if (header != null && header.equals("true"))
+            inTrash = true;
+
         subfolders.clear(); //This is necessary in case we update a pre-existing Folder so that stale subfolders won't show up
+        files.clear();
         JSONValue json = JSONParser.parseStrict(response.getText());
         JSONArray array = json.isArray();
         if (array != null) {
@@ -139,13 +147,21 @@ public class Folder extends Resource {
                         f.populate(this, o, container);
                         subfolders.add(f);
                     }
-                    else {
+                    else if (!(o.containsKey("x_object_meta_trash") && o.get("x_object_meta_trash").isString().stringValue().equals("true"))) {
                         File file = new File();
                         file.populate(this, o, container);
                         files.add(file);
                     }
                 }
             }
+            //This step is necessary to remove the trashed folders. Trashed folders are added initially because we need to
+            //avoid having in the list the virtual folders of the form {"subdir":"folder1"} which have no indication of thrash
+            Iterator<Folder> iter = subfolders.iterator();
+            while (iter.hasNext()) {
+                Folder f = iter.next();
+                if (f.isInTrash())
+                    iter.remove();
+            }
         }
     }
 
@@ -173,11 +189,8 @@ public class Folder extends Resource {
             container = name;
             prefix = "";
         }
-    }
-
-    @Override
-    public String getLastModifiedSince() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        if (o.containsKey("x_object_meta_trash") && o.get("x_object_meta_trash").isString().stringValue().equals("true"))
+            inTrash = true;
     }
 
     public static Folder createFromResponse(Response response, Folder result) {
@@ -212,4 +225,16 @@ public class Folder extends Resource {
     public Folder getParent() {
         return parent;
     }
+
+    public String getUri() {
+        return "/" + container + (prefix.length() == 0 ? "" : "/" + prefix);
+    }
+
+    public boolean isInTrash() {
+        return inTrash;
+    }
+
+    public boolean isContainer() {
+        return parent == null;
+    }
 }