import gr.ebs.gss.client.rest.GetCommand;
import gr.ebs.gss.client.rest.RestCommand;
import gr.ebs.gss.client.rest.resource.FileResource;
-import gr.ebs.gss.client.rest.resource.FolderResource;
import gr.ebs.gss.client.rest.resource.OtherUserResource;
import gr.ebs.gss.client.rest.resource.OthersFolderResource;
import gr.ebs.gss.client.rest.resource.RestResource;
import gr.ebs.gss.client.rest.resource.UserResource;
import gr.ebs.gss.client.rest.resource.UserSearchResource;
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 com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.ImageResourceCell;
+import com.google.gwt.cell.client.SafeHtmlCell;
import com.google.gwt.cell.client.TextCell;
import com.google.gwt.cell.client.ValueUpdater;
+import com.google.gwt.cell.client.Cell.Context;
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.dom.client.Style.Cursor;
+import com.google.gwt.event.dom.client.KeyCodes;
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.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.cellview.client.SimplePager;
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.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.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
+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;
* A composite that displays the list of files in a particular folder.
*/
public class FileList extends Composite {
-
+ ListDataProvider<FileResource> provider = new ListDataProvider<FileResource>();
interface TableResources extends DragAndDropCellTable.Resources {
@Source({CellTable.Style.DEFAULT_CSS, "GssCellTable.css"})
TableStyle cellTableStyle();
ImageResource zipShared();
}
+
+ DragStopEventHandler dragStop = new DragStopEventHandler() {
+
+ @Override
+ public void onDragStop(DragStopEvent event) {
+ GWT.log("DRAG STOPPED");
+
+ }
+ };
+
private static class ContactCell extends AbstractCell<gr.ebs.gss.client.rest.resource.FileResource> {
/**
sb.appendHtmlConstant("</td>");
// Add the name and address.
- sb.appendHtmlConstant("<td style='font-size:95%;'>");
+ DisplayHelper.log("value.getName()");
+ sb.appendHtmlConstant("<td style='font-size:95%;' id='"+value.getName()+"'>");
sb.appendEscaped(value.getName());
sb.appendHtmlConstant("</td></tr><tr><td>");
sb.appendEscaped(value.getFileSizeAsString());
public DragAndDropCellTable<FileResource> getCelltable() {
return celltable;
}
- /**
- * A label with the number of files in this folder.
- */
- private HTML countLabel = new HTML();
-
- /**
- * The table widget with the file list.
- */
- //private FileTable table = new FileTable(GSS.VISIBLE_FILE_COUNT + 1, 8);
-
- /**
- * The navigation bar for paginating the results.
- */
- private HorizontalPanel navBar = new HorizontalPanel();
-
+
+
/**
* The number of files in this folder.
*/
* The widget's image bundle.
*/
private final Images images;
- VerticalPanel panel;
private FileContextMenu menuShowing;
private DragAndDropCellTable<FileResource> celltable;
private final MultiSelectionModel<FileResource> selectionModel;
private final List<SortableHeader> allHeaders = new ArrayList<SortableHeader>();
SortableHeader nameHeader;
+ SimplePager pager;
+ SimplePager pagerTop;
/**
* Construct the file list widget. This entails setting up the widget
* layout, fetching the number of files in the current folder from the
public FileList(Images _images) {
images = _images;
DragAndDropCellTable.Resources resources = GWT.create(TableResources.class);
-
-
- // Create the 'navigation' bar at the upper-right.
- HorizontalPanel innerNavBar = new HorizontalPanel();
- innerNavBar.setStyleName("gss-ListNavBar");
- innerNavBar.setSpacing(8);
- innerNavBar.add(countLabel);
- navBar.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
- navBar.add(innerNavBar);
- navBar.setWidth("100%");
ProvidesKey<FileResource> keyProvider = new ProvidesKey<FileResource>(){
@Override
}
};
- final DragAndDropColumn<FileResource,String> nameColumn = new DragAndDropColumn<FileResource,String>(new TextCell()) {
-
- @Override
- public String getValue(FileResource object) {
- // TODO Auto-generated method stub
- return object.getName();
- }
-
-
- };
- initDragOperation(nameColumn);
- celltable = new DragAndDropCellTable<FileResource>(100,resources,keyProvider){
+ celltable = new DragAndDropCellTable<FileResource>(GSS.VISIBLE_FILE_COUNT,resources,keyProvider);
+
+ DragAndDropColumn<FileResource, ImageResource> status = new DragAndDropColumn<FileResource, ImageResource>(new ImageResourceCell(){
@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);
- }
- };
- celltable.addDragStartHandler(new DragStartEventHandler() {
-
- public void onDragStart(DragStartEvent event) {
- FileResource value = event.getDraggableData();
- if(!selectionModel.isSelected(value)){
- event.getHelper().removeFromParent();
- return;
- }
-
- com.google.gwt.dom.client.Element helper = event.getHelper();
-
- SafeHtmlBuilder sb = new SafeHtmlBuilder();
- // reuse the contact cell to render the inner html of the drag helper.
- ///new CotactCell(images.blank()).render(new Context(0,0, value), value, sb);
- sb.appendHtmlConstant("<b>");
- sb.appendEscaped(value.getName());
- sb.appendHtmlConstant("</b>");
- helper.setInnerHTML(sb.toSafeHtml().asString());
-
- }
- });
- Column<FileResource, ImageResource> status = new Column<FileResource, ImageResource>(new ImageResourceCell()) {
+ public boolean handlesSelection() {
+ return false;
+ }
+ }) {
@Override
public ImageResource getValue(FileResource entity) {
return getFileIcon(entity);
}
+
};
- celltable.addColumn(status,"");
-
-
+ celltable.addColumn(status,"");
+
+ initDragOperation(status);
+ final DragAndDropColumn<FileResource,SafeHtml> nameColumn = new DragAndDropColumn<FileResource,SafeHtml>(new SafeHtmlCell()) {
+
+
+ @Override
+ public SafeHtml getValue(FileResource object) {
+ SafeHtmlBuilder sb = new SafeHtmlBuilder();
+ if (object.getContentType().endsWith("png") || object.getContentType().endsWith("gif") || object.getContentType().endsWith("jpeg") ){
+ sb.appendHtmlConstant("<span id='fileList."+ object.getName() +"'>");
+ sb.appendEscaped(object.getName());
+ sb.appendHtmlConstant("</span>");
+ sb.appendHtmlConstant(" <a href='" +
+ GSS.get().getTopPanel().getFileMenu().getDownloadURL(object) +
+ "' title='" + object.getOwner() + " : " + object.getPath() + object.getName() +
+ "' rel='lytebox[mnf]' " +
+ "onclick='myLytebox.start(this, false, false); return false;'>" +
+ "(view)" + "</a>");
+
+
+ }
+ else{
+ sb.appendHtmlConstant("<span id='fileList."+ object.getName() +"'>");
+ sb.appendEscaped(object.getName());
+ sb.appendHtmlConstant("</span>");
+ }
+
+ return sb.toSafeHtml();
+ }
+
+ };
+ initDragOperation(nameColumn);
celltable.addColumn(nameColumn,nameHeader = new SortableHeader("Name"));
allHeaders.add(nameHeader);
- nameHeader.setSorted(true);
- nameHeader.toggleReverseSort();
+ //nameHeader.setSorted(true);
+ //nameHeader.toggleReverseSort();
nameHeader.setUpdater(new FileValueUpdater(nameHeader, "name"));
celltable.redrawHeaders();
- SortableHeader aheader;
- celltable.addColumn(new TextColumn<FileResource>() {
+
+
+
+
+ SortableHeader aheader;
+ DragAndDropColumn<FileResource,String> aColumn;
+ celltable.addColumn(aColumn=new DragAndDropColumn<FileResource,String>(new TextCell()) {
@Override
public String getValue(FileResource object) {
return GSS.get().findUserFullName(object.getOwner());
}
},aheader = new SortableHeader("Owner"));
+ initDragOperation(aColumn);
allHeaders.add(aheader);
aheader.setUpdater(new FileValueUpdater(aheader, "owner"));
- celltable.addColumn(new TextColumn<FileResource>() {
+ celltable.addColumn(aColumn=new DragAndDropColumn<FileResource,String>(new TextCell()) {
@Override
public String getValue(FileResource object) {
// TODO Auto-generated method stub
return object.getPath();
}
},aheader = new SortableHeader("Path"));
+ initDragOperation(aColumn);
allHeaders.add(aheader);
+
aheader.setUpdater(new FileValueUpdater(aheader, "path"));
- celltable.addColumn(new TextColumn<FileResource>() {
+ celltable.addColumn(aColumn=new DragAndDropColumn<FileResource,String>(new TextCell()) {
@Override
public String getValue(FileResource object) {
- // TODO Auto-generated method stub
return object.getVersion().toString();
}
},aheader = new SortableHeader("Version"));
+ initDragOperation(aColumn);
allHeaders.add(aheader);
aheader.setUpdater(new FileValueUpdater(aheader, "version"));
- celltable.addColumn(new TextColumn<FileResource>() {
+ celltable.addColumn(aColumn=new DragAndDropColumn<FileResource,String>(new TextCell()) {
@Override
public String getValue(FileResource object) {
// TODO Auto-generated method stub
return object.getFileSizeAsString();
}
},aheader = new SortableHeader("Size"));
+ initDragOperation(aColumn);
allHeaders.add(aheader);
aheader.setUpdater(new FileValueUpdater(aheader, "size"));
- celltable.addColumn(new TextColumn<FileResource>() {
+ celltable.addColumn(aColumn=new DragAndDropColumn<FileResource,String>(new TextCell()) {
@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"));
+
+
+ provider.addDataDisplay(celltable);
+ celltable.addDragStopHandler(dragStop);
+ 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());
+
+ }
+ });
- initWidget(celltable);
- setStyleName("gss-List");
+
+
+
+
+
+ VerticalPanel vp = new VerticalPanel();
+ vp.setWidth("100%");
+ pagerTop = new SimplePager(SimplePager.TextLocation.CENTER);
+ pagerTop.setDisplay(celltable);
+ vp.add(pagerTop);
+ celltable.setWidth("100%");
+ vp.add(celltable);
+ pager = new SimplePager(SimplePager.TextLocation.CENTER);
+ pager.setDisplay(celltable);
+
+ vp.add(pager);
+ vp.setCellWidth(celltable, "100%");
+
+ initWidget(vp);
+ pager.setVisible(false);
+ pagerTop.setVisible(false);
+
+ celltable.setStyleName("gss-List");
selectionModel = new MultiSelectionModel<FileResource>();
GSS.get().setCurrentSelection(getSelectedFiles().get(0));
else
GSS.get().setCurrentSelection(getSelectedFiles());
- //contextMenu.setFiles(getSelectedFiles());
}
};
selectionModel.addSelectionChangeHandler(selectionHandler);
//evObj.initEvent('click', true, true);
//element.dispatchEvent(evObj);
//}-*/;
-
+
+
+
public List<FileResource> getSelectedFiles() {
return new ArrayList<FileResource>(selectionModel.getSelectedSet());
}
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) {
+ FileResource value = context.getDraggableData();
+ if(!selectionModel.isSelected(value)){
+ throw new StopDragException();
+ }
+
+ }
+ });
}
-
+ public void showContextMenu(Event event){
+ menuShowing = new FileContextMenu(images, false, true);
+ menuShowing=menuShowing.onEmptyEvent(event);
+ }
@Override
public void onBrowserEvent(Event event) {
if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && getSelectedFiles().size() == 0) {
menuShowing = new FileContextMenu(images, false, true);
menuShowing=menuShowing.onEmptyEvent(event);
+ event.preventDefault();
+ event.cancelBubble(true);
}
return;
}
GWT.log("*****GOING TO SHOW CONTEXT MENU ****", null);
menuShowing = new FileContextMenu(images, false, false);
menuShowing=menuShowing.onEvent(event);
+ event.cancelBubble(true);
+ event.preventDefault();
} else if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && getSelectedFiles().size() == 0) {
menuShowing = new FileContextMenu(images, false, true);
menuShowing=menuShowing.onEmptyEvent(event);
+ event.cancelBubble(true);
+ event.preventDefault();
} else if (DOM.eventGetType(event) == Event.ONDBLCLICK)
if (getSelectedFiles().size() == 1) {
GSS app = GSS.get();
} else {
showingStats = "" + (startIndex + 1) + " - " + max + " of " + count + " files" + " (" + FileResource.getFileSizeAsString(folderTotalSize) + ")";
}
+ showCellTable();
updateCurrentlyShowingStats();
}
private ImageResource getFileIcon(FileResource file) {
String mimetype = file.getContentType();
boolean shared = false;
- //TODO: FETCH USER OF OTHER FOLDER ITEM
- //if(GSS.get().getTreeView().getSelection()!=null && (GSS.get().getTreeView().getSelection() instanceof OtherUserResource || GSS.get().getTreeView().getSelection() instanceof OthersFolderResource))
- /*Folders folders = GSS.get().getFolders();
- if(folders.getCurrent() != null && folders.isOthersSharedItem(folders.getCurrent())){
- DnDTreeItem otherUser = (DnDTreeItem) folders.getUserOfSharedItem(folders.getCurrent());
- if(otherUser==null)
- shared = false;
+ if(GSS.get().getTreeView().getSelection()!=null && (GSS.get().getTreeView().getSelection() instanceof OtherUserResource || GSS.get().getTreeView().getSelection() instanceof OthersFolderResource)){
+ OtherUserResource otherUser = null;
+ if(GSS.get().getTreeView().getSelection() instanceof OtherUserResource)
+ otherUser = (OtherUserResource) GSS.get().getTreeView().getSelection();
+ else if (GSS.get().getTreeView().getSelection() instanceof OthersFolderResource){
+ otherUser = GSS.get().getTreeView().getOtherUserResourceOfOtherFolder((OthersFolderResource) GSS.get().getTreeView().getSelection());
+ }
+ if(otherUser ==null)
+ shared=false;
else{
- String uname = otherUser.getOtherUserResource().getUsername();
+ String uname = otherUser.getUsername();
if(uname==null)
- uname = ((DnDTreeItem)folders.getSharesItem()).getOthersResource().getUsernameOfUri(otherUser.getOtherUserResource().getUri());
+ uname = GSS.get().getTreeView().getOthers().getUsernameOfUri(otherUser.getUri());
if(uname != null)
shared = file.isShared();
}
}
- else*/
+ else
shared = file.isShared();
if (mimetype == null)
return shared ? images.documentShared() : images.document();
public void updateCurrentlyShowingStats() {
GSS.get().getStatusPanel().updateCurrentlyShowing(showingStats);
}
-
- 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().getTreeView().getSelection().equals(GSS.get().getTreeView().getTrash()))
- updateFileCache(clearSelection);
- else if (GSS.get().getTreeView().getSelection() != null) {
- final RestResource selectedResource = GSS.get().getTreeView().getSelection();
- if (selectedResource instanceof RestResourceWrapper) {
-
- update(true);
- }
- }
- updateFileCache(clearSelection);
- }
-
-
- private void updateFileCache(boolean clearSelection) {
- updateFileCache(clearSelection, null);
- }
-
- /**
- * Update the file cache with data from the server.
- *
- * @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)
+
+ public void updateFileCache(boolean clearSelection){
+ if(clearSelection)
clearSelectedRows();
- startIndex = 0;
final RestResource folderItem = GSS.get().getTreeView().getSelection();
// Validation.
if (folderItem == null || folderItem.equals(GSS.get().getTreeView().getOthers())) {
update(true);
return;
}
- if (folderItem instanceof RestResourceWrapper) {
+ else if (folderItem instanceof RestResourceWrapper) {
setFiles(((RestResourceWrapper) folderItem).getResource().getFiles());
update(true);
}
- if (folderItem instanceof SharedResource) {
+ else if (folderItem instanceof SharedResource) {
setFiles(((SharedResource) folderItem).getFiles());
update(true);
}
- if (folderItem instanceof TrashResource) {
+ else if (folderItem instanceof OtherUserResource) {
+ setFiles(((OtherUserResource) folderItem).getFiles());
+ update(true);
+ }
+ else if (folderItem instanceof TrashResource) {
setFiles(((TrashResource) folderItem).getFiles());
update(true);
}
}
+
/**
* Fill the file cache with data.
});
folderFileCount = files.size();
+
+ nameHeader.setSorted(true);
+ nameHeader.toggleReverseSort();
+ for (SortableHeader otherHeader : allHeaders) {
+ if (otherHeader != nameHeader) {
+ otherHeader.setSorted(false);
+ otherHeader.setReverseSort(true);
+ }
+ }
+ //
}
*
*/
public void selectAllRows() {
- Iterator<FileResource> it = selectionModel.getSelectedSet().iterator();
+ Iterator<FileResource> it = provider.getList().iterator();
while(it.hasNext()){
selectionModel.setSelected(it.next(),true);
}
*/
private void showCellTable(){
- celltable.setRowCount(files.size());
- celltable.setRowData(0,files);
+ if(files.size()>=GSS.VISIBLE_FILE_COUNT){
+ pager.setVisible(true);
+ pagerTop.setVisible(true);
+ }
+ else{
+ pagerTop.setVisible(false);
+ pager.setVisible(false);
+ }
+ provider.setList(files);
+ provider.refresh();
+ //celltable.redraw();
celltable.redrawHeaders();
}