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; public class ContextMenuTree { private Menu contextMenu = new Menu(); // private TreePanel treePanel = null; private HandlerManager eventBus = AppControllerExplorer.getEventBus(); private List listSelectedItems = null; public ContextMenuTree() { //Context Menu // Menu contextMenu = new Menu(); this.contextMenu.setWidth(140); // this.treePanel = treePanel; this.listSelectedItems = new ArrayList(); 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() { 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() { 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() { 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() { 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() { 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() { 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() { 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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() { public void componentSelected(MenuEvent ce) { // List 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(false); //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 getListSelectedItems() { return listSelectedItems; } public void setListSelectedItems(List listSelectedItems) { this.listSelectedItems.clear(); this.listSelectedItems = listSelectedItems; } }