Reverted back to ListDataProvider. Fixed race condition when creating my shared tree...
authorChristos Stathis <chstath@gmail.com>
Sat, 15 Oct 2011 22:15:00 +0000 (01:15 +0300)
committerChristos Stathis <chstath@gmail.com>
Sat, 15 Oct 2011 22:15:00 +0000 (01:15 +0300)
src/gr/grnet/pithos/web/client/GssCellTreeBasic.css
src/gr/grnet/pithos/web/client/Pithos.java
src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java
src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java
src/gr/grnet/pithos/web/public/images/cellTreeLoadingBasic.gif [new file with mode: 0644]

index fabc026..fa454da 100644 (file)
@@ -20,6 +20,7 @@
 .cellTreeEmptyMessage {
   padding-left: 16px;
   font-style: italic;
+  background: url(images/cellTreeLoadingBasic.gif) no-repeat;
 }
 
 .cellTreeItem {
index b8f577d..9bfde32 100644 (file)
@@ -326,7 +326,7 @@ public class Pithos implements EntryPoint, ResizeHandler {
                     deselectOthers(folderTreeView, folderTreeSelectionModel);
                     applyPermissions(folderTreeSelectionModel.getSelectedObject());
                     Folder f = folderTreeSelectionModel.getSelectedObject();
-                    updateFolder(f, true, null);
+                    showFiles(f);
                 }
             }
         });
