import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.cell.client.ImageResourceCell;
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;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
@Override
@Source({CellTable.Style.DEFAULT_CSS, "PithosCellTable.css"})
TableStyle cellTableStyle();
+
+ @Source("share.png")
+ @ImageOptions(repeatStyle = RepeatStyle.None)
+ ImageResource cellTableSharedIcon();
}
static interface Templates extends SafeHtmlTemplates {
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;
*
* @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);
@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(" ")
- .append(Templates.INSTANCE.viewLink(app.getApiPath() + object.getOwner() + object.getUri() + "?X-Auth-Token=" + app.getToken(), object.getName()));
+ .append(Templates.INSTANCE.viewLink(app.getApiPath() + object.getOwner() + object.getUri(), object.getName()));
}
return sb.toSafeHtml();
}
};
- celltable.addColumn(nameColumn, nameHeader = new SortableHeader("Name"));
+ celltable.addColumn(nameColumn, nameHeader = new SortableHeader("Name", "name"));
allHeaders.add(nameHeader);
- nameHeader.setUpdater(new FileValueUpdater(nameHeader, "name"));
+ nameHeader.setUpdater(new FileValueUpdater(nameHeader));
+ nameHeader.setSorted(true);
+ nameHeader.setReverseSort(true);
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) {
- // TODO Auto-generated method stub
return object.getSizeAsString();
}
};
- SortableHeader aheader = new SortableHeader("Size");
+ SortableHeader aheader = new SortableHeader("Size", "size");
celltable.addColumn(aColumn, aheader);
allHeaders.add(aheader);
- aheader.setUpdater(new FileValueUpdater(aheader, "size"));
+ aheader.setUpdater(new FileValueUpdater(aheader));
aColumn = new Column<File,String>(new TextCell()) {
@Override
return object.getLastModified() != null ? formatter.format(object.getLastModified()) : "";
}
};
- aheader = new SortableHeader("Last Modified");
+ aheader = new SortableHeader("Last Modified", "date");
celltable.addColumn(aColumn, aheader);
allHeaders.add(aheader);
- aheader.setUpdater(new FileValueUpdater(aheader, "date"));
+ aheader.setUpdater(new FileValueUpdater(aheader));
provider.addDataDisplay(celltable);
@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();
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=" + URL.encodeQueryString(app.getToken()), "_blank", "");
+ Window.open(app.getApiPath() + file.getOwner() + file.getUri(), "_blank", "");
event.preventDefault();
return;
}
* 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)
+ for (File fres : _files) {
files.add(fres);
- Collections.sort(files, new Comparator<File>() {
-
- @Override
- public int compare(File arg0, File arg1) {
- return arg0.getName().compareTo(arg1.getName());
- }
-
- });
+ }
+
folderFileCount = files.size();
- nameHeader.setSorted(true);
- nameHeader.toggleReverseSort();
- for (SortableHeader otherHeader : allHeaders) {
- if (otherHeader != nameHeader) {
- otherHeader.setSorted(false);
- otherHeader.setReverseSort(true);
- }
- }
+ for (SortableHeader header : allHeaders) {
+ if (header.isSorted())
+ sortFiles(header.getProperty(), header.getReverseSort());
+ }
+
+ List<File> previousSelection = getSelectedFiles(); //Keep the previous selection
- provider.getList().clear();
+ provider.getList().clear();
provider.setList(files);
selectionModel.clear();
+ for (File f : files) {
+ if (previousSelection.contains(f))
+ selectionModel.setSelected(f, true);
+ }
+
app.showFolderStatistics(folderFileCount);
celltable.setPageSize(folderFileCount);
}
}
final class FileValueUpdater implements ValueUpdater<String>{
- private String property;
private SortableHeader header;
/**
*
*/
- public FileValueUpdater(SortableHeader header,String property) {
- this.property=property;
+ public FileValueUpdater(SortableHeader header) {
this.header=header;
}
@Override
}
}
celltable.redrawHeaders();
- sortFiles(property, header.getReverseSort());
+ sortFiles(header.getProperty(), header.getReverseSort());
FileList.this.update();
}
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(app.getApiPath() + f.getOwner() + f.getUri())) {
+ selectionModel.setSelected(f, true);
+ if (!scrolled) {
+ celltable.getRowElement(i).getCells().getItem(0).scrollIntoView();
+ scrolled = true;
+ }
+ }
+ i++;
+ }
+ }
}