*/\r
package gr.ebs.gss.client;\r
\r
-import gr.ebs.gss.client.dnd.DnDFocusPanel;\r
+import gr.ebs.gss.client.dnd.DnDSimpleFocusPanel;\r
import gr.ebs.gss.client.dnd.DnDTreeItem;\r
import gr.ebs.gss.client.rest.GetCommand;\r
import gr.ebs.gss.client.rest.MultipleHeadCommand;\r
import java.util.List;\r
\r
import com.google.gwt.core.client.GWT;\r
+import com.google.gwt.dom.client.NativeEvent;\r
import com.google.gwt.event.dom.client.ClickEvent;\r
import com.google.gwt.event.dom.client.ClickHandler;\r
import com.google.gwt.http.client.URL;\r
/**\r
* The context menu for the selected file.\r
*/\r
- final DnDFocusPanel contextMenu;\r
+ final DnDSimpleFocusPanel contextMenu;\r
\r
/**\r
* Specifies that the images available for this composite will be the ones\r
/**\r
* The table widget with the file list.\r
*/\r
- private Grid table = new Grid(GSS.VISIBLE_FILE_COUNT + 1, 8);\r
+ private FileTable table = new FileTable(GSS.VISIBLE_FILE_COUNT + 1, 8);\r
\r
/**\r
* The navigation bar for paginating the results.\r
prevButton.addClickHandler(this);\r
nextButton.addClickHandler(this);\r
\r
- contextMenu = new DnDFocusPanel(new HTML(AbstractImagePrototype.create(images.fileContextMenu()).getHTML()));\r
- contextMenu.addClickHandler(new FileContextMenu(images, false, false));\r
+ contextMenu = new DnDSimpleFocusPanel(new HTML(AbstractImagePrototype.create(images.fileContextMenu()).getHTML()));\r
GSS.get().getDragController().makeDraggable(contextMenu);\r
\r
// Setup the table.\r
@Override\r
public void onClick(ClickEvent event) {\r
Cell cell = table.getCellForEvent(event);\r
- onRowClicked(cell.getRowIndex());\r
+ GWT.log("row clicked:"+cell.getRowIndex(), null);\r
+ onRowClicked(cell.getRowIndex(), true);\r
}\r
});\r
// Create the 'navigation' bar at the upper-right.\r
});\r
sinkEvents(Event.ONCONTEXTMENU);\r
sinkEvents(Event.ONMOUSEUP);\r
+ sinkEvents(Event.ONMOUSEDOWN);\r
sinkEvents(Event.ONCLICK);\r
sinkEvents(Event.ONKEYDOWN);\r
sinkEvents(Event.ONDBLCLICK);\r
\r
@Override\r
public void onBrowserEvent(Event event) {\r
+ if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT){\r
+ if (DOM.eventGetCtrlKey(event))\r
+ clickControl = true;\r
+ else\r
+ clickControl = false;\r
+ if (DOM.eventGetShiftKey(event)) {\r
+ clickShift = true;\r
+ if (selectedRows.size() == 1)\r
+ firstShift = selectedRows.get(0) - startIndex;\r
+ //event.preventDefault();\r
+ } else {\r
+ clickShift = false;\r
+ firstShift = -1;\r
+ //event.preventDefault();\r
+ }\r
+ int ri = table.getRowForEvent2(event);\r
+ if(ri != -1)\r
+ if(!selectedRows.contains(ri-1))\r
+ onRowClicked(ri, false);\r
+ }\r
+\r
if (files == null || files.size() == 0) {\r
if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && selectedRows.size() == 0) {\r
FileContextMenu fm = new FileContextMenu(images, false, true);\r
clickShift = true;\r
if (selectedRows.size() == 1)\r
firstShift = selectedRows.get(0) - startIndex;\r
- event.preventDefault();\r
+ //event.preventDefault();\r
} else {\r
clickShift = false;\r
firstShift = -1;\r
- event.preventDefault();\r
+ //event.preventDefault();\r
}\r
}\r
super.onBrowserEvent(event);\r
return DONE;\r
}\r
\r
- private void onRowClicked(int row) {\r
+ private void onRowClicked(int row, boolean toggleSelection) {\r
// Select the row that was clicked (-1 to account for header row).\r
if (row > folderFileCount)\r
return;\r
contextMenu.setFiles(getSelectedFiles());\r
}\r
} else if (row > 0)\r
- selectRow(row - 1);\r
+ selectRow(row - 1, toggleSelection);\r
}\r
\r
/**\r
*\r
* @param row the row to be selected\r
*/\r
- private void selectRow(final int row) {\r
+ private void selectRow(final int row, boolean toggleSelection) {\r
if (row < folderFileCount) {\r
if (clickControl)\r
- if (selectedRows.contains(row)) {\r
+ if (selectedRows.contains(row) && toggleSelection) {\r
int i = selectedRows.indexOf(startIndex + row);\r
selectedRows.remove(i);\r
styleRow(row, false);\r
selectedRows.add(startIndex + row);\r
styleRow(row, true);\r
}\r
- else if (selectedRows.size() == 1 && selectedRows.contains(row)){\r
+ else if (selectedRows.size() == 1 && selectedRows.contains(row) && toggleSelection){\r
clearSelectedRows();\r
return;\r
}\r
*/\r
private AbstractImagePrototype getFileIcon(FileResource file) {\r
String mimetype = file.getContentType();\r
- boolean shared = file.isShared();\r
+ boolean shared=false;\r
+ Folders folders = GSS.get().getFolders();\r
+ if(folders.getCurrent() != null && folders.isOthersSharedItem(folders.getCurrent())){\r
+ DnDTreeItem otherUser = (DnDTreeItem) folders.getUserOfSharedItem(folders.getCurrent());\r
+ if(otherUser==null)\r
+ shared = false;\r
+ else{\r
+ String uname = otherUser.getOtherUserResource().getUsername();\r
+ if(uname==null)\r
+ uname = ((DnDTreeItem)folders.getSharesItem()).getOthersResource().getUsernameOfUri(otherUser.getOtherUserResource().getUri());\r
+ if(uname != null)\r
+ shared = file.isShared();\r
+ }\r
+ }\r
+ else\r
+ shared = file.isShared();\r
if (mimetype == null)\r
return shared ? AbstractImagePrototype.create(images.documentShared()) : AbstractImagePrototype.create(images.document());\r
mimetype = mimetype.toLowerCase();\r
updateFileCache(clearSelection);\r
else if (GSS.get().getFolders().getCurrent() != null) {\r
final DnDTreeItem folderItem = (DnDTreeItem) GSS.get().getFolders().getCurrent();\r
- if (folderItem.getFolderResource() != null) {\r
+ if(GSS.get().getFolders().isFileItem(folderItem) || GSS.get().getFolders().isMySharedItem(folderItem) || GSS.get().getFolders().isOthersSharedItem(folderItem)){\r
update(true);\r
- GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, folderItem.getFolderResource().getUri()) {\r
+ GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, folderItem.getFolderResource().getUri(),folderItem.getFolderResource()) {\r
\r
@Override\r
public void onComplete() {\r
filePaths[c] = fpath + "?" + Math.random();\r
c++;\r
}\r
- MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths){\r
+ MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getFolderResource().getFileCache()){\r
\r
@Override\r
public void onComplete(){\r
int indexOfQuestionMark = p.lastIndexOf('?');\r
if(indexOfQuestionMark>0)\r
r.setUri(p.substring(0, indexOfQuestionMark));\r
+ GWT.log("FETCHED:"+r.getLastModifiedSince(), null);\r
}\r
folderItem.getFolderResource().setFiles(result);\r
+ folderItem.getFolderResource().setFilesExpanded(true);\r
updateFileCache(clearSelection, newFilename);\r
}\r
\r
};\r
DeferredCommand.addCommand(gf);\r
} else if (folderItem.getTrashResource() != null) {\r
- GetCommand<TrashResource> gt = new GetCommand<TrashResource>(TrashResource.class, folderItem.getTrashResource().getUri()) {\r
+ GetCommand<TrashResource> gt = new GetCommand<TrashResource>(TrashResource.class, folderItem.getTrashResource().getUri(), null) {\r
\r
@Override\r
public void onComplete() {\r
};\r
DeferredCommand.addCommand(gt);\r
} else if (folderItem.getSharedResource() != null) {\r
- GetCommand<SharedResource> gt = new GetCommand<SharedResource>(SharedResource.class, folderItem.getSharedResource().getUri()) {\r
+ GetCommand<SharedResource> gt = new GetCommand<SharedResource>(SharedResource.class, folderItem.getSharedResource().getUri(), null) {\r
\r
@Override\r
public void onComplete() {\r
folderItem.setUserObject(getResult());\r
updateFileCache(clearSelection, newFilename);\r
+ String[] filePaths = new String[folderItem.getSharedResource().getFilePaths().size()];\r
+ int c=0;\r
+ for(String fpath : folderItem.getSharedResource().getFilePaths()){\r
+ filePaths[c] = fpath + "?" + Math.random();\r
+ c++;\r
+ }\r
+ MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getSharedResource().getFileCache()){\r
+\r
+ @Override\r
+ public void onComplete(){\r
+ List<FileResource> result = getResult();\r
+ //remove random from path\r
+ for(FileResource r : result){\r
+ String p = r.getUri();\r
+ int indexOfQuestionMark = p.lastIndexOf('?');\r
+ if(indexOfQuestionMark>0)\r
+ r.setUri(p.substring(0, indexOfQuestionMark));\r
+ GWT.log("FETCHED:"+r.getLastModifiedSince(), null);\r
+ }\r
+ folderItem.getSharedResource().setFiles(result);\r
+ folderItem.getSharedResource().setFilesExpanded(true);\r
+ updateFileCache(clearSelection, newFilename);\r
+ }\r
+\r
+ @Override\r
+ public void onError(String p, Throwable throwable) {\r
+ if(throwable instanceof RestException)\r
+ GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());\r
+ }\r
+\r
+ @Override\r
+ public void onError(Throwable t) {\r
+ GWT.log("", t);\r
+ GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());\r
+ }\r
+\r
+ };\r
+ DeferredCommand.addCommand(getFiles);\r
}\r
\r
@Override\r
};\r
DeferredCommand.addCommand(gt);\r
} else if (folderItem.getOtherUserResource() != null) {\r
- GetCommand<OtherUserResource> gt = new GetCommand<OtherUserResource>(OtherUserResource.class, folderItem.getOtherUserResource().getUri()) {\r
+ GetCommand<OtherUserResource> gt = new GetCommand<OtherUserResource>(OtherUserResource.class, folderItem.getOtherUserResource().getUri(), null) {\r
\r
@Override\r
public void onComplete() {\r
folderItem.setUserObject(getResult());\r
updateFileCache(clearSelection, newFilename);\r
+ String[] filePaths = new String[folderItem.getOtherUserResource().getFilePaths().size()];\r
+ int c=0;\r
+ for(String fpath : folderItem.getOtherUserResource().getFilePaths()){\r
+ filePaths[c] = fpath + "?" + Math.random();\r
+ c++;\r
+ }\r
+ MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getOtherUserResource().getFileCache()){\r
+\r
+ @Override\r
+ public void onComplete(){\r
+ List<FileResource> result = getResult();\r
+ //remove random from path\r
+ for(FileResource r : result){\r
+ String p = r.getUri();\r
+ int indexOfQuestionMark = p.lastIndexOf('?');\r
+ if(indexOfQuestionMark>0)\r
+ r.setUri(p.substring(0, indexOfQuestionMark));\r
+ GWT.log("FETCHED:"+r.getLastModifiedSince(), null);\r
+ }\r
+ folderItem.getOtherUserResource().setFiles(result);\r
+ folderItem.getOtherUserResource().setFilesExpanded(true);\r
+ updateFileCache(clearSelection, newFilename);\r
+ }\r
+\r
+ @Override\r
+ public void onError(String p, Throwable throwable) {\r
+ if(throwable instanceof RestException)\r
+ GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());\r
+ }\r
+\r
+ @Override\r
+ public void onError(Throwable t) {\r
+ GWT.log("", t);\r
+ GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());\r
+ }\r
+\r
+ };\r
+ DeferredCommand.addCommand(getFiles);\r
}\r
\r
@Override\r
}\r
clearSelectedRows();\r
if (row!=-1)\r
- selectRow(row);\r
+ selectRow(row, true);\r
}\r
}\r
}\r