X-Git-Url: https://code.grnet.gr/git/pithos/blobdiff_plain/023f6f1e5465d565189031ead1aaef7351476f73..0981d7af10577ef2adec8e0051d228e94878e862:/src/gr/ebs/gss/client/FileList.java diff --git a/src/gr/ebs/gss/client/FileList.java b/src/gr/ebs/gss/client/FileList.java index 0b48261..6809b42 100644 --- a/src/gr/ebs/gss/client/FileList.java +++ b/src/gr/ebs/gss/client/FileList.java @@ -34,39 +34,57 @@ import gr.ebs.gss.client.rest.resource.UserResource; 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.ImageResourceCell; +import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.RepeatingCommand; +import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; 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.user.cellview.client.CellTable; +import com.google.gwt.user.cellview.client.Column; +import com.google.gwt.user.cellview.client.TextColumn; +import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.IncrementalCommand; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HTMLTable.Cell; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.TreeItem; import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.view.client.DefaultSelectionEventManager; +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. */ -public class FileList extends Composite implements ClickHandler { +public class FileList extends Composite { - private HTML prevButton = new HTML("< Previous", true); - - private HTML nextButton = new HTML("Next >", true); + interface TableResources extends CellTable.Resources { + @Source({CellTable.Style.DEFAULT_CSS, "GssCellTable.css"}) + TableStyle cellTableStyle(); + } + + /** + * The styles applied to the table. + */ + interface TableStyle extends CellTable.Style { + } private String showingStats = ""; @@ -77,18 +95,12 @@ public class FileList extends Composite implements ClickHandler { */ public static final boolean DONE = false; - private boolean clickControl = false; - - private boolean clickShift = false; - - private int firstShift = -1; - - private ArrayList selectedRows = new ArrayList(); - /** * The context menu for the selected file. */ final DnDSimpleFocusPanel contextMenu; + + private final DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a"); /** * Specifies that the images available for this composite will be the ones @@ -178,7 +190,7 @@ public class FileList extends Composite implements ClickHandler { /** * The table widget with the file list. */ - private FileTable table = new FileTable(GSS.VISIBLE_FILE_COUNT + 1, 8); + //private FileTable table = new FileTable(GSS.VISIBLE_FILE_COUNT + 1, 8); /** * The navigation bar for paginating the results. @@ -205,22 +217,12 @@ public class FileList extends Composite implements ClickHandler { */ private final Images images; - private String sortingProperty = "name"; - - private boolean sortingType = true; - - private HTML nameLabel; - - private HTML versionLabel; - - private HTML sizeLabel; - - private HTML dateLabel; - - private HTML ownerLabel; - - private HTML pathLabel; - + + private FileContextMenu menuShowing; + private CellTable celltable; + private final MultiSelectionModel selectionModel; + private final List allHeaders = new ArrayList(); + SortableHeader nameHeader; /** * Construct the file list widget. This entails setting up the widget * layout, fetching the number of files in the current folder from the @@ -231,42 +233,132 @@ public class FileList extends Composite implements ClickHandler { */ public FileList(Images _images) { images = _images; - - prevButton.addClickHandler(this); - nextButton.addClickHandler(this); - + CellTable.Resources resources = GWT.create(TableResources.class); + contextMenu = new DnDSimpleFocusPanel(new HTML(AbstractImagePrototype.create(images.fileContextMenu()).getHTML())); GSS.get().getDragController().makeDraggable(contextMenu); // Setup the table. - table.setCellSpacing(0); - table.setCellPadding(2); - table.setWidth("100%"); - table.addClickHandler(new ClickHandler() { + - @Override - public void onClick(ClickEvent event) { - Cell cell = table.getCellForEvent(event); - GWT.log("row clicked:"+cell.getRowIndex(), null); - onRowClicked(cell.getRowIndex(), true); - } - }); // Create the 'navigation' bar at the upper-right. HorizontalPanel innerNavBar = new HorizontalPanel(); innerNavBar.setStyleName("gss-ListNavBar"); innerNavBar.setSpacing(8); - innerNavBar.add(prevButton); innerNavBar.add(countLabel); - innerNavBar.add(nextButton); navBar.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); navBar.add(innerNavBar); navBar.setWidth("100%"); + ProvidesKey keyProvider = new ProvidesKey(){ - initWidget(table); - setStyleName("gss-List"); + @Override + public Object getKey(FileResource item) { + return item.getUri(); + } + + }; + final TextColumn nameColumn = new TextColumn() { - initTable(); - DeferredCommand.addCommand(new IncrementalCommand() { + @Override + public String getValue(FileResource object) { + // TODO Auto-generated method stub + return object.getName(); + } + + + }; + celltable = new CellTable(100,resources,keyProvider){ + @Override + protected void onBrowserEvent2(Event event) { + /*if (DOM.eventGetType((Event) event) == Event.ONMOUSEDOWN && DOM.eventGetButton((Event) event) == NativeEvent.BUTTON_RIGHT){ + fireClickEvent((Element) event.getEventTarget().cast()); + }*/ + super.onBrowserEvent2(event); + } + }; + + + Column status = new Column(new ImageResourceCell()) { + @Override + public ImageResource getValue(FileResource entity) { + return getFileIcon(entity); + } + }; + celltable.addColumn(status,""); + + + celltable.addColumn(nameColumn,nameHeader = new SortableHeader("Name")); + allHeaders.add(nameHeader); + nameHeader.setSorted(true); + nameHeader.toggleReverseSort(); + nameHeader.setUpdater(new FileValueUpdater(nameHeader, "name")); + celltable.redrawHeaders(); + SortableHeader aheader; + celltable.addColumn(new TextColumn() { + @Override + public String getValue(FileResource object) { + // TODO Auto-generated method stub + return object.getOwner(); + } + },aheader = new SortableHeader("Owner")); + allHeaders.add(aheader); + aheader.setUpdater(new FileValueUpdater(aheader, "owner")); + celltable.addColumn(new TextColumn() { + @Override + public String getValue(FileResource object) { + // TODO Auto-generated method stub + return object.getPath(); + } + },aheader = new SortableHeader("Path")); + allHeaders.add(aheader); + aheader.setUpdater(new FileValueUpdater(aheader, "path")); + celltable.addColumn(new TextColumn() { + @Override + public String getValue(FileResource object) { + // TODO Auto-generated method stub + return object.getVersion().toString(); + } + },aheader = new SortableHeader("Version")); + allHeaders.add(aheader); + aheader.setUpdater(new FileValueUpdater(aheader, "version")); + celltable.addColumn(new TextColumn() { + @Override + public String getValue(FileResource object) { + // TODO Auto-generated method stub + return object.getFileSizeAsString(); + } + },aheader = new SortableHeader("Size")); + allHeaders.add(aheader); + aheader.setUpdater(new FileValueUpdater(aheader, "size")); + celltable.addColumn(new TextColumn() { + @Override + public String getValue(FileResource object) { + return formatter.format(object.getModificationDate()); + } + },aheader = new SortableHeader("Last Modified")); + allHeaders.add(aheader); + aheader.setUpdater(new FileValueUpdater(aheader, "date")); + initWidget(celltable); + setStyleName("gss-List"); + selectionModel = new MultiSelectionModel(); + + + Handler selectionHandler = new SelectionChangeEvent.Handler() { + @Override + public void onSelectionChange(com.google.gwt.view.client.SelectionChangeEvent event) { + if(getSelectedFiles().size()==1) + GSS.get().setCurrentSelection(getSelectedFiles().get(0)); + else + GSS.get().setCurrentSelection(getSelectedFiles()); + contextMenu.setFiles(getSelectedFiles()); + } + }; + selectionModel.addSelectionChangeHandler(selectionHandler); + + celltable.setSelectionModel(selectionModel,GSSSelectionEventManager.createDefaultManager()); + celltable.setPageSize(GSS.VISIBLE_FILE_COUNT); + celltable.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); + Scheduler.get().scheduleIncremental(new RepeatingCommand() { @Override public boolean execute() { @@ -281,65 +373,36 @@ public class FileList extends Composite implements ClickHandler { sinkEvents(Event.ONDBLCLICK); GSS.preventIESelection(); } - - @Override - public void onClick(ClickEvent event) { - if(event.getSource() == nextButton){ - // Move forward a page. - clearSelectedRows(); - startIndex += GSS.VISIBLE_FILE_COUNT; - if (startIndex >= folderFileCount) - startIndex -= GSS.VISIBLE_FILE_COUNT; - else - update(false); - } else if (event.getSource() == prevButton) { - clearSelectedRows(); - // Move back a page. - startIndex -= GSS.VISIBLE_FILE_COUNT; - if (startIndex < 0) - startIndex = 0; - else - update(false); - } - } - + + //public native void fireClickEvent(Element element) /*-{ + // var evObj = $doc.createEvent('MouseEvents'); + //evObj.initEvent('click', true, true); + //element.dispatchEvent(evObj); + //}-*/; + + public List getSelectedFiles() { + return new ArrayList(selectionModel.getSelectedSet()); + } + + @Override public void onBrowserEvent(Event event) { - if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT){ - if (DOM.eventGetCtrlKey(event)) - clickControl = true; - else - clickControl = false; - if (DOM.eventGetShiftKey(event)) { - clickShift = true; - if (selectedRows.size() == 1) - firstShift = selectedRows.get(0) - startIndex; - //event.preventDefault(); - } else { - clickShift = false; - firstShift = -1; - //event.preventDefault(); - } - int ri = table.getRowForEvent2(event); - if(ri != -1) - 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); + if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && getSelectedFiles().size() == 0) { + 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); - } else if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && selectedRows.size() == 0) { - FileContextMenu fm = new FileContextMenu(images, false, true); - fm.onEmptyEvent(event); + if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && getSelectedFiles().size() != 0) { + 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 && getSelectedFiles().size() == 0) { + 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(); @@ -353,22 +416,6 @@ public class FileList extends Composite implements ClickHandler { event.preventDefault(); return; } - if (DOM.eventGetType(event) == Event.ONCLICK) { - if (DOM.eventGetCtrlKey(event)) - clickControl = true; - else - clickControl = false; - if (DOM.eventGetShiftKey(event)) { - clickShift = true; - if (selectedRows.size() == 1) - firstShift = selectedRows.get(0) - startIndex; - //event.preventDefault(); - } else { - clickShift = false; - firstShift = -1; - //event.preventDefault(); - } - } super.onBrowserEvent(event); } @@ -386,184 +433,9 @@ public class FileList extends Composite implements ClickHandler { return DONE; } - private void onRowClicked(int row, boolean toggleSelection) { - // Select the row that was clicked (-1 to account for header row). - if (row > folderFileCount) - return; - if (clickShift) { - GWT.log("Row is: " + row + " fs: " + firstShift, null); - if (firstShift == -1) - firstShift = row; - else if (row > firstShift) { - clearSelectedRows(); - for (int i = firstShift; i < row; i++) { - selectedRows.add(startIndex + i); - styleRow(i, true); - } - GSS.get().setCurrentSelection(getSelectedFiles()); - contextMenu.setFiles(getSelectedFiles()); - makeRowDraggable(row); - } else if (row != -1 && row == firstShift) { - selectedRows.add(row - 1); - styleRow(row, true); - styleRow(row - 1, true); - GSS.get().setCurrentSelection(getSelectedFiles()); - contextMenu.setFiles(getSelectedFiles()); - makeRowDraggable(row); - } else if (row < firstShift) { - GWT.log("Row is:" + row + " fs:" + firstShift, null); - clearSelectedRows(); - - for (int i = firstShift; i >= row - 1; i--) { - selectedRows.add(startIndex + i); - styleRow(i, true); - } - GSS.get().setCurrentSelection(getSelectedFiles()); - makeRowDraggable(row); - contextMenu.setFiles(getSelectedFiles()); - } - } else if (row > 0) - selectRow(row - 1, toggleSelection); - } - - /** - * Initializes the table so that it contains enough rows for a full page of - * files. - */ - private void initTable() { - nameLabel = new HTML("Name"); - nameLabel.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - sortFiles("name"); - - } - - }); - versionLabel = new HTML("Version"); - versionLabel.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - sortFiles("version"); - } - - }); - sizeLabel = new HTML("Size"); - sizeLabel.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - sortFiles("size"); - } - - }); - dateLabel = new HTML("Last modified"); - dateLabel.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - sortFiles("date"); - } - - }); - ownerLabel = new HTML("Owner"); - ownerLabel.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - sortFiles("owner"); - } - - }); - pathLabel = new HTML("Path"); - pathLabel.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - sortFiles("path"); - } - - }); - // Create the header row. - table.setText(0, 0, ""); - table.setWidget(0, 1, nameLabel); - table.setWidget(0, 2, ownerLabel); - table.setWidget(0, 3, pathLabel); - table.setWidget(0, 4, versionLabel); - table.setWidget(0, 5, sizeLabel); - table.setWidget(0, 6, dateLabel); - table.setWidget(0, 7, navBar); - table.getRowFormatter().setStyleName(0, "gss-ListHeader"); - - // Initialize the rest of the rows. - for (int i = 1; i < GSS.VISIBLE_FILE_COUNT + 1; ++i) { - table.setText(i, 0, ""); - table.setText(i, 1, ""); - table.setText(i, 2, ""); - table.setText(i, 3, ""); - table.setText(i, 4, ""); - table.setText(i, 5, ""); - table.setText(i, 6, ""); - table.setText(i, 7, ""); - table.getCellFormatter().setWordWrap(i, 0, false); - table.getCellFormatter().setWordWrap(i, 1, false); - table.getCellFormatter().setWordWrap(i, 2, false); - table.getCellFormatter().setWordWrap(i, 3, false); - table.getCellFormatter().setWordWrap(i, 4, false); - table.getCellFormatter().setWordWrap(i, 5, false); - table.getCellFormatter().setWordWrap(i, 6, false); - table.getCellFormatter().setWordWrap(i, 7, false); - table.getCellFormatter().setHorizontalAlignment(i, 4, HasHorizontalAlignment.ALIGN_CENTER); - } - prevButton.setVisible(false); - nextButton.setVisible(false); - } - - /** - * Selects the given row (relative to the current page). - * - * @param row the row to be selected - */ - private void selectRow(final int row, boolean toggleSelection) { - if (row < folderFileCount) { - if (clickControl) - if (selectedRows.contains(row) && toggleSelection) { - int i = selectedRows.indexOf(startIndex + row); - selectedRows.remove(i); - styleRow(row, false); - } else { - selectedRows.add(startIndex + row); - styleRow(row, true); - } - else if (selectedRows.size() == 1 && selectedRows.contains(row) && toggleSelection){ - clearSelectedRows(); - return; - } - else { - clearSelectedRows(); - selectedRows.add(startIndex + row); - styleRow(row, true); - } - if (selectedRows.size() == 1) - GSS.get().setCurrentSelection(files.get(selectedRows.get(0))); - else if(selectedRows.size() == 0) - GSS.get().setCurrentSelection(null); - else - GSS.get().setCurrentSelection(getSelectedFiles()); - contextMenu.setFiles(getSelectedFiles()); - makeRowDraggable(row+1); - } - } - - public List getSelectedFiles() { - List result = new ArrayList(); - for (int i : selectedRows) - result.add(files.get(i)); - return result; - } + + /** * Make the specified row look like selected or not, according to the * selected flag. @@ -572,11 +444,7 @@ public class FileList extends Composite implements ClickHandler { * @param selected */ void styleRow(final int row, final boolean selected) { - if (row != -1 && row >= 0) - if (selected) - table.getRowFormatter().addStyleName(row + 1, "gss-SelectedRow"); - else - table.getRowFormatter().removeStyleName(row + 1, "gss-SelectedRow"); + } /** @@ -588,129 +456,20 @@ public class FileList extends Composite implements ClickHandler { if (max > count) max = count; folderTotalSize = 0; - - if (sort && files != null && files.size() != 0) { - clearLabels(); - clearSelectedRows(); - - Collections.sort(files, new Comparator() { - - @Override - public int compare(FileResource arg0, FileResource arg1) { - AbstractImagePrototype descPrototype = AbstractImagePrototype.create(images.desc()); - AbstractImagePrototype ascPrototype = AbstractImagePrototype.create(images.asc()); - if (sortingType) - if (sortingProperty.equals("version")) { - versionLabel.setHTML("Version " + descPrototype.getHTML()); - return arg0.getVersion().compareTo(arg1.getVersion()); - } else if (sortingProperty.equals("owner")) { - ownerLabel.setHTML("Owner " + descPrototype.getHTML()); - return arg0.getOwner().compareTo(arg1.getOwner()); - } else if (sortingProperty.equals("date")) { - dateLabel.setHTML("Date modified " + descPrototype.getHTML()); - return arg0.getModificationDate().compareTo(arg1.getModificationDate()); - } else if (sortingProperty.equals("size")) { - sizeLabel.setHTML("Size " + descPrototype.getHTML()); - return arg0.getContentLength().compareTo(arg1.getContentLength()); - } else if (sortingProperty.equals("name")) { - nameLabel.setHTML("Name " + descPrototype.getHTML()); - return arg0.getName().compareTo(arg1.getName()); - } else if (sortingProperty.equals("path")) { - pathLabel.setHTML("Path " + descPrototype.getHTML()); - return arg0.getUri().compareTo(arg1.getUri()); - } else { - nameLabel.setHTML("Name " + descPrototype.getHTML()); - return arg0.getName().compareTo(arg1.getName()); - } - else if (sortingProperty.equals("version")) { - versionLabel.setHTML("Version " + ascPrototype.getHTML()); - return arg1.getVersion().compareTo(arg0.getVersion()); - } else if (sortingProperty.equals("owner")) { - ownerLabel.setHTML("Owner " + ascPrototype.getHTML()); - return arg1.getOwner().compareTo(arg0.getOwner()); - } else if (sortingProperty.equals("date")) { - dateLabel.setHTML("Date modified " + ascPrototype.getHTML()); - return arg1.getModificationDate().compareTo(arg0.getModificationDate()); - } else if (sortingProperty.equals("size")) { - sizeLabel.setHTML("Size " + ascPrototype.getHTML()); - return arg1.getContentLength().compareTo(arg0.getContentLength()); - } else if (sortingProperty.equals("name")) { - nameLabel.setHTML("Name " + ascPrototype.getHTML()); - return arg1.getName().compareTo(arg0.getName()); - } else if (sortingProperty.equals("path")) { - pathLabel.setHTML("Path " + ascPrototype.getHTML()); - return arg1.getUri().compareTo(arg0.getUri()); - } else { - nameLabel.setHTML("Name " + ascPrototype.getHTML()); - return arg1.getName().compareTo(arg0.getName()); - } - } - - }); - } - - - // Show the selected files. - int i = 1; - for (; i < GSS.VISIBLE_FILE_COUNT + 1; ++i) { - // Don't read past the end. - // if (i > folderFileCount) - // break; - if (startIndex + i > folderFileCount) - break; - // Add a new row to the table, then set each of its columns to the - // proper values. - FileResource file = files.get(startIndex + i - 1); - table.setWidget(i, 0, getFileIcon(file).createImage()); - table.getRowFormatter().addStyleName(i, "gss-fileRow"); - - //add view image link for image files - String contentType = file.getContentType(); - if (contentType.endsWith("png") || contentType.endsWith("gif") || contentType.endsWith("jpeg") ) - table.setHTML(i, 1, file.getName() + " " + - "(view)" + ""); - else - table.setHTML(i, 1, file.getName()); - table.setText(i, 2, file.getOwner()); - table.setText(i, 3, file.getPath()); - table.setText(i, 4, String.valueOf(file.getVersion())); - table.setText(i, 5, String.valueOf(file.getFileSizeAsString())); - final DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a"); - table.setText(i, 6, formatter.format(file.getModificationDate())); - folderTotalSize += file.getContentLength(); - } - - // Clear any remaining slots. - for (; i < GSS.VISIBLE_FILE_COUNT + 1; ++i) { - table.setHTML(i, 0, " "); - table.setHTML(i, 1, " "); - table.setHTML(i, 2, " "); - table.setHTML(i, 3, " "); - table.setHTML(i, 4, " "); - table.setHTML(i, 5, " "); - table.setHTML(i, 6, " "); - table.setHTML(i, 7, " "); - } - + + celltable.setRowCount(files.size()); + celltable.setRowData(0,files); + celltable.redrawHeaders(); if (folderFileCount == 0) { showingStats = "no files"; - prevButton.setVisible(false); - nextButton.setVisible(false); } else if (folderFileCount < GSS.VISIBLE_FILE_COUNT) { if (folderFileCount == 1) showingStats = "1 file"; else showingStats = folderFileCount + " files"; showingStats += " (" + FileResource.getFileSizeAsString(folderTotalSize) + ")"; - prevButton.setVisible(false); - nextButton.setVisible(false); } else { showingStats = "" + (startIndex + 1) + " - " + max + " of " + count + " files" + " (" + FileResource.getFileSizeAsString(folderTotalSize) + ")"; - prevButton.setVisible(startIndex != 0); - nextButton.setVisible(startIndex + GSS.VISIBLE_FILE_COUNT < count); } updateCurrentlyShowingStats(); @@ -722,9 +481,9 @@ public class FileList extends Composite implements ClickHandler { * @param file * @return the icon */ - private AbstractImagePrototype getFileIcon(FileResource file) { + private ImageResource 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()); @@ -741,33 +500,33 @@ public class FileList extends Composite implements ClickHandler { else shared = file.isShared(); if (mimetype == null) - return shared ? AbstractImagePrototype.create(images.documentShared()) : AbstractImagePrototype.create(images.document()); + return shared ? images.documentShared() : images.document(); mimetype = mimetype.toLowerCase(); if (mimetype.startsWith("application/pdf")) - return shared ? AbstractImagePrototype.create(images.pdfShared()) : AbstractImagePrototype.create(images.pdf()); + return shared ? images.pdfShared() : images.pdf(); else if (mimetype.endsWith("excel")) - return shared ? AbstractImagePrototype.create(images.spreadsheetShared()) : AbstractImagePrototype.create(images.spreadsheet()); + return shared ? images.spreadsheetShared() : images.spreadsheet(); else if (mimetype.endsWith("msword")) - return shared ? AbstractImagePrototype.create(images.wordprocessorShared()) : AbstractImagePrototype.create(images.wordprocessor()); + return shared ? images.wordprocessorShared() : images.wordprocessor(); else if (mimetype.endsWith("powerpoint")) - return shared ? AbstractImagePrototype.create(images.presentationShared()) : AbstractImagePrototype.create(images.presentation()); + return shared ? images.presentationShared() : images.presentation(); else if (mimetype.startsWith("application/zip") || mimetype.startsWith("application/gzip") || mimetype.startsWith("application/x-gzip") || mimetype.startsWith("application/x-tar") || mimetype.startsWith("application/x-gtar")) - return shared ? AbstractImagePrototype.create(images.zipShared()) : AbstractImagePrototype.create(images.zip()); + return shared ? images.zipShared() : images.zip(); else if (mimetype.startsWith("text/html")) - return shared ? AbstractImagePrototype.create(images.htmlShared()) : AbstractImagePrototype.create(images.html()); + return shared ? images.htmlShared() : images.html(); else if (mimetype.startsWith("text/plain")) - return shared ? AbstractImagePrototype.create(images.txtShared()) : AbstractImagePrototype.create(images.txt()); + return shared ? images.txtShared() : images.txt(); else if (mimetype.startsWith("image/")) - return shared ? AbstractImagePrototype.create(images.imageShared()) : AbstractImagePrototype.create(images.image()); + return shared ? images.imageShared() : images.image(); else if (mimetype.startsWith("video/")) - return shared ? AbstractImagePrototype.create(images.videoShared()) : AbstractImagePrototype.create(images.video()); + return shared ? images.videoShared() : images.video(); else if (mimetype.startsWith("audio/")) - return shared ? AbstractImagePrototype.create(images.audioShared()) : AbstractImagePrototype.create(images.audio()); - return shared ? AbstractImagePrototype.create(images.documentShared()) : AbstractImagePrototype.create(images.document()); + return shared ? images.audioShared() : images.audio(); + return shared ? images.documentShared() : images.document(); } /** @@ -782,8 +541,8 @@ public class FileList extends Composite implements ClickHandler { * * @param newHeight the new height to reach */ - void resizeTableHeight(final int newHeight) { - GWT.log("Panel: " + newHeight + ", parent: " + table.getParent().getOffsetHeight(), null); + //void resizeTableHeight(final int newHeight) { + /*GWT.log("Panel: " + newHeight + ", parent: " + table.getParent().getOffsetHeight(), null); // Fill the rest with empty slots. if (newHeight > table.getOffsetHeight()) while (newHeight > table.getOffsetHeight()) { @@ -794,77 +553,77 @@ public class FileList extends Composite implements ClickHandler { while (newHeight < table.getOffsetHeight()) { table.resizeRows(table.getRowCount() - 1); GWT.log("Table: " + table.getOffsetHeight() + ", rows: " + table.getRowCount(), null); - } - } + }*/ + //} public void updateFileCache(boolean updateSelectedFolder, final boolean clearSelection) { updateFileCache(updateSelectedFolder, clearSelection, null); } 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 gf = new GetCommand(FolderResource.class, folderItem.getFolderResource().getUri(),folderItem.getFolderResource()) { + update(true); + GetCommand gf = new GetCommand(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 getFiles = new MultipleHeadCommand(FileResource.class, filePaths, folderItem.getFolderResource().getFileCache()){ + + @Override + public void onComplete(){ + List 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 getFiles = new MultipleHeadCommand(FileResource.class, filePaths, folderItem.getFolderResource().getFileCache()){ - - @Override - public void onComplete(){ - List 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) { @@ -894,45 +653,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 getFiles = new MultipleHeadCommand(FileResource.class, filePaths, folderItem.getSharedResource().getFileCache()){ - - @Override - public void onComplete(){ - List 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 @@ -948,45 +678,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 getFiles = new MultipleHeadCommand(FileResource.class, filePaths, folderItem.getOtherUserResource().getFileCache()){ - - @Override - public void onComplete(){ - List 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 @@ -1001,6 +703,7 @@ public class FileList extends Composite implements ClickHandler { updateFileCache(clearSelection); } + private void updateFileCache(boolean clearSelection) { updateFileCache(clearSelection, null); } @@ -1008,14 +711,12 @@ 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 */ private void updateFileCache(boolean clearSelection, String newFilename) { if (clearSelection) clearSelectedRows(); - clearLabels(); startIndex = 0; final TreeItem folderItem = GSS.get().getFolders().getCurrent(); // Validation. @@ -1042,21 +743,6 @@ public class FileList extends Composite implements ClickHandler { setFiles(dnd.getFolderResource().getFiles()); update(true); - if (!clearSelection && selectedRows.size()==1 && newFilename!=null) { - int row = -1; - for (int i=1; i < GSS.VISIBLE_FILE_COUNT + 1; ++i) { - if (startIndex + i > folderFileCount) - break; - FileResource file = files.get(startIndex + i - 1); - if (newFilename.equals(file.getName())) { - row = i-1; - break; - } - } - clearSelectedRows(); - if (row!=-1) - selectRow(row, true); - } } } @@ -1082,34 +768,9 @@ public class FileList extends Composite implements ClickHandler { folderFileCount = files.size(); } - private void sortFiles(final String sortProperty) { - if (sortProperty.equals(sortingProperty)) - sortingType = !sortingType; - else { - sortingProperty = sortProperty; - sortingType = true; - } - update(true); - } - - private void clearLabels() { - nameLabel.setText("Name"); - versionLabel.setText("Version"); - sizeLabel.setText("Size"); - dateLabel.setText("Last modified"); - ownerLabel.setText("Owner"); - pathLabel.setText("Path"); - } - - /** - * Retrieve the table. - * - * @return the table - */ - Grid getTable() { - return table; - } + + /** * Does the list contains the requested filename * @@ -1124,21 +785,31 @@ public class FileList extends Composite implements ClickHandler { } public void clearSelectedRows() { - for (int r : selectedRows) { + Iterator it = selectionModel.getSelectedSet().iterator(); + while(it.hasNext()){ + selectionModel.setSelected(it.next(),false); + } + + /*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; + }*/ } /** * */ public void selectAllRows() { - clearSelectedRows(); + /*clearSelectedRows(); int count = folderFileCount; if (count == 0) return; @@ -1154,31 +825,123 @@ 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); + contextMenu.setFiles(getSelectedFiles());*/ + } private void makeRowDraggable(int row){ - int contextRow = getWidgetRow(contextMenu, table); + /* int contextRow = getWidgetRow(contextMenu, table); if (contextRow != -1) 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() { + @Override + public int compare(FileResource arg0, FileResource arg1) { + AbstractImagePrototype descPrototype = AbstractImagePrototype.create(images.desc()); + AbstractImagePrototype ascPrototype = AbstractImagePrototype.create(images.asc()); + if (sortingType){ + if (sortingProperty.equals("version")) { + return arg0.getVersion().compareTo(arg1.getVersion()); + } else if (sortingProperty.equals("owner")) { + return arg0.getOwner().compareTo(arg1.getOwner()); + } else if (sortingProperty.equals("date")) { + return arg0.getModificationDate().compareTo(arg1.getModificationDate()); + } else if (sortingProperty.equals("size")) { + return arg0.getContentLength().compareTo(arg1.getContentLength()); + } else if (sortingProperty.equals("name")) { + return arg0.getName().compareTo(arg1.getName()); + } else if (sortingProperty.equals("path")) { + return arg0.getUri().compareTo(arg1.getUri()); + } else { + return arg0.getName().compareTo(arg1.getName()); + } + } + else if (sortingProperty.equals("version")) { + + return arg1.getVersion().compareTo(arg0.getVersion()); + } else if (sortingProperty.equals("owner")) { + + return arg1.getOwner().compareTo(arg0.getOwner()); + } else if (sortingProperty.equals("date")) { + + return arg1.getModificationDate().compareTo(arg0.getModificationDate()); + } else if (sortingProperty.equals("size")) { + + return arg1.getContentLength().compareTo(arg0.getContentLength()); + } else if (sortingProperty.equals("name")) { + + return arg1.getName().compareTo(arg0.getName()); + } else if (sortingProperty.equals("path")) { + + return arg1.getUri().compareTo(arg0.getUri()); + } else { + + return arg1.getName().compareTo(arg0.getName()); + } + } - + }); + } + + final class FileValueUpdater implements ValueUpdater{ + private String property; + private SortableHeader header; + /** + * + */ + public FileValueUpdater(SortableHeader header,String property) { + this.property=property; + this.header=header; + } + @Override + public void update(String value) { + header.setSorted(true); + header.toggleReverseSort(); + + for (SortableHeader otherHeader : allHeaders) { + if (otherHeader != header) { + otherHeader.setSorted(false); + otherHeader.setReverseSort(true); + } + } + celltable.redrawHeaders(); + sortFiles(property, header.getReverseSort()); + FileList.this.update(true); + } + + } }