Fix regression with empty "Shared by me"
[pithos-web-client] / src / gr / grnet / pithos / web / client / mysharedtree / MysharedTreeViewModel.java
index e6d2323..0dfb8a1 100644 (file)
 
 package gr.grnet.pithos.web.client.mysharedtree;
 
+import gr.grnet.pithos.web.client.Const;
 import gr.grnet.pithos.web.client.FolderContextMenu;
 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.foldertree.FolderTreeView;
 import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeView.Templates;
-import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeView;
-import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeViewModel;
 import gr.grnet.pithos.web.client.rest.GetRequest;
 import gr.grnet.pithos.web.client.rest.RestException;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 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.cell.client.ValueUpdater;
-import com.google.gwt.cell.client.Cell.Context;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.event.dom.client.ContextMenuEvent;
 import com.google.gwt.http.client.Response;
 import com.google.gwt.http.client.URL;
-import com.google.gwt.safehtml.shared.SafeHtml;
 import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
-import com.google.gwt.text.shared.SafeHtmlRenderer;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
 import com.google.gwt.view.client.ListDataProvider;
-import com.google.gwt.view.client.SelectionChangeEvent;
-import com.google.gwt.view.client.SelectionChangeEvent.Handler;
 import com.google.gwt.view.client.SingleSelectionModel;
 import com.google.gwt.view.client.TreeViewModel;
 
@@ -80,12 +66,16 @@ public class MysharedTreeViewModel implements TreeViewModel {
 
     protected Pithos app;
 
+    Folder dummy = new Folder("No files shared by me");
+    
     private Cell<Folder> folderCell = new AbstractCell<Folder>(ContextMenuEvent.getType().getName()) {
 
        @Override
         public void render(Context context, Folder folder, SafeHtmlBuilder safeHtmlBuilder) {
-            String html = AbstractImagePrototype.create(MysharedTreeView.images.folderYellow()).getHTML();
-            safeHtmlBuilder.appendHtmlConstant(html).appendHtmlConstant("&nbsp;");
+           if (!folder.equals(dummy)) {
+                  String html = AbstractImagePrototype.create(MysharedTreeView.images.folderYellow()).getHTML();
+               safeHtmlBuilder.appendHtmlConstant(html).appendHtmlConstant("&nbsp;");
+           }
             safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(folder.getName()));
         }
 
@@ -121,26 +111,32 @@ public class MysharedTreeViewModel implements TreeViewModel {
     public <T> NodeInfo<?> getNodeInfo(T value) {
         if (value == null) {
                fetchSharedContainers(null);
+               if (firstLevelDataProvider.getList().get(0).equals(dummy))
+                return new DefaultNodeInfo<Folder>(firstLevelDataProvider, folderCell, null, null);
             return new DefaultNodeInfo<Folder>(firstLevelDataProvider, folderCell, selectionModel, null);
         }
         return null;
     }
 
        private void fetchSharedContainers(final Command callback) {
-        String path = "?format=json&shared=";
-        GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, app.getApiPath(), app.getUsername(), path) {
+        app.LOG("MysharedTreeViewModel::fetchSharedContainers(), callback=", callback);
+        String path = "?format=json&shared=&public=";
+        GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, app.getApiPath(), app.getUserID(), path) {
             @Override
             public void onSuccess(final AccountResource _result) {
                                firstLevelDataProvider.getList().clear();
-                Folder t = null;
                 for (Folder c : _result.getContainers()) {
                        if (c.isHome())
                                firstLevelDataProvider.getList().add(0, c); //Pithos is always first
                        else if (!c.isTrash())
                                firstLevelDataProvider.getList().add(c);
                 }
-                               if (callback != null)
-                                       callback.execute();
+                if (firstLevelDataProvider.getList().isEmpty())
+                       firstLevelDataProvider.getList().add(dummy);
+                               if (callback != null) {
+                    app.LOG("MysharedTreeViewModel::fetchSharedContainers(), executing callback");
+                    callback.execute();
+                }
             }
 
             @Override
@@ -158,7 +154,7 @@ public class MysharedTreeViewModel implements TreeViewModel {
                                app.sessionExpired();
                        }
         };
-        getAccount.setHeader("X-Auth-Token", app.getToken());
+        getAccount.setHeader(Const.X_AUTH_TOKEN, app.getUserToken());
         Scheduler.get().scheduleDeferred(getAccount);
        }
 
@@ -168,17 +164,14 @@ public class MysharedTreeViewModel implements TreeViewModel {
                        return firstLevelDataProvider.getList().isEmpty();
                return true;
     }
-       
-       private native void log(String msg) /*-{
-               $wnd.console.log(msg);
-       }-*/;
 
     protected void fetchFolder(final Iterator<Folder> iter, final Command callback) {
+        app.LOG("MysharedTreeViewModel::fetchFolder(), iter=", iter.hasNext(), ", callback=", callback);
         if (iter.hasNext()) {
             final Folder f = iter.next();
 
-            String path = "/" + f.getContainer() + "?format=json&shared=&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
-            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
+            String path = "/" + f.getContainer() + "?format=json&shared=&public=&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
+            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
                 @Override
                 public void onSuccess(Folder _result) {
                     fetchFolder(iter, callback);
@@ -199,28 +192,39 @@ public class MysharedTreeViewModel implements TreeViewModel {
                                        app.sessionExpired();
                                }
             };
-            getFolder.setHeader("X-Auth-Token", app.getToken());
+            getFolder.setHeader(Const.X_AUTH_TOKEN, app.getUserToken());
             Scheduler.get().scheduleDeferred(getFolder);
         }
-        else if (callback != null)
+        else if(callback != null) {
             callback.execute();
+        }
     }
 
     public Folder getSelection() {
         return selectionModel.getSelectedObject();
     }
 
-    public void updateFolder(Folder folder, boolean showfiles) {
-        fetchFolder(folder,showfiles);
+    public void updateFolder(Folder folder, boolean showfiles, Command callback) {
+        fetchFolder(folder, showfiles, callback);
     }
 
-    public void fetchFolder(final Folder f, final boolean showfiles) {
-        String path = "/" + f.getContainer() + "?format=json&shared=" + URL.encodeQueryString(f.getPrefix());
-        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
+    public void fetchFolder(final Folder f, final boolean showfiles, final Command callback) {
+        app.LOG("MysharedTreeViewModel::fetchFolder(), folder=", f, ", showfiles=", showfiles, ", callback=", callback);
+        String path = "/" + f.getContainer() + "?format=json&shared=&public=" + URL.encodeQueryString(f.getPrefix());
+        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
             @Override
             public void onSuccess(final Folder _result) {
+               for (File file : _result.getFiles()) {
+                       String name = file.getName();
+                                       if (name.lastIndexOf("/") != -1) {
+                                               file.setName(name.substring(name.lastIndexOf("/") + 1, name.length()));
+                                       }
+               }
+
                 if (showfiles)
                     app.showFiles(_result);
+                if (callback != null)
+                       callback.execute();
             }
 
             @Override
@@ -238,7 +242,7 @@ public class MysharedTreeViewModel implements TreeViewModel {
                                app.sessionExpired();
                        }
         };
-        getFolder.setHeader("X-Auth-Token", app.getToken());
+        getFolder.setHeader("X-Auth-Token", app.getUserToken());
         Scheduler.get().scheduleDeferred(getFolder);
     }