Change image view URL according to new semantics for "view" URLs
[pithos-web-client] / src / gr / grnet / pithos / web / client / FileList.java
index 3e1a6f9..2a9068d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2011-2012 GRNET S.A. All rights reserved.
+ * Copyright 2011-2013 GRNET S.A. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or
  * without modification, are permitted provided that the following
 
 package gr.grnet.pithos.web.client;
 
-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 java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-
 import com.google.gwt.cell.client.Cell.Context;
 import com.google.gwt.cell.client.ImageResourceCell;
 import com.google.gwt.cell.client.SafeHtmlCell;
@@ -53,10 +43,8 @@ import com.google.gwt.cell.client.ValueUpdater;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ContextMenuEvent;
 import com.google.gwt.event.dom.client.ContextMenuHandler;
-import com.google.gwt.http.client.URL;
 import com.google.gwt.i18n.client.DateTimeFormat;
 import com.google.gwt.resources.client.ImageResource;
-import com.google.gwt.resources.client.ClientBundle.Source;
 import com.google.gwt.resources.client.ImageResource.ImageOptions;
 import com.google.gwt.resources.client.ImageResource.RepeatStyle;
 import com.google.gwt.safehtml.client.SafeHtmlTemplates;
@@ -74,6 +62,11 @@ import com.google.gwt.view.client.ListDataProvider;
 import com.google.gwt.view.client.MultiSelectionModel;
 import com.google.gwt.view.client.ProvidesKey;
 import com.google.gwt.view.client.SelectionChangeEvent;
+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 java.util.*;
 
 /**
  * A composite that displays the list of files in a particular folder.
@@ -224,11 +217,13 @@ public class FileList extends Composite {
 
        private final MultiSelectionModel<File> selectionModel;
 
+       Column<File, String> pathColumn;
+
        protected final List<SortableHeader> allHeaders = new ArrayList<SortableHeader>();
 
        SortableHeader nameHeader;
 
-    FolderTreeView treeView;
+       SortableHeader pathHeader;
 
     protected Pithos app;
 
@@ -240,10 +235,9 @@ public class FileList extends Composite {
         *
         * @param _images
         */
