fix lazy loading excpetions
[pithos] / src / gr / ebs / gss / client / FileList.java
index c36aa6e..7cd33c1 100644 (file)
@@ -44,6 +44,7 @@ import com.google.gwt.http.client.URL;
 import com.google.gwt.i18n.client.DateTimeFormat;
 import com.google.gwt.resources.client.ClientBundle;
 import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.ClientBundle.Source;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.Event;
@@ -220,7 +221,7 @@ public class FileList extends Composite implements ClickHandler {
        private HTML ownerLabel;
 
        private HTML pathLabel;
-
+       private FileContextMenu menuShowing;
        /**
         * Construct the file list widget. This entails setting up the widget
         * layout, fetching the number of files in the current folder from the
@@ -242,6 +243,8 @@ public class FileList extends Composite implements ClickHandler {
                table.setCellSpacing(0);
                table.setCellPadding(2);
                table.setWidth("100%");
+
+               // Hook up events.
                table.addClickHandler(new ClickHandler() {
 
                        @Override
@@ -251,6 +254,7 @@ public class FileList extends Composite implements ClickHandler {
                                onRowClicked(cell.getRowIndex(), true);
                        }
                });
+
                // Create the 'navigation' bar at the upper-right.
                HorizontalPanel innerNavBar = new HorizontalPanel();
                innerNavBar.setStyleName("gss-ListNavBar");
@@ -303,7 +307,6 @@ public class FileList extends Composite implements ClickHandler {
                }
        }
 
-
        @Override
        public void onBrowserEvent(Event event) {
                if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT){
@@ -326,20 +329,20 @@ public class FileList extends Composite implements ClickHandler {
                                if(!selectedRows.contains(ri-1))
                                        onRowClicked(ri, false);
                }
-
                if (files == null || files.size() == 0) {
                        if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && selectedRows.size() == 0) {
-                               FileContextMenu fm = new FileContextMenu(images, false, true);
-                               fm.onEmptyEvent(event);
+                               menuShowing = new FileContextMenu(images, false, true);
+                               menuShowing=menuShowing.onEmptyEvent(event);
                        }
                        return;
                }
                if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && selectedRows.size() != 0) {
-                       FileContextMenu fm = new FileContextMenu(images, false, false);
-                       fm.onEvent(event);
+                       GWT.log("*****GOING TO SHOW CONTEXT MENU ****", null);
+                       menuShowing =  new FileContextMenu(images, false, false);
+                       menuShowing=menuShowing.onEvent(event);
                } else if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && selectedRows.size() == 0) {
-                       FileContextMenu fm = new FileContextMenu(images, false, true);
-                       fm.onEmptyEvent(event);
+                       menuShowing = new FileContextMenu(images, false, true);
+                       menuShowing=menuShowing.onEmptyEvent(event);
                } else if (DOM.eventGetType(event) == Event.ONDBLCLICK)
                        if (getSelectedFiles().size() == 1) {
                                GSS app = GSS.get();
@@ -392,17 +395,20 @@ public class FileList extends Composite implements ClickHandler {
                        return;
                if (clickShift) {
                        GWT.log("Row is: " + row + " fs: " + firstShift, null);
-                       if (firstShift == -1)
+                       if (firstShift == -1){
                                firstShift = row;
+                               makeRowDraggable(row);
+                       }
                        else if (row > firstShift) {
                                clearSelectedRows();
                                for (int i = firstShift; i < row; i++) {
                                        selectedRows.add(startIndex + i);
                                        styleRow(i, true);
+                                       makeRowDraggable(i+1);
                                }
                                GSS.get().setCurrentSelection(getSelectedFiles());
                                contextMenu.setFiles(getSelectedFiles());
-                               makeRowDraggable(row);
+                               //makeRowDraggable(row);
                        } else if (row != -1 && row == firstShift) {
                                selectedRows.add(row - 1);
                                styleRow(row, true);
@@ -410,6 +416,7 @@ public class FileList extends Composite implements ClickHandler {
                                GSS.get().setCurrentSelection(getSelectedFiles());
                                contextMenu.setFiles(getSelectedFiles());
                                makeRowDraggable(row);
+                               makeRowDraggable(row+1);
                        } else if (row < firstShift) {
                                GWT.log("Row is:" + row + " fs:" + firstShift, null);
                                clearSelectedRows();
@@ -417,9 +424,10 @@ public class FileList extends Composite implements ClickHandler {
                                for (int i = firstShift; i >= row - 1; i--) {
                                        selectedRows.add(startIndex + i);
                                        styleRow(i, true);
+                                       makeRowDraggable(i+1);
                                }
                                GSS.get().setCurrentSelection(getSelectedFiles());
-                               makeRowDraggable(row);
+                               //makeRowDraggable(row);
                                contextMenu.setFiles(getSelectedFiles());
                        }
                } else if (row > 0)
@@ -437,7 +445,6 @@ public class FileList extends Composite implements ClickHandler {
                        @Override
                        public void onClick(ClickEvent event) {
                                sortFiles("name");
-
                        }
 
                });
@@ -666,21 +673,24 @@ public class FileList extends Composite implements ClickHandler {
 
                        //add view image link for image files
                        String contentType = file.getContentType();
+                       HTML nameHtml = null;
                        if (contentType.endsWith("png") || contentType.endsWith("gif") || contentType.endsWith("jpeg") )
-                               table.setHTML(i, 1, file.getName() + " <a href='" +
+                               nameHtml = new HTML( file.getName() + " <a href='" +
                                                GSS.get().getTopPanel().getFileMenu().getDownloadURL(file) +
-                                               "' title='" + file.getName() + "' rel='lytebox[p]' " +
-                                               "onclick='myLytebox.start(this, false, false)'>" +
+                                               "' title='" + file.getOwner() + " : " + file.getPath() + file.getName() +
+                                               "' rel='lytebox[mnf]' " +
+                                               "onclick='myLytebox.start(this, false, false); return false;'>" +
                                                "(view)" + "</a>");
                        else
-                               table.setHTML(i, 1, file.getName());
-                               
+                               nameHtml=new HTML( file.getName());
+                       table.setWidget(i, 1, nameHtml);
+
                        if(GSS.get().findUserFullName(file.getOwner()) == null){
                                GetUserCommand guc = new GetUserCommand(file.getOwner());
                                guc.execute();
                                GSS.get().putUserToMap(file.getOwner(), file.getOwner());
                        }
-                       table.setText(i, 2, GSS.get().findUserFullName(file.getOwner()));
+                       table.setText(i, 2, GSS.get().getUserFullName(file.getOwner()));
                        table.setText(i, 3, file.getPath());
                        table.setText(i, 4, String.valueOf(file.getVersion()));
                        table.setText(i, 5, String.valueOf(file.getFileSizeAsString()));
@@ -730,7 +740,7 @@ public class FileList extends Composite implements ClickHandler {
         */
        private AbstractImagePrototype getFileIcon(FileResource file) {
                String mimetype = file.getContentType();
-               boolean shared=false;
+               boolean shared = false;
                Folders folders = GSS.get().getFolders();
                if(folders.getCurrent() != null && folders.isOthersSharedItem(folders.getCurrent())){
                        DnDTreeItem otherUser = (DnDTreeItem) folders.getUserOfSharedItem(folders.getCurrent());
@@ -808,69 +818,69 @@ public class FileList extends Composite implements ClickHandler {
        }
 
        public void updateFileCache(boolean updateSelectedFolder, final boolean clearSelection, final String newFilename) {
-               if (!updateSelectedFolder && !GSS.get().getFolders().getTrashItem().equals(GSS.get().getFolders().getCurrent()))
+               if (!updateSelectedFolder && !GSS.get().getFolders().getCurrent().equals(GSS.get().getFolders().getTrashItem()))
                        updateFileCache(clearSelection);
                else if (GSS.get().getFolders().getCurrent() != null) {
                        final DnDTreeItem folderItem = (DnDTreeItem) GSS.get().getFolders().getCurrent();
-                       if( folderItem.getFolderResource()!= null){
+                       if (folderItem.getFolderResource() != null) {
                                if(GSS.get().getFolders().isFileItem(folderItem) || GSS.get().getFolders().isMySharedItem(folderItem)  || GSS.get().getFolders().isOthersSharedItem(folderItem) ){
-                                       update(true);
-                                       GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, folderItem.getFolderResource().getUri(),folderItem.getFolderResource()) {
+                               update(true);
+                               GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, folderItem.getFolderResource().getUri(),folderItem.getFolderResource()) {
 
-                                                       @Override
-                                                       public void onComplete() {
-                                                               folderItem.setUserObject(getResult());
+                                       @Override
+                                       public void onComplete() {
+                                               folderItem.setUserObject(getResult());
                                                                if(GSS.get().getFolders().isFileItem(folderItem)){
-                                                                       String[] filePaths = new String[folderItem.getFolderResource().getFilePaths().size()];
-                                                                       int c=0;
-                                                                       for(String fpath : folderItem.getFolderResource().getFilePaths()){
-                                                                               filePaths[c] = fpath + "?" + Math.random();
-                                                                               c++;
+                                                       String[] filePaths = new String[folderItem.getFolderResource().getFilePaths().size()];
+                                                       int c=0;
+                                                       for(String fpath : folderItem.getFolderResource().getFilePaths()){
+                                                               filePaths[c] = fpath + "?" + Math.random();
+                                                               c++;
+                                                       }
+                                                       MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getFolderResource().getFileCache()){
+
+                                                               @Override
+                                                               public void onComplete(){
+                                                                       List<FileResource> result = getResult();
+                                                                       //remove random from path
+                                                                       for(FileResource r : result){
+                                                                               String p = r.getUri();
+                                                                               int indexOfQuestionMark = p.lastIndexOf('?');
+                                                                               if(indexOfQuestionMark>0)
+                                                                                       r.setUri(p.substring(0, indexOfQuestionMark));
+                                                                               GWT.log("FETCHED:"+r.getLastModifiedSince(), null);
                                                                        }
-                                                                       MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getFolderResource().getFileCache()){
-
-                                                                               @Override
-                                                                               public void onComplete(){
-                                                                                       List<FileResource> result = getResult();
-                                                                                       //remove random from path
-                                                                                       for(FileResource r : result){
-                                                                                               String p = r.getUri();
-                                                                                               int indexOfQuestionMark = p.lastIndexOf('?');
-                                                                                               if(indexOfQuestionMark>0)
-                                                                                                       r.setUri(p.substring(0, indexOfQuestionMark));
-                                                                                               GWT.log("FETCHED:"+r.getLastModifiedSince(), null);
-                                                                                       }
-                                                                                       folderItem.getFolderResource().setFiles(result);
-                                                                                       folderItem.getFolderResource().setFilesExpanded(true);
-                                                                                       updateFileCache(clearSelection, newFilename);
-                                                                               }
-
-                                                                               @Override
-                                                                               public void onError(String p, Throwable throwable) {
-                                                                                       if(throwable instanceof RestException)
-                                                                                               GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());
-                                                                               }
-
-                                                                               @Override
-                                                                               public void onError(Throwable t) {
-                                                                                       GWT.log("", t);
-                                                                                       GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());
-                                                                               }
-
-                                                                       };
-                                                                       DeferredCommand.addCommand(getFiles);
-                                                               }
-                                                               else
+                                                                       folderItem.getFolderResource().setFiles(result);
+                                                                       folderItem.getFolderResource().setFilesExpanded(true);
                                                                        updateFileCache(clearSelection, newFilename);
-                                                       }
+                                                               }
 
-                                                       @Override
-                                                       public void onError(Throwable t) {
-                                                               GWT.log("", t);
-                                                               GSS.get().displayError("Unable to fetch folder " + folderItem.getFolderResource().getName());
-                                                       }
-                                               };
-                                               DeferredCommand.addCommand(gf);
+                                                               @Override
+                                                               public void onError(String p, Throwable throwable) {
+                                                                       if(throwable instanceof RestException)
+                                                                               GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());
+                                                               }
+
+                                                               @Override
+                                                               public void onError(Throwable t) {
+                                                                       GWT.log("", t);
+                                                                       GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());
+                                                               }
+
+                                                       };
+                                                       DeferredCommand.addCommand(getFiles);
+                                               }
+                                               else
+                                                       updateFileCache(clearSelection, newFilename);
+                                       }
+
+                                       @Override
+                                       public void onError(Throwable t) {
+                                               GWT.log("", t);
+                                               GSS.get().displayError("Unable to fetch folder " + folderItem.getFolderResource().getName());
+                                       }
+                               };
+                               DeferredCommand.addCommand(gf);
                                }
                        }
                        else if (folderItem.getTrashResource() != null) {
@@ -900,45 +910,16 @@ public class FileList extends Composite implements ClickHandler {
                                        @Override
                                        public void onComplete() {
                                                folderItem.setUserObject(getResult());
-                                               updateFileCache(clearSelection, newFilename);
-                                               String[] filePaths = new String[folderItem.getSharedResource().getFilePaths().size()];
-                                               int c=0;
-                                               for(String fpath : folderItem.getSharedResource().getFilePaths()){
-                                                       filePaths[c] = fpath + "?" + Math.random();
-                                                       c++;
-                                               }
-                                               MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getSharedResource().getFileCache()){
-
-                                                       @Override
-                                                       public void onComplete(){
-                                                               List<FileResource> result = getResult();
-                                                               //remove random from path
-                                                               for(FileResource r : result){
+                                               for(FileResource r : folderItem.getSharedResource().getFiles()){
                                                                        String p = r.getUri();
                                                                        int indexOfQuestionMark = p.lastIndexOf('?');
                                                                        if(indexOfQuestionMark>0)
                                                                                r.setUri(p.substring(0, indexOfQuestionMark));
                                                                        GWT.log("FETCHED:"+r.getLastModifiedSince(), null);
                                                                }
-                                                               folderItem.getSharedResource().setFiles(result);
                                                                folderItem.getSharedResource().setFilesExpanded(true);
                                                                updateFileCache(clearSelection, newFilename);
-                                                       }
-
-                                                       @Override
-                                                       public void onError(String p, Throwable throwable) {
-                                                               if(throwable instanceof RestException)
-                                                                       GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());
-                                                       }
-
-                                                       @Override
-                                                       public void onError(Throwable t) {
-                                                               GWT.log("", t);
-                                                               GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());
-                                                       }
-
-                                               };
-                                               DeferredCommand.addCommand(getFiles);
+                                               
                                        }
 
                                        @Override
