diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java b/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java index c313664..6afd5c0 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java @@ -299,8 +299,9 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt // TODO Auto-generated method stub if(getFolderLinkEvent.getSourceFile()!=null){ GWT.log("getFolderLinkEvent.getSourceFile() "+getFolderLinkEvent.getSourceFile()); - DialogGetLink dialog = new DialogGetLink("Copy to clipboard Folder Link: Ctrl+C", getFolderLinkEvent.getSourceFile(), Link_Type.FOLDER_LINK); + DialogGetLink dialog = new DialogGetLink("Copy to clipboard Folder Link: Ctrl+C", getFolderLinkEvent.getSourceFile(), Link_Type.FOLDER_LINK, getFolderLinkEvent.isSetPublic()); dialog.show(); + } } }); @@ -686,7 +687,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt public void onGetPublicLink(GetPublicLinkEvent getPublicLinkEvent) { // TODO Auto-generated method stub if(getPublicLinkEvent.getSourceFile()!=null){ - DialogGetLink dialog = new DialogGetLink("Copy to clipboard Public Link: Ctrl+C", getPublicLinkEvent.getSourceFile(), Link_Type.PUBLIC_LINK); + DialogGetLink dialog = new DialogGetLink("Copy to clipboard Public Link: Ctrl+C", getPublicLinkEvent.getSourceFile(), Link_Type.PUBLIC_LINK, false); dialog.show(); } } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java b/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java index efad2d3..5adb8df 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java @@ -70,6 +70,7 @@ public class ConstantsExplorer { public static final String MESSAGE_GET_INFO = "Get Info"; public static final String MESSAGE_PUBLIC_LINK = "Get Public Link"; public static final String MESSAGE_FOLDER_LINK = "Get Folder Link"; + public static final String MESSAGE_FOLDER_LINK_REMOVE = "Remove Folder Link"; public static final String LISTATTACHMENTSNAMES = "Attachments Names"; public static final String LISTCONTACTSTOSTRING = "ListContactToString"; public static final String STATUS = "Status"; @@ -216,6 +217,7 @@ public class ConstantsExplorer { + public static native void log(String txt) /*-{ console.log(txt) }-*/; diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/constant/WorkspaceOperation.java b/src/main/java/org/gcube/portlets/user/workspace/client/constant/WorkspaceOperation.java index f19e274..280f924 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/constant/WorkspaceOperation.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/constant/WorkspaceOperation.java @@ -38,7 +38,8 @@ public enum WorkspaceOperation { // ADD_ADMINISTRATOR("AAD", "AAD"), // ADD_ADMINISTRATOR VRE_CHANGE_PERIMISSIONS("CHP", "CHP"), EDIT_PERMISSIONS("EDP", "EDP"), //EDIT PERMISSIONS - FOLDER_LINK("FRL", "FRL"); //FOLDER LINK + FOLDER_LINK("FRL", "FRL"), //FOLDER LINK + FOLDER_LINK_REMOVE("FPR","FPR"); //FOLDER LINK REMOVE private String id; // ID CONTEXT MENU diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/event/GetFolderLinkEvent.java b/src/main/java/org/gcube/portlets/user/workspace/client/event/GetFolderLinkEvent.java index 01f9d39..bf3fce8 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/event/GetFolderLinkEvent.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/event/GetFolderLinkEvent.java @@ -1,45 +1,63 @@ + package org.gcube.portlets.user.workspace.client.event; import org.gcube.portlets.user.workspace.client.model.FileModel; import com.google.gwt.event.shared.GwtEvent; - /** * The Class GetFolderLinkEvent. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Sep 13, 2016 + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Sep 13, 2016 */ public class GetFolderLinkEvent extends GwtEvent { - public static Type TYPE = new Type(); - private FileModel targetFile = null; + public static Type TYPE = + new Type(); + private FileModel targetFile = null; + private boolean setPublic; /** * Instantiates a new gets the folder link event. * - * @param target the target + * @param target + * the target */ - public GetFolderLinkEvent(FileModel target) { + public GetFolderLinkEvent(FileModel target, boolean setPublic) { + this.targetFile = target; + this.setPublic = setPublic; } - /* (non-Javadoc) + + /** + * @return the setPublic + */ + public boolean isSetPublic() { + + return setPublic; + } + + /* + * (non-Javadoc) * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() */ @Override public Type getAssociatedType() { + return TYPE; } - /* (non-Javadoc) - * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler) + /* + * (non-Javadoc) + * @see + * com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared + * .EventHandler) */ @Override protected void dispatch(GetFolderLinkEventHandler handler) { - handler.onGetFolderLink(this); + handler.onGetFolderLink(this); } /** @@ -48,6 +66,7 @@ public class GetFolderLinkEvent extends GwtEvent { * @return the source file */ public FileModel getSourceFile() { + return targetFile; } -} \ No newline at end of file +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/resources/Icons.java b/src/main/java/org/gcube/portlets/user/workspace/client/resources/Icons.java index d64fc3d..0297793 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/resources/Icons.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/resources/Icons.java @@ -439,8 +439,11 @@ public interface Icons extends ClientBundle { @Source("icons/folder_public.png") ImageResource folderPublic(); - + @Source("icons/folder_shared_public.png") ImageResource folderSharedPublic(); + + @Source("icons/folder_public_remove.png") + ImageResource folderPublicRemove(); } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/resources/Resources.java b/src/main/java/org/gcube/portlets/user/workspace/client/resources/Resources.java index e2467dd..cc36611 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/resources/Resources.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/resources/Resources.java @@ -1324,6 +1324,15 @@ public class Resources { return AbstractImagePrototype.create(ICONS.permissions()); } + /** + * Gets the icon folder public remove. + * + * @return the icon folder public remove + */ + public static AbstractImagePrototype getIconFolderPublicRemove() { + return AbstractImagePrototype.create(ICONS.folderPublicRemove()); + } + /** * Gets the icon add administrator. diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/folder_public_remove.png b/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/folder_public_remove.png new file mode 100644 index 0000000..bd6e8c3 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/folder_public_remove.png differ diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java index 3bf7add..901aaa4 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java @@ -230,13 +230,32 @@ public class ContextMenuTree { for (FileModel sel : listSelectedItems) { if(sel.isDirectory()) - eventBus.fireEvent(new GetFolderLinkEvent(sel)); + eventBus.fireEvent(new GetFolderLinkEvent(sel, true)); } } }); contextMenu.add(mnFolderLink); + + //FOLDER LINK REMOVE + MenuItem mnFolderLinkRemove = new MenuItem(); + mnFolderLinkRemove.setId(WorkspaceOperation.FOLDER_LINK_REMOVE.getId()); + mnFolderLinkRemove.setText(ConstantsExplorer.MESSAGE_FOLDER_LINK_REMOVE); + mnFolderLinkRemove.setIcon(Resources.getIconFolderPublicRemove()); + + mnFolderLinkRemove.addSelectionListener(new SelectionListener() { + public void componentSelected(MenuEvent ce) { + + for (FileModel sel : listSelectedItems) { + if(sel.isDirectory()) + eventBus.fireEvent(new GetFolderLinkEvent(sel, false)); + } + } + }); + + contextMenu.add(mnFolderLinkRemove); + contextMenu.add(new SeparatorMenuItem()); MenuItem mnHistory = new MenuItem(); @@ -808,6 +827,7 @@ public class ContextMenuTree { contextMenu.getItemByItemId(WorkspaceOperation.REFRESH_FOLDER.getId()).setVisible(false); //refresh contextMenu.getItemByItemId(WorkspaceOperation.PUBLIC_LINK.getId()).setVisible(false); //public link contextMenu.getItemByItemId(WorkspaceOperation.FOLDER_LINK.getId()).setVisible(false); //folder link + contextMenu.getItemByItemId(WorkspaceOperation.FOLDER_LINK_REMOVE.getId()).setVisible(false); //folder link remove // contextMenu.getItemByItemId(WorkspaceOperation.ADD_ADMINISTRATOR.getId()).setVisible(false); //public link contextMenu.getItemByItemId(WorkspaceOperation.EDIT_PERMISSIONS.getId()).setVisible(false); contextMenu.getItemByItemId(WorkspaceOperation.SHARE.getId()).setVisible(false); //SHARE @@ -882,6 +902,9 @@ public class ContextMenuTree { contextMenu.getItemByItemId(WorkspaceOperation.UNSHARE.getId()).setVisible(false); //UNSHARE } + if(selectedItem.isPublic()) + contextMenu.getItemByItemId(WorkspaceOperation.FOLDER_LINK_REMOVE.getId()).setVisible(true); //folder link + GWT.log("HideSharing = " + hideSharing); //not supported in tree Reports if (hideSharing) { diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogGetLink.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogGetLink.java index 54e1d1a..81b5c7d 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogGetLink.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogGetLink.java @@ -16,6 +16,7 @@ import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.Label; +import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.VerticalPanel; import com.extjs.gxt.ui.client.widget.form.TextField; import com.google.gwt.core.client.GWT; @@ -37,6 +38,7 @@ public class DialogGetLink extends Dialog { private int height = 210; private VerticalPanel vp = new VerticalPanel(); private FileModel item; + private boolean setAsPublic = false; /** * The Enum Link_Type. @@ -52,9 +54,11 @@ public class DialogGetLink extends Dialog { * @param headingTxt the heading txt * @param item the item * @param type the type + * @param setAsPublic the set as public */ - public DialogGetLink(String headingTxt, final FileModel item, Link_Type type) { + public DialogGetLink(String headingTxt, final FileModel item, Link_Type type, boolean setAsPublic) { this.item = item; + this.setAsPublic = setAsPublic; setButtonAlign(HorizontalAlignment.CENTER); vp.setHorizontalAlign(HorizontalAlignment.CENTER); vp.setVerticalAlign(VerticalAlignment.MIDDLE); @@ -128,7 +132,7 @@ public class DialogGetLink extends Dialog { case FOLDER_LINK: - vp.mask("Getting Folder Link... checking permissions"); + vp.mask("Updating Folder Link... checking permissions"); if(item.isShared()){ setIcon(Resources.getIconFolderSharedPublic()); }else @@ -153,8 +157,10 @@ public class DialogGetLink extends Dialog { public void onSuccess(InfoContactModel result) { vp.unmask(); if(result.getLogin().compareToIgnoreCase(AppControllerExplorer.myLogin)==0){ - vp.mask("Getting Folder Link... permissions granted"); - allowAccessToFolderLink(item.getIdentifier()); + String msg = DialogGetLink.this.setAsPublic?"Getting":"Removing"; + msg=msg+" Folder Link... permissions granted"; + vp.mask(msg); + allowAccessToFolderLink(item.getIdentifier(), DialogGetLink.this.setAsPublic); }else new MessageBoxAlert("Permission Denied", "You have not permission to get Folder Link, you must be owner or administrator to the folder", null); @@ -186,19 +192,26 @@ public class DialogGetLink extends Dialog { add(vp); } - - /** * Allow access to folder link. * * @param folderId the folder id + * @param setIsPublic the set is public */ - private void allowAccessToFolderLink(String folderId){ + protected void allowAccessToFolderLink(String folderId, final boolean setIsPublic){ - AppControllerExplorer.rpcWorkspaceService.markFolderAsPublicForFolderItemId(folderId, true, new AsyncCallback() { + AppControllerExplorer.rpcWorkspaceService.markFolderAsPublicForFolderItemId(folderId, setIsPublic, new AsyncCallback() { @Override public void onSuccess(PublicLink publicLink) { + + if(!setIsPublic && publicLink==null){ + DialogGetLink.this.hide(); + MessageBox.info("Folder Link Removed", "Folder Link to the folder: "+item.getName()+ " removed correctly", null); + AppControllerExplorer.getEventBus().fireEvent(new RefreshFolderEvent(item.getParentFileModel(), true, false, false)); + return; + } + vp.unmask(); txtCompleteURL.setValue(publicLink.getCompleteURL()); txtShortURL.setValue(publicLink.getShortURL()); @@ -217,8 +230,6 @@ public class DialogGetLink extends Dialog { new MessageBoxAlert("Error", caught.getMessage(), null); } }); - - } /**