package gr.grnet.pithos.web.client;
-import com.google.gwt.event.dom.client.ContextMenuEvent;
-import com.google.gwt.event.dom.client.ContextMenuHandler;
-import static com.google.gwt.query.client.GQuery.$;
-
-import gr.grnet.pithos.web.client.commands.UploadFileCommand;
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.rest.resource.FileResource;
-import gwtquery.plugins.draggable.client.DraggableOptions;
-import gwtquery.plugins.draggable.client.StopDragException;
-import gwtquery.plugins.draggable.client.DraggableOptions.DragFunction;
-import gwtquery.plugins.draggable.client.DraggableOptions.RevertOption;
-import gwtquery.plugins.draggable.client.events.DragContext;
-import gwtquery.plugins.draggable.client.events.DragStartEvent;
-import gwtquery.plugins.draggable.client.events.DragStopEvent;
-import gwtquery.plugins.draggable.client.events.DragStartEvent.DragStartEventHandler;
-import gwtquery.plugins.draggable.client.events.DragStopEvent.DragStopEventHandler;
-import gwtquery.plugins.droppable.client.gwt.DragAndDropCellTable;
-import gwtquery.plugins.droppable.client.gwt.DragAndDropColumn;
import java.util.ArrayList;
import java.util.Collections;
import com.google.gwt.cell.client.TextCell;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.core.client.GWT;
-import com.google.gwt.dom.client.Style.Cursor;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.ContextMenuEvent;
+import com.google.gwt.event.dom.client.ContextMenuHandler;
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.safehtml.client.SafeHtmlTemplates;
+import com.google.gwt.safehtml.client.SafeHtmlTemplates.Template;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.CellTable;
-import com.google.gwt.user.cellview.client.GssSimplePager;
+import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.AbstractImagePrototype;
-import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
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 com.google.gwt.view.client.SelectionChangeEvent.Handler;
/**
* A composite that displays the list of files in a particular folder.
interface TableStyle extends CellTable.Style {
}
- interface TableResources extends DragAndDropCellTable.Resources {
- @Source({CellTable.Style.DEFAULT_CSS, "GssCellTable.css"})
+ interface TableResources extends CellTable.Resources {
+ @Override
+ @Source({CellTable.Style.DEFAULT_CSS, "PithosCellTable.css"})
TableStyle cellTableStyle();
}
public SafeHtml spanWithIdAndClass(String id, String cssClass, String content);
}
- private String showingStats = "";
-
- private int startIndex = 0;
-
- /**
- * A constant that denotes the completion of an IncrementalCommand.
- */
- public static final boolean DONE = false;
-
- private final DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a");
+ protected final DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a");
/**
* Specifies that the images available for this composite will be the ones
* available in FileContextMenu.
*/
- public interface Images extends ClientBundle,FileContextMenu.Images, CellTreeView.Images {
+ public interface Images extends FolderTreeView.Images {
@Source("gr/grnet/pithos/resources/blank.gif")
ImageResource blank();
/**
* The widget's image bundle.
*/
- private final Images images;
+ protected final Images images;
- private DragAndDropCellTable<File> celltable;
+ protected CellTable<File> celltable;
private final MultiSelectionModel<File> selectionModel;
- private final List<SortableHeader> allHeaders = new ArrayList<SortableHeader>();
+ protected final List<SortableHeader> allHeaders = new ArrayList<SortableHeader>();
SortableHeader nameHeader;
- GssSimplePager pagerBottom;
-
- GssSimplePager pagerTop;
-
- Button uploadButtonBottom;
-
- Button uploadButtonTop;
-
FolderTreeView treeView;
- private Pithos app;
+ protected Pithos app;
/**
* Construct the file list widget. This entails setting up the widget
images = _images;
this.treeView = _treeView;
- DragAndDropCellTable.Resources resources = GWT.create(TableResources.class);
+ CellTable.Resources resources = GWT.create(TableResources.class);
ProvidesKey<File> keyProvider = new ProvidesKey<File>(){
}
};
- celltable = new DragAndDropCellTable<File>(Pithos.VISIBLE_FILE_COUNT, resources, keyProvider);
+ celltable = new CellTable<File>(10, resources, keyProvider);
celltable.setWidth("100%");
celltable.setStyleName("pithos-List");
- DragAndDropColumn<File, ImageResource> status = new DragAndDropColumn<File, ImageResource>(new ImageResourceCell() {
+ Column<File, ImageResource> status = new Column<File, ImageResource>(new ImageResourceCell() {
@Override
public boolean handlesSelection() {
return false;
}
};
celltable.addColumn(status,"");
- initDragOperation(status);
- final DragAndDropColumn<File,SafeHtml> nameColumn = new DragAndDropColumn<File,SafeHtml>(new SafeHtmlCell()) {
+ final Column<File,SafeHtml> nameColumn = new Column<File,SafeHtml>(new SafeHtmlCell()) {
@Override
public SafeHtml getValue(File object) {
sb.append(Templates.INSTANCE.filenameSpan(object.getName()));
if (object.getContentType().endsWith("png") || object.getContentType().endsWith("gif") || object.getContentType().endsWith("jpeg")) {
sb.appendHtmlConstant(" ")
- .append(Templates.INSTANCE.viewLink(object.getUri(), object.getOwner() + " : " + object.getPath() + object.getName()));
+ .append(Templates.INSTANCE.viewLink(app.getApiPath() + object.getOwner() + object.getUri() + "?X-Auth-Token=" + app.getToken(), object.getName()));
}
return sb.toSafeHtml();
}
};
- initDragOperation(nameColumn);
celltable.addColumn(nameColumn, nameHeader = new SortableHeader("Name"));
allHeaders.add(nameHeader);
nameHeader.setUpdater(new FileValueUpdater(nameHeader, "name"));
celltable.redrawHeaders();
- DragAndDropColumn<File,String> aColumn = new DragAndDropColumn<File, String>(new TextCell()) {
- @Override
- public String getValue(File object) {
- return object.getOwner();
- }
- };
- SortableHeader aheader = new SortableHeader("Owner");
- celltable.addColumn(aColumn, aheader);
- initDragOperation(aColumn);
- allHeaders.add(aheader);
- aheader.setUpdater(new FileValueUpdater(aheader, "owner"));
-
- aColumn = new DragAndDropColumn<File,String>(new TextCell()) {
- @Override
- public String getValue(File object) {
- return object.getPath();
- }
- };
- aheader = new SortableHeader("Path");
- celltable.addColumn(aColumn, aheader);
- initDragOperation(aColumn);
- allHeaders.add(aheader);
- aheader.setUpdater(new FileValueUpdater(aheader, "path"));
-
- aColumn = new DragAndDropColumn<File,String>(new TextCell()) {
- @Override
- public String getValue(File object) {
- return String.valueOf(object.getVersion());
- }
- };
- aheader = new SortableHeader("Version");
- celltable.addColumn(aColumn, aheader);
- initDragOperation(aColumn);
- allHeaders.add(aheader);
- aheader.setUpdater(new FileValueUpdater(aheader, "version"));
-
- aColumn = new DragAndDropColumn<File,String>(new TextCell()) {
+ Column<File,String> aColumn = new Column<File,String>(new TextCell()) {
@Override
public String getValue(File object) {
// TODO Auto-generated method stub
return object.getSizeAsString();
}
};
- aheader = new SortableHeader("Size");
+ SortableHeader aheader = new SortableHeader("Size");
celltable.addColumn(aColumn, aheader);
- initDragOperation(aColumn);
allHeaders.add(aheader);
aheader.setUpdater(new FileValueUpdater(aheader, "size"));
- aColumn = new DragAndDropColumn<File,String>(new TextCell()) {
+ aColumn = new Column<File,String>(new TextCell()) {
@Override
public String getValue(File object) {
- return formatter.format(object.getLastModified());
+ return object.getLastModified() != null ? formatter.format(object.getLastModified()) : "";
}
};
aheader = new SortableHeader("Last Modified");
provider.addDataDisplay(celltable);
- celltable.addDragStopHandler(new DragStopEventHandler() {
-
- @Override
- public void onDragStop(DragStopEvent event) {
- GWT.log("DRAG STOPPED");
- }
- });
- celltable.addDragStartHandler(new DragStartEventHandler() {
-
- public void onDragStart(DragStartEvent event) {
- FileResource value = event.getDraggableData();
-
- com.google.gwt.dom.client.Element helper = event.getHelper();
- SafeHtmlBuilder sb = new SafeHtmlBuilder();
- sb.appendHtmlConstant("<b>");
- DisplayHelper.log(value.getName());
- if(getSelectedFiles().size()==1)
- sb.appendEscaped(value.getName());
- else
- sb.appendEscaped(getSelectedFiles().size()+" files");
- sb.appendHtmlConstant("</b>");
- helper.setInnerHTML(sb.toSafeHtml().asString());
- }
- });
-
VerticalPanel vp = new VerticalPanel();
vp.setWidth("100%");
-
- pagerTop = new GssSimplePager(GssSimplePager.TextLocation.CENTER);
- pagerTop.setVisible(false);
- pagerTop.setDisplay(celltable);
- uploadButtonTop = new Button("<span id='topMenu.file.upload'>" + AbstractImagePrototype.create(images.fileUpdate()).getHTML() + " Upload</span>");
- uploadButtonTop.addClickHandler(new ClickHandler() {
-
- @Override
- public void onClick(ClickEvent event) {
- new UploadFileCommand(app, null, treeView.getSelection()).execute();
- }
- });
- HorizontalPanel topPanel = new HorizontalPanel();
- topPanel.add(pagerTop);
- topPanel.add(uploadButtonTop);
- vp.add(topPanel);
+ vp.addStyleName("pithos-FileListContainer");
vp.add(celltable);
- pagerBottom = new GssSimplePager(GssSimplePager.TextLocation.CENTER);
- pagerBottom.setVisible(false);
- pagerBottom.setDisplay(celltable);
- uploadButtonBottom=new Button("<span id='topMenu.file.upload'>" + AbstractImagePrototype.create(images.fileUpdate()).getHTML() + " Upload</span>");
- uploadButtonBottom.addClickHandler(new ClickHandler() {
-
- @Override
- public void onClick(ClickEvent event) {
- new UploadFileCommand(app, null, treeView.getSelection()).execute();
- }
- });
- HorizontalPanel bottomPanel = new HorizontalPanel();
- bottomPanel.add(pagerBottom);
- bottomPanel.add(uploadButtonBottom);
-
- vp.add(bottomPanel);
vp.setCellWidth(celltable, "100%");
vp.addHandler(new ContextMenuHandler() {
@Override
public void onContextMenu(ContextMenuEvent event) {
- Folder selectedFolder = treeView.getSelection();
- if (!selectedFolder.isTrash()) {
- FileContextMenu contextMenu = new FileContextMenu(app, images, selectedFolder, getSelectedFiles(), false);
- int x = event.getNativeEvent().getClientX();
- int y = event.getNativeEvent().getClientY();
- contextMenu.setPopupPosition(x, y);
- contextMenu.show();
- }
+ TreeView tree = app.getSelectedTree();
+ if (tree != null && (tree.equals(app.getFolderTreeView()) || tree.equals(app.getOtherSharedTreeView()))) {
+ Folder selectedFolder = app.getSelection();
+ FileContextMenu contextMenu = new FileContextMenu(app, images, tree, selectedFolder, getSelectedFiles());
+ int x = event.getNativeEvent().getClientX();
+ int y = event.getNativeEvent().getClientY();
+ contextMenu.setPopupPosition(x, y);
+ contextMenu.show();
+ }
}
}, ContextMenuEvent.getType());
initWidget(vp);
selectionModel = new MultiSelectionModel<File>(keyProvider);
- Handler selectionHandler = new SelectionChangeEvent.Handler() {
- @Override
- public void onSelectionChange(SelectionChangeEvent event) {
- if(getSelectedFiles().size() == 1)
- app.setCurrentSelection(getSelectedFiles().get(0));
- else
- app.setCurrentSelection(getSelectedFiles());
- }
- };
- selectionModel.addSelectionChangeHandler(selectionHandler);
-
- celltable.setSelectionModel(selectionModel, GSSSelectionEventManager.<File> createDefaultManager());
- celltable.setPageSize(Pithos.VISIBLE_FILE_COUNT);
+ 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);
+ sinkEvents(Event.ONDBLCLICK);
Pithos.preventIESelection();
}
return new ArrayList<File>(selectionModel.getSelectedSet());
}
- private void initDragOperation(DragAndDropColumn<?, ?> column) {
- // retrieve draggableOptions on the column
- DraggableOptions draggableOptions = column.getDraggableOptions();
- // use template to construct the helper. The content of the div will be set
- // after
- draggableOptions.setHelper($(Templates.INSTANCE.outerHelper().asString()));
- //draggableOptions.setZIndex(100);
- // opacity of the helper
- draggableOptions.setAppendTo("body");
- //draggableOptions.setOpacity((float) 0.8);
- draggableOptions.setContainment("document");
- // cursor to use during the drag operation
- draggableOptions.setCursor(Cursor.MOVE);
- // set the revert option
- draggableOptions.setRevert(RevertOption.ON_INVALID_DROP);
- // prevents dragging when user click on the category drop-down list
- draggableOptions.setCancel("select");
- draggableOptions.setOnBeforeDragStart(new DragFunction() {
- @Override
- public void f(DragContext context) {
- File value = context.getDraggableData();
- if (!selectionModel.isSelected(value)) {
- throw new StopDragException();
- }
- }
- });
- }
-
-// @Override
-// public void onBrowserEvent(Event event) {
-//
+ @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 = contextMenu.onEmptyEvent(event);
// event.cancelBubble(true);
// event.preventDefault();
-// } else if (DOM.eventGetType(event) == Event.ONDBLCLICK)
-// if (getSelectedFiles().size() == 1) {
-// Pithos app = app;
-// File file = getSelectedFiles().get(0);
-// Window.open(file.getUri(), "_blank", "");
-// event.preventDefault();
-// return;
-// }
-// super.onBrowserEvent(event);
-// }
+// } else
+ if (DOM.eventGetType(event) == Event.ONDBLCLICK)
+ if (getSelectedFiles().size() == 1) {
+ File file = getSelectedFiles().get(0);
+ Window.open(app.getApiPath() + file.getOwner() + file.getUri() + "?X-Auth-Token=" + app.getToken(), "_blank", "");
+ event.preventDefault();
+ return;
+ }
+ super.onBrowserEvent(event);
+ }
/**
* Update the display of the file list.
*/
- void update(boolean sort) {
- int count = folderFileCount;
- int max = startIndex + Pithos.VISIBLE_FILE_COUNT;
- if (max > count)
- max = count;
- folderTotalSize = 0;
-
- for(File f : files){
- folderTotalSize += f.getBytes();
- }
- if (folderFileCount == 0) {
- showingStats = "no files";
- } else if (folderFileCount < Pithos.VISIBLE_FILE_COUNT) {
- if (folderFileCount == 1)
- showingStats = "1 file";
- else
- showingStats = folderFileCount + " files";
- showingStats += " (" + FileResource.getFileSizeAsString(folderTotalSize) + ")";
- } else {
- showingStats = "" + (startIndex + 1) + " - " + max + " of " + count + " files" + " (" + FileResource.getFileSizeAsString(folderTotalSize) + ")";
- }
+ void update(@SuppressWarnings("unused") boolean sort) {
showCellTable();
- updateCurrentlyShowingStats();
-
}
/**
* @param file
* @return the icon
*/
- private ImageResource getFileIcon(File file) {
+ protected ImageResource getFileIcon(File file) {
String mimetype = file.getContentType();
boolean shared = file.isShared();
if (mimetype == null)
}
/**
- * Update status panel with currently showing file stats.
- */
- public void updateCurrentlyShowingStats() {
- app.getStatusPanel().updateCurrentlyShowing(showingStats);
- }
-
- /**
* Fill the file cache with data.
*/
public void setFiles(final List<File> _files) {
files = new ArrayList<File>();
for (File fres : _files)
- if (!fres.isInTrash())
- files.add(fres);
+ files.add(fres);
Collections.sort(files, new Comparator<File>() {
@Override
}
}
- if(files.size() > Pithos.VISIBLE_FILE_COUNT){
- pagerBottom.setVisible(true);
- pagerTop.setVisible(true);
- }
- else{
- pagerTop.setVisible(false);
- pagerBottom.setVisible(false);
- }
- Folder selectedItem = treeView.getSelection();
-
provider.setList(files);
selectionModel.clear();
+ app.showFolderStatistics(folderFileCount);
+ celltable.setPageSize(folderFileCount);
}
/**
}
}
- private void sortFiles(final String sortingProperty, final boolean sortingType){
+ protected void sortFiles(final String sortingProperty, final boolean sortingType){
Collections.sort(files, new Comparator<File>() {
@Override
public int compare(File arg0, File arg1) {
- AbstractImagePrototype descPrototype = AbstractImagePrototype.create(images.desc());
- AbstractImagePrototype ascPrototype = AbstractImagePrototype.create(images.asc());
if (sortingType){
if (sortingProperty.equals("version")) {
return arg0.getVersion() - arg1.getVersion();
} else if (sortingProperty.equals("owner")) {
return arg0.getOwner().compareTo(arg1.getOwner());
} else if (sortingProperty.equals("date")) {
- return arg0.getLastModified().compareTo(arg1.getLastModified());
+ if (arg0.getLastModified() != null && arg1.getLastModified() != null)
+ return arg0.getLastModified().compareTo(arg1.getLastModified());
+ return 0;
} else if (sortingProperty.equals("size")) {
return (int) (arg0.getBytes() - arg1.getBytes());
} else if (sortingProperty.equals("name")) {
this.header=header;
}
@Override
- public void update(String value) {
+ public void update(@SuppressWarnings("unused") String value) {
header.setSorted(true);
header.toggleReverseSort();
* Shows the files in the cellTable
*/
private void showCellTable(){
- if(files.size()> Pithos.VISIBLE_FILE_COUNT){
- pagerBottom.setVisible(true);
- pagerTop.setVisible(true);
- }
- else{
- pagerTop.setVisible(false);
- pagerBottom.setVisible(false);
- }
provider.setList(files);
provider.refresh();
//celltable.redraw();
celltable.redrawHeaders();
}
-
- public void showTrash() {
- uploadButtonBottom.setVisible(false);
- uploadButtonTop.setVisible(false);
- }
-
- public void showFiles() {
- uploadButtonBottom.setVisible(true);
- uploadButtonTop.setVisible(true);
- }
}