@@ -954,45 +935,17 @@ public class FileList extends Composite implements ClickHandler {
                                        @Override
                                        public void onComplete() {
                                                folderItem.setUserObject(getResult());
-                                               updateFileCache(clearSelection, newFilename);
-                                               String[] filePaths = new String[folderItem.getOtherUserResource().getFilePaths().size()];
-                                               int c=0;
-                                               for(String fpath : folderItem.getOtherUserResource().getFilePaths()){
-                                                       filePaths[c] = fpath + "?" + Math.random();
-                                                       c++;
-                                               }
-                                               MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getOtherUserResource().getFileCache()){
-
-                                                       @Override
-                                                       public void onComplete(){
-                                                               List<FileResource> result = getResult();
-                                                               //remove random from path
-                                                               for(FileResource r : result){
+                                               //updateFileCache(clearSelection, newFilename);
+                                               for(FileResource r : folderItem.getOtherUserResource().getFiles()){
                                                                        String p = r.getUri();
                                                                        int indexOfQuestionMark = p.lastIndexOf('?');
                                                                        if(indexOfQuestionMark>0)
                                                                                r.setUri(p.substring(0, indexOfQuestionMark));
                                                                        GWT.log("FETCHED:"+r.getLastModifiedSince(), null);
                                                                }
-                                                               folderItem.getOtherUserResource().setFiles(result);
                                                                folderItem.getOtherUserResource().setFilesExpanded(true);
                                                                updateFileCache(clearSelection, newFilename);
-                                                       }
-
-                                                       @Override
-                                                       public void onError(String p, Throwable throwable) {
-                                                               if(throwable instanceof RestException)
-                                                                       GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());
-                                                       }
-
-                                                       @Override
-                                                       public void onError(Throwable t) {
-                                                               GWT.log("", t);
-                                                               GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());
-                                                       }
-
-                                               };
-                                               DeferredCommand.addCommand(getFiles);
+                                               
                                        }
 
                                        @Override
