workspace-tree-widget/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java

732 lines
25 KiB
Java

package org.gcube.portlets.user.workspace.client.view.tree;
import java.util.ArrayList;
import java.util.List;
import org.gcube.portlets.user.workspace.client.AppControllerExplorer;
import org.gcube.portlets.user.workspace.client.ConstantsExplorer;
import org.gcube.portlets.user.workspace.client.event.AddFolderEvent;
import org.gcube.portlets.user.workspace.client.event.CreateSharedFolderEvent;
import org.gcube.portlets.user.workspace.client.event.CreateUrlEvent;
import org.gcube.portlets.user.workspace.client.event.DeleteItemEvent;
import org.gcube.portlets.user.workspace.client.event.FileDownloadEvent;
import org.gcube.portlets.user.workspace.client.event.FileDownloadEvent.DownloadType;
import org.gcube.portlets.user.workspace.client.event.FileUploadEvent;
import org.gcube.portlets.user.workspace.client.event.FileUploadEvent.UploadType;
import org.gcube.portlets.user.workspace.client.event.ImagePreviewEvent;
import org.gcube.portlets.user.workspace.client.event.OpenReportsEvent;
import org.gcube.portlets.user.workspace.client.event.OpenUrlEvent;
import org.gcube.portlets.user.workspace.client.event.PasteItemEvent;
import org.gcube.portlets.user.workspace.client.event.RefreshFolderEvent;
import org.gcube.portlets.user.workspace.client.event.RenameItemEvent;
import org.gcube.portlets.user.workspace.client.event.SendMessageEvent;
import org.gcube.portlets.user.workspace.client.event.UnShareFolderEvent;
import org.gcube.portlets.user.workspace.client.event.WebDavUrlEvent;
import org.gcube.portlets.user.workspace.client.model.FileModel;
import org.gcube.portlets.user.workspace.client.resources.Resources;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
import com.extjs.gxt.ui.client.widget.menu.SeparatorMenuItem;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.Window;
public class ContextMenuTree {
private Menu contextMenu = new Menu();
// private TreePanel<FileModel> treePanel = null;
private HandlerManager eventBus = AppControllerExplorer.getEventBus();
private List<FileModel> listSelectedItems = null;
public ContextMenuTree() {
//Context Menu
// Menu contextMenu = new Menu();
this.contextMenu.setWidth(140);
// this.treePanel = treePanel;
this.listSelectedItems = new ArrayList<FileModel>();
createContextMenu();
// return contextMenu;
}
private void createContextMenu() {
//SPECIFIC OPERATION
//Preview Image
MenuItem previewImage = new MenuItem();
previewImage.setId(ConstantsExplorer.PRW);
previewImage.setText(ConstantsExplorer.MESSAGE_PREVIEW);
previewImage.setIcon(Resources.getIconPreview());
previewImage.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// FileModel selected = treePanel.getSelectionModel().getSelectedItem();
FileModel selected = listSelectedItems.get(0);
if(selected!=null){
eventBus.fireEvent(new ImagePreviewEvent(selected, ce.getClientX(), ce.getClientY()));
}
//clearListSelectedItems();
}
});
contextMenu.add(previewImage);
//Open Url
MenuItem openUrl = new MenuItem();
openUrl.setId(ConstantsExplorer.LNK);
openUrl.setText(ConstantsExplorer.MESSAGE_OPEN_URL);
openUrl.setIcon(Resources.getIconOpenUrl());
openUrl.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// FileModel selected = treePanel.getSelectionModel().getSelectedItem();
FileModel selected = listSelectedItems.get(0);
// if(selected!=null)
// eventBus.fireEvent(new ImagePreviewEvent(selected, ce.getClientX(), ce.getClientY()));
if(selected!=null){
eventBus.fireEvent(new OpenUrlEvent(selected));
}
//clearListSelectedItems();
}
});
contextMenu.add(openUrl);
// contextMenu.add(new SeparatorMenuItem());
//Open Report Template
MenuItem openReportTemplate = new MenuItem();
openReportTemplate.setId(ConstantsExplorer.ORT);
openReportTemplate.setText(ConstantsExplorer.MESSAGE_OPEN_REPORT_TEMPLATE);
openReportTemplate.setIcon(Resources.getIconOpenUrl());
openReportTemplate.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
FileModel selected = listSelectedItems.get(0);
if(selected!=null){
eventBus.fireEvent(new OpenReportsEvent(selected));
}
}
});
contextMenu.add(openReportTemplate);
// contextMenu.add(new SeparatorMenuItem());
//Open Report Template
MenuItem openReport = new MenuItem();
openReport.setId(ConstantsExplorer.ORP);
openReport.setText(ConstantsExplorer.MESSAGE_OPEN_REPORT);
openReport.setIcon(Resources.getIconOpenUrl());
openReport.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// FileModel selected =
// treePanel.getSelectionModel().getSelectedItem();
FileModel selected = listSelectedItems.get(0);
// if(selected!=null)
// eventBus.fireEvent(new ImagePreviewEvent(selected,
// ce.getClientX(), ce.getClientY()));
if (selected != null){
eventBus.fireEvent(new OpenReportsEvent(selected));
}
//clearListSelectedItems();
}
});
contextMenu.add(openReport);
contextMenu.add(new SeparatorMenuItem());
//END SPECIFIC OPERATION
MenuItem insertFolder = new MenuItem();
insertFolder.setId(ConstantsExplorer.INS);
insertFolder.setText(ConstantsExplorer.MESSAGE_ADD_FOLDER);
insertFolder.setIcon(Resources.getIconAddFolder());
insertFolder.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// final FileModel sourceFileModel = treePanel.getSelectionModel().getSelectedItem();
final FileModel sourceFileModel = listSelectedItems.get(0);
if (sourceFileModel != null) {
// final FolderModel parentFileModel = (FolderModel) treePanel.getStore().getParent(sourceFileModel); // TODO parent of item
eventBus.fireEvent(new AddFolderEvent(sourceFileModel, sourceFileModel.getParentFileModel()));
}
//clearListSelectedItems();
}
});
contextMenu.add(insertFolder);
MenuItem createShareFolder = new MenuItem();
createShareFolder.setId(ConstantsExplorer.ISHF);
createShareFolder.setText(ConstantsExplorer.MESSAGE_ADD_SHARED_FOLDER);
createShareFolder.setIcon(Resources.getIconSharedFolder());
createShareFolder.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
final FileModel sourceFileModel = listSelectedItems.get(0);
if (sourceFileModel != null) {
eventBus.fireEvent(new CreateSharedFolderEvent(sourceFileModel, sourceFileModel.getParentFileModel(), true));
}
}
});
contextMenu.add(createShareFolder);
// contextMenu.add(new SeparatorMenuItem());
//Add Url
MenuItem addUrl = new MenuItem();
addUrl.setId(ConstantsExplorer.CLK);
addUrl.setText(ConstantsExplorer.MESSAGE_ADD_URL);
addUrl.setIcon(Resources.getIconAddUrl());
addUrl.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// FileModel selected = treePanel.getSelectionModel().getSelectedItem();
FileModel selected = listSelectedItems.get(0);
FileModel parent = getDirectoryOrParent(selected);
if(parent!=null){
eventBus.fireEvent(new CreateUrlEvent(null, parent));
}
//clearListSelectedItems();
}
});
contextMenu.add(addUrl);
contextMenu.add(new SeparatorMenuItem());
MenuItem copy = new MenuItem();
copy.setId(ConstantsExplorer.CPI);
copy.setText(ConstantsExplorer.COPYITEM);
copy.setIcon(Resources.getIconCopy());
copy.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (FileModel target : listSelectedItems) {
if(target.getIdentifier()!=null){
CopyAndPaste.copy(target.getIdentifier());
}
}
//clearListSelectedItems();
}
});
contextMenu.add(copy);
MenuItem paste = new MenuItem();
paste.setId(ConstantsExplorer.PSI);
paste.setText(ConstantsExplorer.PASTEITEM);
paste.setIcon(Resources.getIconPaste());
paste.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (FileModel target : listSelectedItems) {
FileModel parentTarget = getDirectoryOrParent(target);
if(parentTarget!=null){
// FileModel source = treePanel.getStore().findModel(ConstantsExplorer.IDENTIFIER, CopyAndPaste.getCopiedfileModelId());
//// FileModel parentSource = source.getParentFileModel();
// if(parentSource.getIdentifier() != parentTarget.getIdentifier()){
eventBus.fireEvent(new PasteItemEvent(CopyAndPaste.getCopiedfileModelId(), parentTarget.getIdentifier()));
CopyAndPaste.setCopiedfileModelId(null);
// }
// else
// new MessageBoxAlert("Error", "desti", null);
}
}
//clearListSelectedItems();
}
});
contextMenu.add(paste);
MenuItem share = new MenuItem();
share.setId(ConstantsExplorer.SHR);
share.setText("Share");
share.setIcon(Resources.getIconShareFolder());
share.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (FileModel target : listSelectedItems) {
if(target.getIdentifier()!=null){
eventBus.fireEvent(new CreateSharedFolderEvent(target, target.getParentFileModel(),false));
}
}
//clearListSelectedItems();
}
});
contextMenu.add(share);
MenuItem unShare = new MenuItem();
unShare.setId(ConstantsExplorer.USHR);
unShare.setText("UnShare");
unShare.setIcon(Resources.getIconUnShareUser());
unShare.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (FileModel target : listSelectedItems) {
if(target.getIdentifier()!=null){
eventBus.fireEvent( new UnShareFolderEvent(target));
}
}
//clearListSelectedItems();
}
});
contextMenu.add(unShare);
MenuItem rename = new MenuItem();
rename.setId(ConstantsExplorer.RNM);
rename.setText("Rename Item");
rename.setIcon(Resources.getIconRenameItem());
rename.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (FileModel target : listSelectedItems) {
if(target.getIdentifier()!=null){
eventBus.fireEvent(new RenameItemEvent(target));
// //clearListSelectedItems();
}
}
//clearListSelectedItems();
}
});
contextMenu.add(rename);
MenuItem remove = new MenuItem();
remove.setId(ConstantsExplorer.REM);
remove.setText(ConstantsExplorer.MESSAGE_DELETE_ITEM);
remove.setIcon(Resources.getIconDeleteItem());
remove.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (FileModel sel : listSelectedItems) {
eventBus.fireEvent(new DeleteItemEvent(sel));
}
//clearListSelectedItems();
}
});
contextMenu.add(remove);
contextMenu.add(new SeparatorMenuItem());
MenuItem show = new MenuItem();
show.setId(ConstantsExplorer.SHW);
show.setText(ConstantsExplorer.MESSAGE_SHOW);
show.setIcon(Resources.getIconShow());
show.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (final FileModel sel : listSelectedItems) {
eventBus.fireEvent(new FileDownloadEvent(sel.getIdentifier(), sel.getName(), DownloadType.SHOW));
}
}
});
contextMenu.add(show);
MenuItem viewWebDav = new MenuItem();
viewWebDav.setId(ConstantsExplorer.WDV);
viewWebDav.setText(ConstantsExplorer.MESSAGE_WEBDAV_URL);
viewWebDav.setIcon(Resources.getIconUrlWebDav());
viewWebDav.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (final FileModel sel : listSelectedItems)
eventBus.fireEvent(new WebDavUrlEvent(sel.getIdentifier()));
//clearListSelectedItems();
}
});
contextMenu.add(viewWebDav);
MenuItem sendTo = new MenuItem();
sendTo.setId(ConstantsExplorer.SDT);
sendTo.setText(ConstantsExplorer.MESSAGE_SEND_TO);
sendTo.setIcon(Resources.getIconSendTo());
sendTo.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
if(listSelectedItems!=null && listSelectedItems.size()>0)
eventBus.fireEvent(new SendMessageEvent(listSelectedItems));
//clearListSelectedItems();
}
});
contextMenu.add(sendTo);
MenuItem upload = new MenuItem();
upload.setId(ConstantsExplorer.UPL);
upload.setText(ConstantsExplorer.MESSAGE_UPLOAD_FILE);
upload.setIcon(Resources.getIconFileUpload());
upload.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (final FileModel sel : listSelectedItems) {
FileModel parent = getDirectoryOrParent(sel);
// if(sel.isDirectory())
// parent = sel;
// else
// parent = sel.getParentFileModel();
eventBus.fireEvent(new FileUploadEvent(parent, UploadType.FILE));
}
//clearListSelectedItems();
}
});
contextMenu.add(upload);
MenuItem uploadArchive = new MenuItem();
uploadArchive.setId(ConstantsExplorer.UPA);
uploadArchive.setText(ConstantsExplorer.MESSAGE_UPLOAD_ARCHIVE);
uploadArchive.setIcon(Resources.getIconArchiveUpload());
uploadArchive.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (FileModel sel : listSelectedItems) {
FileModel parent = getDirectoryOrParent(sel);
// if(sel.isDirectory())
// parent = sel;
// else
// parent = sel.getParentFileModel();
eventBus.fireEvent(new FileUploadEvent(parent, UploadType.ARCHIVE));
}
//clearListSelectedItems();
}
});
contextMenu.add(uploadArchive);
MenuItem downloadArchive = new MenuItem();
downloadArchive.setId(ConstantsExplorer.DWL);
downloadArchive.setText(ConstantsExplorer.MESSAGE_DOWNLOAD_ITEM);
downloadArchive.setIcon(Resources.getIconDownload());
downloadArchive.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (FileModel sel : listSelectedItems) {
// FolderModel parent = null;
//
// if(sel.isDirectory())
// parent = (FolderModel) sel;
// else
// parent = (FolderModel) store.getParent(sel);
// Window.alert("Upload nella seguente directory: " + parent.getName());
eventBus.fireEvent(new FileDownloadEvent(sel.getIdentifier(), sel.getName(), DownloadType.DOWNLOAD));
}
//clearListSelectedItems();
}
});
contextMenu.add(downloadArchive);
contextMenu.add(new SeparatorMenuItem());
MenuItem refreshItem = new MenuItem();
refreshItem.setId(ConstantsExplorer.RFH);
refreshItem.setText(ConstantsExplorer.MESSAGE_REFRESH_FOLDER);
refreshItem.setIcon(Resources.getIconRefresh());
refreshItem.addSelectionListener(new SelectionListener<MenuEvent>() {
public void componentSelected(MenuEvent ce) {
// List<FileModel> selected = treePanel.getSelectionModel().getSelectedItems();
for (FileModel sel : listSelectedItems) {
eventBus.fireEvent(new RefreshFolderEvent(sel));
}
//clearListSelectedItems();
}
});
contextMenu.add(refreshItem);
contextMenu.add(new SeparatorMenuItem());
}
public void clearListSelectedItems() {
listSelectedItems.clear();
}
public void openContextMenuOnItem(FileModel targetFileModel, int posX, int posY) {
// this.contextMenuPosX = posX;
// this.contextMenuPosY = posY;
clearListSelectedItems();
listSelectedItems.add(0, targetFileModel);
printSelected();
if(targetFileModel!=null){
contextMenuSwitch(targetFileModel);
contextMenu.getItemByItemId(ConstantsExplorer.INS).setVisible(false); //set invisible create folder
contextMenu.getItemByItemId(ConstantsExplorer.ISHF).setVisible(false); //set invisible create shared folder
contextMenu.getItemByItemId(ConstantsExplorer.WDV).setVisible(false); //set invisible webdav url
contextMenu.getItemByItemId(ConstantsExplorer.UPL).setVisible(false); //set invisible upload file
contextMenu.getItemByItemId(ConstantsExplorer.UPA).setVisible(false); //set invisible upload archive
contextMenu.getItemByItemId(ConstantsExplorer.CLK).setVisible(false); //set invisible add url
contextMenu.getItemByItemId(ConstantsExplorer.RFH).setVisible(false); //set invisible refresh
// contextMenu.getItemByItemId(ConstantsExplorer.SHR).setVisible(false); //set invisible share
// contextMenu.getItemByItemId(ConstantsExplorer.USHR).setVisible(false); //set invisible unshare
contextMenu.showAt(posX, posY);
}
// treePanel.fireEvent(Events.ContextMenu);
}
private void printSelected(){
for (FileModel sel: listSelectedItems) {
System.out.println("selected " +sel.getName() );
}
}
public void contextMenuSwitch(FileModel selectedItem) {
contextMenu.getItemByItemId(ConstantsExplorer.INS).setVisible(true); //insert folder
contextMenu.getItemByItemId(ConstantsExplorer.ISHF).setVisible(true); //insert shared folder
contextMenu.getItemByItemId(ConstantsExplorer.UPL).setVisible(true);
contextMenu.getItemByItemId(ConstantsExplorer.UPA).setVisible(true);
contextMenu.getItemByItemId(ConstantsExplorer.CLK).setVisible(true);
contextMenu.getItemByItemId(ConstantsExplorer.PRW).setVisible(false); //preview image
contextMenu.getItemByItemId(ConstantsExplorer.LNK).setVisible(false); //open link
contextMenu.getItemByItemId(ConstantsExplorer.SHW).setVisible(false); //show
contextMenu.getItemByItemId(ConstantsExplorer.ORP).setVisible(false); //open report
contextMenu.getItemByItemId(ConstantsExplorer.ORT).setVisible(false); //open report template
contextMenu.getItemByItemId(ConstantsExplorer.PSI).setEnabled(false); //paste
contextMenu.getItemByItemId(ConstantsExplorer.RFH).setVisible(false); //refresh
contextMenu.getItemByItemId(ConstantsExplorer.SHR).setVisible(false); //SHARE
contextMenu.getItemByItemId(ConstantsExplorer.USHR).setVisible(false); //UNSHARE
if(selectedItem.isDirectory()){
contextMenu.getItemByItemId(ConstantsExplorer.SHR).setVisible(true); //SHARE
contextMenu.getItemByItemId(ConstantsExplorer.SHW).setVisible(false); //show
contextMenu.getItemByItemId(ConstantsExplorer.RFH).setVisible(true); //refresh
if(selectedItem.isShared()){ //IS SHARED
contextMenu.getItemByItemId(ConstantsExplorer.ISHF).setVisible(false); //insert shared folder
contextMenu.getItemByItemId(ConstantsExplorer.USHR).setVisible(true);
}else if(selectedItem.isRoot()){ //IS ROOT
contextMenu.getItemByItemId(ConstantsExplorer.SHR).setVisible(false); //SHARE
contextMenu.getItemByItemId(ConstantsExplorer.ISHF).setVisible(true); //insert shared folder
contextMenu.getItemByItemId(ConstantsExplorer.USHR).setVisible(false); //UNSHARE
}
}
else{
contextMenu.getItemByItemId(ConstantsExplorer.SHW).setVisible(true);
switch(selectedItem.getGXTFolderItemType()){
case EXTERNAL_IMAGE:
contextMenu.getItemByItemId(ConstantsExplorer.PRW).setVisible(true);
break;
case EXTERNAL_FILE:
break;
case EXTERNAL_PDF_FILE:
break;
case EXTERNAL_URL:
contextMenu.getItemByItemId(ConstantsExplorer.LNK).setVisible(true);
break;
case REPORT_TEMPLATE:
contextMenu.getItemByItemId(ConstantsExplorer.ORT).setVisible(true);
break;
case REPORT:
contextMenu.getItemByItemId(ConstantsExplorer.ORP).setVisible(true);
break;
case QUERY:
break;
case TIME_SERIES:
break;
// case AQUAMAPS_ITEM:
// break;
case PDF_DOCUMENT:
break;
case IMAGE_DOCUMENT:
contextMenu.getItemByItemId(ConstantsExplorer.PRW).setVisible(true);
break;
case DOCUMENT:
break;
case URL_DOCUMENT:
contextMenu.getItemByItemId(ConstantsExplorer.LNK).setVisible(true);
break;
case METADATA:
break;
case WORKFLOW_REPORT:
break;
case WORKFLOW_TEMPLATE:
break;
case EXTERNAL_RESOURCE_LINK:
break;
default:
}
}
if(CopyAndPaste.getCopiedfileModelId()!=null)
contextMenu.getItemByItemId(ConstantsExplorer.PSI).setEnabled(true); //paste
}
/**
* The method return input file model if is directory otherwise parent of file model
* @param fileModel
* @return
*/
private FileModel getDirectoryOrParent(FileModel fileModel){
if(fileModel!=null){
if(fileModel.isDirectory())
return fileModel;
else
return fileModel.getParentFileModel();
}
return null;
}
public Menu getContextMenu(){
return this.contextMenu;
}
public void setPagePosition(int x, int y){
this.contextMenu.setPagePosition(x, y);
}
public List<FileModel> getListSelectedItems() {
return listSelectedItems;
}
public void setListSelectedItems(List<FileModel> listSelectedItems) {
this.listSelectedItems.clear();
this.listSelectedItems = listSelectedItems;
}
}