@@ -886,7 +886,6 @@ public class Pithos implements EntryPoint, ResizeHandler {
             DeleteRequest deleteFolder = new DeleteRequest(getApiPath(), getUsername(), path) {
                 @Override
                 public void onSuccess(@SuppressWarnings("unused") Resource result) {
-//                     folderTreeSelectionModel.setSelected(folder.getParent(), true);
                     updateFolder(folder.getParent(), true, new Command() {
                                                
                                                @Override
index 98861dd..dc8d142 100644 (file)
@@ -103,7 +103,7 @@ public class FolderTreeViewModel implements TreeViewModel {
 
     protected ListDataProvider<Folder> rootDataProvider = new ListDataProvider<Folder>();
 
-    private Map<Folder, AsyncDataProvider<Folder>> dataProviderMap = new HashMap<Folder, AsyncDataProvider<Folder>>();
+    private Map<Folder, ListDataProvider<Folder>> dataProviderMap = new HashMap<Folder, ListDataProvider<Folder>>();
 
     protected SingleSelectionModel<Folder> selectionModel;
 
@@ -121,15 +121,12 @@ public class FolderTreeViewModel implements TreeViewModel {
         }
                final Folder f = (Folder) value;
                if (dataProviderMap.get(f) == null) {
-                   dataProviderMap.put(f, new AsyncDataProvider<Folder>() {
-
-                               @Override
-                               protected void onRangeChanged(HasData<Folder> display) {
-                                       fetchFolder(f, this, false, null);
-                               }
-                   });
+                   dataProviderMap.put(f, new ListDataProvider<Folder>());
                }
-               final AsyncDataProvider<Folder> dataProvider = dataProviderMap.get(f);
+               final ListDataProvider<Folder> dataProvider = dataProviderMap.get(f);
+               dataProvider.getList().clear();
+               dataProvider.getList().addAll(f.getSubfolders());
+               fetchFolder(f, dataProvider, false, null);
                return new DefaultNodeInfo<Folder>(dataProvider, folderCell, selectionModel, null);
     }
 
@@ -192,17 +189,11 @@ public class FolderTreeViewModel implements TreeViewModel {
         return selectionModel.getSelectedObject();
     }
 
-    public void updateFolder(final Folder folder, final boolean showfiles, final Command callback) {
+    public void updateFolder(final Folder folder, boolean showfiles, final Command callback) {
         if (dataProviderMap.get(folder) == null) {
-            dataProviderMap.put(folder, new AsyncDataProvider<Folder>() {
-
-                               @Override
-                               protected void onRangeChanged(HasData<Folder> display) {
-                               fetchFolder(folder, this, showfiles, null);
-                               }
-            });
+            dataProviderMap.put(folder, new ListDataProvider<Folder>());
         }
-        final AsyncDataProvider<Folder> dataProvider = dataProviderMap.get(folder);
+        final ListDataProvider<Folder> dataProvider = dataProviderMap.get(folder);
         fetchFolder(folder, dataProvider, showfiles, new Command() {
                        
                        @Override
@@ -214,7 +205,7 @@ public class FolderTreeViewModel implements TreeViewModel {
                });
     }
 
-    public void fetchFolder(final Folder f, final AsyncDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {
+    public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {
         String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
         GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
             @Override
@@ -225,8 +216,8 @@ public class FolderTreeViewModel implements TreeViewModel {
                 fetchFolder(iter, new Command() {
                     @Override
                     public void execute() {
-                        dataProvider.updateRowCount(_result.getSubfolders().size(), true);
-                        dataProvider.updateRowData(0, new ArrayList<Folder>(_result.getSubfolders()));
+                        dataProvider.getList().clear();
+                        dataProvider.getList().addAll(_result.getSubfolders());
 //                        app.getFolderTreeView().updateChildren(f);
                         if (callback != null)
                                callback.execute();
index 4731ed1..a78748c 100644 (file)
@@ -43,7 +43,6 @@ import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeView.Templates;
 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;
@@ -65,8 +64,6 @@ 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.AsyncDataProvider;
-import com.google.gwt.view.client.HasData;
 import com.google.gwt.view.client.ListDataProvider;
 import com.google.gwt.view.client.SelectionChangeEvent;
 import com.google.gwt.view.client.SelectionChangeEvent.Handler;
@@ -97,16 +94,9 @@ public class MysharedTreeViewModel implements TreeViewModel {
         }
     };
 
-    boolean hasSharedFolders = false;
-    protected AsyncDataProvider<Folder> firstLevelDataProvider = new AsyncDataProvider<Folder>() {
+    protected ListDataProvider<Folder> firstLevelDataProvider = new ListDataProvider<Folder>();
 
-               @Override
-               protected void onRangeChanged(HasData<Folder> display) {
-                       fetchSharedContainers(null);
-               }
-    };
-
-    private Map<Folder, AsyncDataProvider<Folder>> dataProviderMap = new HashMap<Folder, AsyncDataProvider<Folder>>();
+    private Map<Folder, ListDataProvider<Folder>> dataProviderMap = new HashMap<Folder, ListDataProvider<Folder>>();
     
     protected Set<File> sharedFiles = new HashSet<File>();
 
@@ -152,36 +142,30 @@ public class MysharedTreeViewModel implements TreeViewModel {
             }),  selectionModel2, null);
         }
         else if (value instanceof String) {
-//             fetchSharedContainers(null);
+               fetchSharedContainers(null);
             return new DefaultNodeInfo<Folder>(firstLevelDataProvider, folderCell, selectionModel, null);
         }
         else {
             final Folder f = (Folder) value;
             if (dataProviderMap.get(f) == null) {
-                dataProviderMap.put(f, new AsyncDataProvider<Folder>() {
-
-                                       @Override
-                                       protected void onRangeChanged(HasData<Folder> display) {
-                                   fetchFolder(f, this, false);
-                                       }
-                });
+                dataProviderMap.put(f, new ListDataProvider<Folder>());
             }
-            final AsyncDataProvider<Folder> dataProvider = dataProviderMap.get(f);
+            final ListDataProvider<Folder> dataProvider = dataProviderMap.get(f);
+            fetchFolder(f, dataProvider, false);
             return new DefaultNodeInfo<Folder>(dataProvider, folderCell, selectionModel, null);
         }
     }
 
        protected void fetchSharedFiles() {
        final List<Folder> containers = app.getAccount().getContainers();
-       final List<Folder> tempProvider = new ArrayList<Folder>();
+       final ListDataProvider<Folder> tempProvider = new ListDataProvider<Folder>();
        Iterator<Folder> iter = containers.iterator();
        fetchFolder(iter, tempProvider, new Command() {
                        
                        @Override
                        public void execute() {
-                               firstLevelDataProvider.updateRowCount(tempProvider.size(), true);
-                               firstLevelDataProvider.updateRowData(0, tempProvider);
-                               hasSharedFolders = tempProvider.size() > 0;
+                               firstLevelDataProvider.getList().clear();
+                               firstLevelDataProvider.getList().addAll(tempProvider.getList());
                                app.showFiles(sharedFiles);
                        }
                });
@@ -189,15 +173,14 @@ public class MysharedTreeViewModel implements TreeViewModel {
 
        private void fetchSharedContainers(final Command callback) {
        final List<Folder> containers = app.getAccount().getContainers();
-       final List<Folder> tempProvider = new ArrayList<Folder>();
+       final ListDataProvider<Folder> tempProvider = new ListDataProvider<Folder>();
        Iterator<Folder> iter = containers.iterator();
        fetchFolder(iter, tempProvider, new Command() {
                        
                        @Override
                        public void execute() {
-                               firstLevelDataProvider.updateRowCount(tempProvider.size(), true);
-                               firstLevelDataProvider.updateRowData(0, tempProvider);
-                               hasSharedFolders = tempProvider.size() > 0;
+                               firstLevelDataProvider.getList().clear();
+                               firstLevelDataProvider.getList().addAll(tempProvider.getList());
                                if (callback != null)
                                        callback.execute();
                        }
@@ -213,11 +196,11 @@ public class MysharedTreeViewModel implements TreeViewModel {
             return f.getSubfolders().isEmpty();
         }
                else {
-                       return !hasSharedFolders;
+                       return firstLevelDataProvider.getList().isEmpty();
                }
     }
 
-    protected void fetchFolder(final Iterator<Folder> iter, final List<Folder> dataProvider, final Command callback) {
+    protected void fetchFolder(final Iterator<Folder> iter, final ListDataProvider<Folder> dataProvider, final Command callback) {
         if (iter.hasNext()) {
             final Folder f = iter.next();
 
@@ -240,7 +223,7 @@ public class MysharedTreeViewModel implements TreeViewModel {
                                                });
                        }
                        else {
-                               dataProvider.add(_result);
+                               dataProvider.getList().add(_result);
                            fetchFolder(iter, dataProvider, callback);
                        }
                 }
@@ -270,21 +253,15 @@ public class MysharedTreeViewModel implements TreeViewModel {
         return selectionModel.getSelectedObject();
     }
 
-    public void updateFolder(final Folder folder, final boolean showfiles) {
+    public void updateFolder(Folder folder, boolean showfiles) {
         if (dataProviderMap.get(folder) == null) {
-            dataProviderMap.put(folder, new AsyncDataProvider<Folder>() {
-
-                               @Override
-                               protected void onRangeChanged(HasData<Folder> display) {
-                               fetchFolder(folder, this, showfiles);
-                               }
-            });
+            dataProviderMap.put(folder, new ListDataProvider<Folder>());
         }
-        final AsyncDataProvider<Folder> dataProvider = dataProviderMap.get(folder);
+        final ListDataProvider<Folder> dataProvider = dataProviderMap.get(folder);
         fetchFolder(folder, dataProvider, showfiles);
     }
 
-    public void fetchFolder(final Folder f, final AsyncDataProvider<Folder> dataProvider, final boolean showfiles) {
+    public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles) {
         String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
         GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
             @Override
@@ -292,12 +269,11 @@ public class MysharedTreeViewModel implements TreeViewModel {
                 if (showfiles)
                     app.showFiles(_result);
                 Iterator<Folder> iter = _result.getSubfolders().iterator();
-                final List<Folder> temp = new ArrayList<Folder>();
-                fetchFolder(iter, temp, new Command() {
+                fetchFolder(iter, dataProvider, new Command() {
                     @Override
                     public void execute() {
-                        dataProvider.updateRowCount(_result.getSubfolders().size(), true);
-                               dataProvider.updateRowData(0, new ArrayList<Folder>(_result.getSubfolders()));
+                        dataProvider.getList().clear();
+                               dataProvider.getList().addAll(_result.getSubfolders());
                         app.getMySharedTreeView().updateChildren(f);
                     }
                 });
diff --git a/src/gr/grnet/pithos/web/public/images/cellTreeLoadingBasic.gif b/src/gr/grnet/pithos/web/public/images/cellTreeLoadingBasic.gif
new file mode 100644 (file)
index 0000000..c5fedc3
Binary files /dev/null and b/src/gr/grnet/pithos/web/public/images/cellTreeLoadingBasic.gif differ