diff --git a/.classpath b/.classpath index 894a84f..d28dec9 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + @@ -30,5 +30,5 @@ - + diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs index 62c0640..380d335 100644 --- a/.settings/com.google.gdt.eclipse.core.prefs +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -1,5 +1,5 @@ eclipse.preferences.version=1 jarsExcludedFromWebInfLib= -lastWarOutDir=/home/francesco-mangiacrapa/wseclipse/workspace/target/workspace-6.5.1-SNAPSHOT +lastWarOutDir=/home/francesco-mangiacrapa/wseclipse/workspace/target/workspace-6.6.0-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/AppController.java b/src/main/java/org/gcube/portlets/user/workspace/client/AppController.java index e282fe8..61a2cf8 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/AppController.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/AppController.java @@ -56,6 +56,7 @@ import org.gcube.portlets.user.workspace.client.event.PathElementSelectedEvent; import org.gcube.portlets.user.workspace.client.event.PathElementSelectedEventHandler; import org.gcube.portlets.user.workspace.client.event.PreviewMessageEvent; import org.gcube.portlets.user.workspace.client.event.PreviewMessageEventHandler; +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.RenameItemEventHandler; import org.gcube.portlets.user.workspace.client.event.SaveAttachmentsEvent; @@ -88,9 +89,13 @@ import org.gcube.portlets.user.workspace.client.view.trash.WindowTrash; import org.gcube.portlets.user.workspace.client.view.windows.DialogGetInfo; import org.gcube.portlets.user.workspace.client.view.windows.InfoDisplay; import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxAlert; +import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxConfirm; import org.gcube.portlets.user.workspace.shared.SessionExpiredException; import org.gcube.portlets.widgets.wsmail.client.forms.MailForm; +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.event.MessageBoxEvent; +import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.Info; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.layout.FitLayout; @@ -410,14 +415,21 @@ public class AppController implements SubscriberInterface { @Override public void onGridElementSelected(GridElementSelectedEvent event) { - doElementGridSelected(true, event.getSourceFile()); - FileGridModel fileItem = getGridSelectedItem(); + if(!event.isMultiSelection()){ //IS NOT MULTISELECTION + doElementGridSelected(true, event.getSourceFile()); - if(fileItem!=null){ - accountingSetItemAsRead(fileItem.isMarkAsRead()); + FileGridModel fileItem = getGridSelectedItem(); + + if(fileItem!=null){ + accountingSetItemAsRead(fileItem.isMarkAsRead()); + } + }else{ //IS MULTISELECTION + + wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().activeButtonForMultiSelection(true); + wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemDetails().enableButtons(false); } - + //setFileDetailsInView(event.getSourceFile().getIdentifier()); } @@ -802,7 +814,83 @@ public class AppController implements SubscriberInterface { private void doDeleteItem(final DeleteItemEvent event){ - AppControllerExplorer.getEventBus().fireEvent(new DeleteItemEvent(event.getFileTarget())); + + if(!event.isMultiSelection()){ //IS NOT MULTI + + AppControllerExplorer.getEventBus().fireEvent(new DeleteItemEvent(event.getFileTarget())); + + }else{ //IS MULTI + + + if(event.getListTarget()!=null){ + + FileModel parent = null; + + if(!wsPortlet.getSearchAndFilterContainer().isSearchActive()){ // IS NOT A SEARCH + if(wsPortlet.getToolBarPath().getLastParent()!=null){ + parent = wsPortlet.getToolBarPath().getLastParent(); + GWT.log("Search is not active get parent item for uploading from breadcrumb: " +parent.getName()); + }else if(wsPortlet.getGridGroupContainer().getCurrentFolderView()!=null){ + parent = wsPortlet.getGridGroupContainer().getCurrentFolderView(); + GWT.log("Search is not active get parent item for uploading from CurrentFolderView: " +parent.getName()); + } + } + + final FileModel target = parent; + + int size = event.getListTarget().size(); + + MessageBoxConfirm mbc = new MessageBoxConfirm(ConstantsExplorer.MESSAGE_DELETE, "Are you sure you want to delete "+size+" items?"); + + mbc.getMessageBoxConfirm().addCallback(new Listener() { + + public void handleEvent(MessageBoxEvent be) { + +// eventBus.fireEvent(new DeleteItemEvent(sel)); + + //IF NOT CANCELLED + String clickedButton = be.getButtonClicked().getItemId(); + if(clickedButton.equals(Dialog.YES)){ + + wsPortlet.getGridGroupContainer().mask("Deleting",ConstantsExplorer.LOADINGSTYLE); + + appContrExplorer.getRpcWorkspaceService().deleteListItemsForIds(event.getListTarget(), new AsyncCallback() { + + @Override + public void onFailure(Throwable arg0) { + wsPortlet.getGridGroupContainer().unmask(); + appContrExplorer.refreshRoot(true); + } + + @Override + public void onSuccess(Void arg0) { + + //Deleting item from grid + for (String id : event.getListTarget()) { + deleteItem(id); + } + wsPortlet.getGridGroupContainer().unmask(); + + System.out.println("target: "+target); + + if(wsPortlet.getSearchAndFilterContainer().isSearchActive()){ + appContrExplorer.refreshRoot(false); + }else + AppControllerExplorer.getEventBus().fireEvent(new RefreshFolderEvent(target, true, false, true)); +// AppController.getEventBus().fireEvent(new PathElementSelectedEvent(target)); + } + }); + } + } + }); + + + + + + } + + } } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/event/GridElementSelectedEvent.java b/src/main/java/org/gcube/portlets/user/workspace/client/event/GridElementSelectedEvent.java index 5ce4157..39a1222 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/event/GridElementSelectedEvent.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/event/GridElementSelectedEvent.java @@ -14,14 +14,16 @@ public class GridElementSelectedEvent extends GwtEvent TYPE = new Type(); private FileGridModel targetFile = null; + + private boolean isMultiSelection; - public GridElementSelectedEvent(ModelData target) { - this.targetFile = (FileGridModel) target; + public GridElementSelectedEvent(ModelData target, boolean isMultiSelection) { + this.targetFile = (FileGridModel) target; + this.isMultiSelection = isMultiSelection; } @Override public Type getAssociatedType() { - // TODO Auto-generated method stub return TYPE; } @@ -34,4 +36,8 @@ public class GridElementSelectedEvent extends GwtEvent() { @@ -200,12 +202,19 @@ public class GxtGridFilterGroupPanel extends LayoutContainer { if(target!=null){ currenItemSelected = (FileGridModel) target; - AppController.getEventBus().fireEvent(new GridElementSelectedEvent(target)); + + boolean isMultiselection = false; + + if(se.getSelection()!=null && se.getSelection().size()>1) + isMultiselection = true; + + AppController.getEventBus().fireEvent(new GridElementSelectedEvent(target, isMultiselection)); } else{ currenItemSelected = null; AppController.getEventBus().fireEvent(new GridElementUnSelectedEvent()); } + } }); @@ -237,6 +246,11 @@ public class GxtGridFilterGroupPanel extends LayoutContainer { { if(grid.getSelectionModel().getSelectedItem()!=null){ + if(grid.getSelectionModel().getSelection().size()>1){ + new InfoDisplay("Info", "The context menu is not available if multi-select is active"); + return; + } + FileGridModel fileGridModel = grid.getSelectionModel().getSelectedItem(); AppController.getEventBus().fireEvent(new OpenContextMenuTreeEvent(fileGridModel, be.getClientX(), be.getClientY())); } @@ -359,6 +373,21 @@ public class GxtGridFilterGroupPanel extends LayoutContainer { } + public List getIdsSelectedItems(){ + + if(grid.getSelectionModel().getSelection()!=null){ + + List ids = new ArrayList(); + for (FileModel file : grid.getSelectionModel().getSelection()) { + ids.add(file.getIdentifier()); + } + + return ids; + } + + return null; + } + /** * * @param identifier (MANDATORY) diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/grids/GxtGridFilterPanel.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/grids/GxtGridFilterPanel.java index 6bf0add..a76bab4 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/grids/GxtGridFilterPanel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/grids/GxtGridFilterPanel.java @@ -89,10 +89,15 @@ public class GxtGridFilterPanel extends LayoutContainer { System.out.println("selection grid change"); ModelData target = se.getSelectedItem(); - + if(target!=null){ currenItemSelected = (FileGridModel) target; - AppController.getEventBus().fireEvent(new GridElementSelectedEvent(target)); + + boolean isMultiselection = false; + + if(se.getSelection()!=null && se.getSelection().size()>1) + isMultiselection = true; + AppController.getEventBus().fireEvent(new GridElementSelectedEvent(target, isMultiselection)); } else{ currenItemSelected = null; diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtCardLayoutResultPanel.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtCardLayoutResultPanel.java index 9543cf0..df07c25 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtCardLayoutResultPanel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/panels/GxtCardLayoutResultPanel.java @@ -89,7 +89,7 @@ public class GxtCardLayoutResultPanel extends LayoutContainer{ public GxtToolBarItemFunctionality getToolBarItemFunctionalities() { return toolBarItemFunct; } - + public ContentPanel getActivePanel(){ return activePanel; } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBottomToolBarItem.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBottomToolBarItem.java index ca30bad..a7341f7 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBottomToolBarItem.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtBottomToolBarItem.java @@ -111,8 +111,8 @@ public class GxtBottomToolBarItem extends ToolBar{ } }); - add(new FillToolItem()); - add(btnGetTrash); +// add(new FillToolItem()); +// add(btnGetTrash); enableButtons(false); diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtToolBarItemFunctionality.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtToolBarItemFunctionality.java index 5bd7367..d454bea 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtToolBarItemFunctionality.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/toolbars/GxtToolBarItemFunctionality.java @@ -1,5 +1,7 @@ package org.gcube.portlets.user.workspace.client.view.toolbars; +import java.util.List; + import org.gcube.portlets.user.workspace.client.AppController; import org.gcube.portlets.user.workspace.client.ConstantsPortlet; import org.gcube.portlets.user.workspace.client.ConstantsPortlet.ViewSwitchTypeInResult; @@ -271,10 +273,21 @@ public class GxtToolBarItemFunctionality { @Override public void componentSelected(ButtonEvent ce) { - final FileGridModel fileGridModel = gridGroupViewContainer.getSelectedItem(); - AppController.getEventBus().fireEvent( - new DeleteItemEvent(fileGridModel)); + List listTarget = gridGroupViewContainer.getIdsSelectedItems(); + if(listTarget!=null){ + + if(listTarget.size()>1){ //IS MULTI + + AppController.getEventBus().fireEvent(new DeleteItemEvent(listTarget)); + + }else{ + + final FileGridModel fileGridModel = gridGroupViewContainer.getSelectedItem(); + AppController.getEventBus().fireEvent(new DeleteItemEvent(fileGridModel)); + } + } + } }); @@ -631,6 +644,15 @@ public class GxtToolBarItemFunctionality { btnOpen.setEnabled(active); btnPublicLink.setEnabled(active); } + + public void activeButtonForMultiSelection(boolean active){ + this.btnRemoveItem.setEnabled(active); + this.btnRenameItem.setEnabled(!active); + this.btnDownloadFile.setEnabled(!active); + this.btnOpen.setEnabled(!active); + this.btnCopyItem.setEnabled(!active); + this.btnGetSharedLink.setEnabled(!active); + } public ToolBar getToolBar() { return this.toolBar;