-       public FileList(final Pithos _app, Images _images, FolderTreeView _treeView) {
+       public FileList(final Pithos _app, Images _images) {
         app = _app;
                images = _images;
-        this.treeView = _treeView;
 
         final CellTable.Resources resources = GWT.create(TableResources.class);
 
@@ -285,10 +279,10 @@ public class FileList extends Composite {
                        @Override
                        public SafeHtml getValue(File object) {
                                SafeHtmlBuilder sb = new SafeHtmlBuilder();
-                sb.append(Templates.INSTANCE.filenameSpan(object.getName()));
+                               sb.append(Templates.INSTANCE.filenameSpan(object.getName()));
                                if (object.getContentType() != null && (object.getContentType().endsWith("png") || object.getContentType().endsWith("gif") || object.getContentType().endsWith("jpeg"))) {
                                sb.appendHtmlConstant("&nbsp;")
-                      .append(Templates.INSTANCE.viewLink(app.getApiPath() + object.getOwner() + object.getUri(), object.getName()));
+                      .append(Templates.INSTANCE.viewLink(Pithos.getFileViewURL(object), object.getName()));
                                }
                                
                                return sb.toSafeHtml();
@@ -303,6 +297,31 @@ public class FileList extends Composite {
 
                celltable.redrawHeaders();
                
+               pathColumn = new Column<File, String>(new TextCell()) {
+
+                       @Override
+                       public String getValue(File f) {
+                               String path;
+                               if (!app.getSelectedTree().equals(app.mysharedTreeView)) {
+                                       path = f.getParent().getPrefix();
+                                       if (path.length() == 0)
+                                               path = "/";
+                               }
+                               else {
+                                       path = f.getPath();
+                                       if (path.lastIndexOf("/") != -1)
+                                               path = path.substring(0, path.lastIndexOf("/"));
+                                       else
+                                               path = "/";
+                               }
+                               return path;
+                       }
+               };
+               pathHeader = new SortableHeader("Path", "path");
+               celltable.addColumn(pathColumn, pathHeader);
+               allHeaders.add(pathHeader);
+               pathHeader.setUpdater(new FileValueUpdater(pathHeader));
+               
         Column<File,String> aColumn = new Column<File,String>(new TextCell()) {
                        @Override
                        public String getValue(File object) {
@@ -338,7 +357,7 @@ public class FileList extends Composite {
             @Override
             public void onContextMenu(final ContextMenuEvent event) {
                final TreeView tree = app.getSelectedTree();
-               if (tree != null && (tree.equals(app.getFolderTreeView()) || tree.equals(app.getOtherSharedTreeView()))) {
+               if (tree != null) {
                        final int x = event.getNativeEvent().getClientX();
                        final int y = event.getNativeEvent().getClientY();
                        final Folder selectedFolder = app.getSelection();
@@ -374,13 +393,8 @@ public class FileList extends Composite {
                });
                
                celltable.setSelectionModel(selectionModel, PithosSelectionEventManager.<File> createDefaultManager());
-//             celltable.setPageSize(Pithos.VISIBLE_FILE_COUNT);
                
                sinkEvents(Event.ONCONTEXTMENU);
-//             sinkEvents(Event.ONMOUSEUP);
-//             sinkEvents(Event.ONMOUSEDOWN);
-//             sinkEvents(Event.ONCLICK);
-//             sinkEvents(Event.ONKEYDOWN);
                sinkEvents(Event.ONDBLCLICK);
                Pithos.preventIESelection();
        }
@@ -392,31 +406,10 @@ public class FileList extends Composite {
        @Override
        public void onBrowserEvent(Event event) {
 
-//             if (files == null || files.size() == 0) {
-//                     if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && getSelectedFiles().size() == 0) {
-//                             contextMenu = new FileContextMenu(images, false, true);
-//                contextMenu.show();
-//                             event.preventDefault();
-//                             event.cancelBubble(true);
-//                     }
-//                     return;
-//             }
-//             if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && getSelectedFiles().size() != 0) {
-//                     GWT.log("*****GOING TO SHOW CONTEXT MENU ****", null);
-//                     contextMenu =  new FileContextMenu(images, false, false);
-//                     contextMenu = contextMenu.onEvent(event);
-//                     event.cancelBubble(true);
-//                     event.preventDefault();
-//             } else if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && getSelectedFiles().size() == 0) {
-//                     contextMenu = new FileContextMenu(images, false, true);
-//                     contextMenu = contextMenu.onEmptyEvent(event);
-//                     event.cancelBubble(true);
-//                     event.preventDefault();
-//             } else 
                if (DOM.eventGetType(event) == Event.ONDBLCLICK)
                        if (getSelectedFiles().size() == 1) {
                                File file = getSelectedFiles().get(0);
-                               Window.open(app.getApiPath() + file.getOwner() + file.getUri(), "_blank", "");
+                               Window.open(Pithos.getFileViewURL(file), "_blank", "");
                                event.preventDefault();
                                return;
                        }
@@ -473,6 +466,14 @@ public class FileList extends Composite {
         * Fill the file cache with data.
         */
        public void setFiles(final List<File> _files) {
+               if (!app.getSelectedTree().equals(app.mysharedTreeView)) {
+                       if (celltable.getColumnIndex(pathColumn) != -1)
+                               celltable.removeColumn(pathColumn);
+               }
+               else {
+                       if (celltable.getColumnIndex(pathColumn) == -1)
+                               celltable.insertColumn(2, pathColumn, pathHeader);
+               }
                files = new ArrayList<File>();
        for (File fres : _files) {
                        files.add(fres);
@@ -538,7 +539,7 @@ public class FileList extends Composite {
                             if (sortingProperty.equals("version")) {
                                     return arg0.getVersion() - arg1.getVersion();
                             } else if (sortingProperty.equals("owner")) {
-                                    return arg0.getOwner().compareTo(arg1.getOwner());
+                                    return arg0.getOwnerID().compareTo(arg1.getOwnerID());
                             } else if (sortingProperty.equals("date")) {
                                        if (arg0.getLastModified() != null && arg1.getLastModified() != null)
                                                return arg0.getLastModified().compareTo(arg1.getLastModified());
@@ -558,7 +559,7 @@ public class FileList extends Composite {
                             return arg1.getVersion() - arg0.getVersion();
                     } else if (sortingProperty.equals("owner")) {
                             
-                            return arg1.getOwner().compareTo(arg0.getOwner());
+                            return arg1.getOwnerID().compareTo(arg0.getOwnerID());
                     } else if (sortingProperty.equals("date")) {
                             
                             return arg1.getLastModified().compareTo(arg0.getLastModified());
@@ -631,4 +632,23 @@ public class FileList extends Composite {
                else if (callback != null)
                        callback.execute();
        }
+
+       public void selectByUrl(List<String> selectedUrls) {
+               Set<File> previous = selectionModel.getSelectedSet();
+               for (File f : previous)
+                       selectionModel.setSelected(f, false);
+               
+               int i = 0;
+               boolean scrolled = false;
+               for (File f : files) {
+                       if (selectedUrls.contains(Pithos.getStorageAPIURL() + f.getOwnerID() + f.getUri())) {
+                               selectionModel.setSelected(f, true);
+                               if (!scrolled) {
+                                       celltable.getRowElement(i).getCells().getItem(0).scrollIntoView();
+                                       scrolled = true;
+                               }
+                       }
+                       i++;
+               }
+       }
 }