@@ -1007,6 +960,7 @@ public class FileList extends Composite implements ClickHandler {
                        updateFileCache(clearSelection);
        }
 
+
        private void updateFileCache(boolean clearSelection) {
                updateFileCache(clearSelection, null);
        }
@@ -1014,7 +968,6 @@ public class FileList extends Composite implements ClickHandler {
        /**
         * Update the file cache with data from the server.
         *
-        * @param userId the ID of the current user
         * @param newFilename the new name of the previously selected file,
         *                      if a rename operation has taken place
         */
@@ -1133,11 +1086,16 @@ public class FileList extends Composite implements ClickHandler {
                for (int r : selectedRows) {
                        int row = r - startIndex;
                        styleRow(row, false);
+                       makeRowNotDraggable(row+1);
                }
                selectedRows.clear();
                Object sel = GSS.get().getCurrentSelection();
                if (sel instanceof FileResource || sel instanceof List)
                        GSS.get().setCurrentSelection(null);
+               if(menuShowing != null && menuShowing.isShowing()){
+                       menuShowing.hide();
+                       menuShowing=null;
+               }
        }
 
        /**
@@ -1160,10 +1118,11 @@ public class FileList extends Composite implements ClickHandler {
                                break;
                        selectedRows.add(startIndex + i - 1);
                        styleRow(i - 1, true);
+                       makeRowDraggable(i);
                }
                GSS.get().setCurrentSelection(getSelectedFiles());
                contextMenu.setFiles(getSelectedFiles());
-               makeRowDraggable(i-1);
+
 
        }
 
@@ -1173,6 +1132,19 @@ public class FileList extends Composite implements ClickHandler {
                        table.setWidget(contextRow, 0, getFileIcon(files.get(contextRow - 1)).createImage());
                contextMenu.setWidget(new HTML(getFileIcon(files.get(row - 1)).getHTML()));
                table.setWidget(row, 0, contextMenu);
+               //for(int i=1;i<table.getCellCount(row);i++)
+                       //GSS.get().getDragController().makeDraggable(table.getWidget(row, i));
+               table.setWidget(row, 1, new DnDSimpleFocusPanel(table.getWidget(row, 1)));
+               ((DnDSimpleFocusPanel)table.getWidget(row, 1)).setFiles(getSelectedFiles());
+               GSS.get().getDragController().makeDraggable(table.getWidget(row, 1));
+       }
+       private void makeRowNotDraggable(int row){
+               if(table.getWidget(row, 1) instanceof DnDSimpleFocusPanel){
+                       ((DnDSimpleFocusPanel)table.getWidget(row, 1)).setFiles(null);
+                       GSS.get().getDragController().makeNotDraggable(table.getWidget(row, 1));
+                       table.setWidget(row, 1, new DnDSimpleFocusPanel(((DnDSimpleFocusPanel)table.getWidget(row, 1)).getWidget()));
+
+               }
        }
 
        private int getWidgetRow(Widget widget, Grid grid) {
@@ -1185,6 +1157,4 @@ public class FileList extends Composite implements ClickHandler {
                return -1;
        }
 
-
-
 }