Finished tag tree display (without optimizations)
authorChristos Stathis <chstath@ebs.gr>
Wed, 20 Jul 2011 16:16:14 +0000 (19:16 +0300)
committerChristos Stathis <chstath@ebs.gr>
Wed, 20 Jul 2011 16:16:14 +0000 (19:16 +0300)
web_client/src/gr/grnet/pithos/web/client/Pithos.java
web_client/src/gr/grnet/pithos/web/client/foldertree/Folder.java
web_client/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java

index d8cd03d..9898ccc 100644 (file)
@@ -306,8 +306,11 @@ public class Pithos implements EntryPoint, ResizeHandler {
         folderTreeSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
             @Override
             public void onSelectionChange(SelectionChangeEvent event) {
-                Folder f = folderTreeSelectionModel.getSelectedObject();
-                updateFolder(f);
+                if (folderTreeSelectionModel.getSelectedObject() != null) {
+                    tagTreeSelectionModel.setSelected(tagTreeSelectionModel.getSelectedObject(), false);
+                    Folder f = folderTreeSelectionModel.getSelectedObject();
+                    updateFolder(f);
+                }
             }
         });
 
@@ -321,8 +324,11 @@ public class Pithos implements EntryPoint, ResizeHandler {
         tagTreeSelectionModel.addSelectionChangeHandler(new Handler() {
             @Override
             public void onSelectionChange(SelectionChangeEvent event) {
-                Tag t = tagTreeSelectionModel.getSelectedObject();
-                updateTag(t);
+                if (tagTreeSelectionModel.getSelectedObject() != null) {
+                    folderTreeSelectionModel.setSelected(folderTreeSelectionModel.getSelectedObject(), false);
+                    Tag t = tagTreeSelectionModel.getSelectedObject();
+                    updateTag(t);
+                }
             }
         });
         tagTreeViewModel = new TagTreeViewModel(tagTreeSelectionModel);
@@ -387,8 +393,13 @@ public class Pithos implements EntryPoint, ResizeHandler {
         else
             fileList.showFiles();
         Set<File> files = f.getFiles();
-        Iterator<File> iter = files.iterator();
-        fetchFile(iter, files);
+        showFiles(files);
+    }
+
+    public void showFiles(Set<File> files) {
+        //Iterator<File> iter = files.iterator();
+        //fetchFile(iter, files);
+        fileList.setFiles(new ArrayList<File>(files));
     }
 
     private void fetchFile(final Iterator<File> iter, final Set<File> files) {
index b4afa04..2998336 100644 (file)
@@ -48,6 +48,7 @@ import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.StringTokenizer;
 
 public class Folder extends Resource {
     /*
@@ -141,9 +142,14 @@ public class Folder extends Resource {
             inTrash = true;
 
         header = response.getHeader("X-Container-Object-Meta");
-        if (header != null) {
-            tags.add("tag1");
-            tags.add("tag2");
+        if (header != null && header.length() > 2) {
+            String tagStr = header.substring(1, header.length() - 1);
+            while (tagStr.indexOf(",") > -1) {
+                String tag = tagStr.substring(2, tagStr.indexOf(",") - 1);
+                tags.add(tag);
+                tagStr = tagStr.substring(tagStr.indexOf(",") + 1).trim();
+            }
+            tags.add(tagStr.substring(2, tagStr.length() - 1));
         }
 
         subfolders.clear(); //This is necessary in case we update a pre-existing Folder so that stale subfolders won't show up
index fddf6b3..c74efbd 100644 (file)
@@ -38,6 +38,9 @@ package gr.grnet.pithos.web.client.tagtree;
 import com.google.gwt.cell.client.AbstractCell;
 import com.google.gwt.cell.client.Cell;
 import com.google.gwt.cell.client.TextCell;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.event.dom.client.ContextMenuEvent;
 import com.google.gwt.safehtml.shared.SafeHtml;
 import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
@@ -48,10 +51,15 @@ import com.google.gwt.view.client.SingleSelectionModel;
 import com.google.gwt.view.client.TreeViewModel;
 import gr.grnet.pithos.web.client.Pithos;
 import gr.grnet.pithos.web.client.foldertree.AccountResource;
+import gr.grnet.pithos.web.client.foldertree.File;
 import gr.grnet.pithos.web.client.foldertree.Folder;
+import gr.grnet.pithos.web.client.rest.GetRequest;
+import gr.grnet.pithos.web.client.rest.RestException;
 import gr.grnet.pithos.web.client.tagtree.TagTreeView.Templates;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -86,7 +94,6 @@ public class TagTreeViewModel implements TreeViewModel {
     @Override
     public <T> NodeInfo<?> getNodeInfo(T value) {
         if (value == null) {
-//            rootDataProvider.getList().add("Tags");
             return new DefaultNodeInfo<String>(rootDataProvider, new TextCell(new SafeHtmlRenderer<String>() {
                 @Override
                 public SafeHtml render(String object) {
@@ -101,7 +108,7 @@ public class TagTreeViewModel implements TreeViewModel {
                     builder.appendHtmlConstant(html);
                     builder.append(Templates.INSTANCE.nameSpan(object));
                 }
-            }), new SingleSelectionModel<String>(), null);
+            }), null, null);
         }
         else if (value instanceof String) {
             //fetchAllTags();
@@ -157,45 +164,44 @@ public class TagTreeViewModel implements TreeViewModel {
     }
 
     public void updateTag(Tag tag) {
-//        if (dataProviderMap.get(tag) == null) {
-//            dataProviderMap.put(tag, new ListDataProvider<Tag>());
-//        }
-//        final ListDataProvider<Tag> dataProvider = dataProviderMap.get(tag);
-//        if (!tag.isTrash())
-//            fetchFolder(tag, dataProvider);
-//        else
-//            Pithos.get().showFiles(tag);
+        fetchTag(tag);
     }
 
-//    public void fetchFolder(final Tag f, final ListDataProvider<Tag> dataProvider) {
-//        dataProvider.flush();
-//        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
-//            @Override
-//            public void execute() {
-//                final Pithos app = Pithos.get();
-//                String path = app.getApiPath() + app.getUsername() + "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
-//                GetRequest<Tag> getFolder = new GetRequest<Tag>(Tag.class, path, f) {
-//                    @Override
-//                    public void onSuccess(Tag result) {
-//                        app.showFiles(result);
-//                        Iterator<Tag> iter = result.getSubfolders().iterator();
-//                        fetchFolder(iter, dataProvider, result.getSubfolders());
-//                    }
-//
-//                    @Override
-//                    public void onError(Throwable t) {
-//                        GWT.log("Error getting folder", t);
-//                        if (t instanceof RestException)
-//                            Pithos.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText());
-//                        else
-//                            Pithos.get().displayError("System error fetching folder: " + t.getMessage());
-//                    }
-//                };
-//                getFolder.setHeader("X-Auth-Token", app.getToken());
-//                Scheduler.get().scheduleDeferred(getFolder);
-//            }
-//        });
-//    }
+    public void fetchTag(Tag t) {
+        Pithos app = Pithos.get();
+        AccountResource account = app.getAccount();
+        Iterator<Folder> iter = account.getContainers().iterator();
+        fetchTag(iter, t, new LinkedHashSet<File>());
+    }
+
+    private void fetchTag(final Iterator<Folder> iter, final Tag t, final Set<File> files) {
+        final Pithos app = Pithos.get();
+        if (iter.hasNext()) {
+            Folder f = iter.next();
+            String path = app.getApiPath() + app.getUsername() + f.getUri() + "?format=json&meta=" + t.getName();
+            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, path) {
+                @Override
+                public void onSuccess(Folder result) {
+                    files.addAll(result.getFiles());
+                    fetchTag(iter, t, files);
+                }
+
+                @Override
+                public void onError(Throwable t) {
+                    GWT.log("Error getting folder", t);
+                    if (t instanceof RestException)
+                        Pithos.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText());
+                    else
+                        Pithos.get().displayError("System error fetching folder: " + t.getMessage());
+                }
+            };
+            getFolder.setHeader("X-Auth-Token", app.getToken());
+            Scheduler.get().scheduleDeferred(getFolder);
+        }
+        else {
+            app.showFiles(files);
+        }
+    }
 
     public void initialize(AccountResource account) {
         List<Tag> tagList = tagDataProvider.getList();