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 e0a2a67..f99e22b 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 @@ -15,6 +15,8 @@ import com.google.gwt.i18n.client.NumberFormat; * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it */ public class ConstantsExplorer { + public static final String CLARIN_SWITCHBOARD_ENDPOINT = "https://weblicht.sfs.uni-tuebingen.de/clrs/#/d4science/"; + public static final String PARTHENOS_GATEWAY_HOST_NAME = "parthenos.d4science.org"; // public static final String FILE_SERVICE = GWT.getModuleBaseURL() + "fileservice"; public static final String RPC_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "rpcWorkspace"; @@ -44,7 +46,8 @@ public class ConstantsExplorer { public static final String MESSAGE_ADD_FOLDER = "New Folder"; public static final String MESSAGE_ADD_SHARED_FOLDER = "New Shared Folder"; public static final String MESSAGE_DATA_CATALOGUE_PUBLISH = "Publish on Catalogue"; - public static final String MESSAGE_THREDDS_PUBLISH = "Sync with Thredds"; + public static final String MESSAGE_THREDDS_PUBLISH = "Sync with THREDDS"; + public static final String MESSAGE_CLARIN_SWITCHBOARD = "Send to Switchboard"; public static final String MESSAGE_ADD = "Add"; public static final String MESSAGE_ADD_FOLDER_IN = "Create a new folder in: "; public static final String MESSAGE_ITEM_NAME = "Item Name"; diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/MyWindow.java b/src/main/java/org/gcube/portlets/user/workspace/client/MyWindow.java new file mode 100644 index 0000000..6249597 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/client/MyWindow.java @@ -0,0 +1,23 @@ +package org.gcube.portlets.user.workspace.client; + +import com.google.gwt.core.client.JavaScriptObject; + +public class MyWindow extends JavaScriptObject { + // All types that extend JavaScriptObject must have a protected, + // no-args constructor. + protected MyWindow() {} + + public final static native MyWindow open(String url, String target, String options) /*-{ + return $wnd.open(url, target, options); + }-*/; + + public final native void close() /*-{ + this.close(); + }-*/; + + public final native void setUrl(String url) /*-{ + if (this.location) { + this.location = url; + } + }-*/; + } \ No newline at end of file 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 d924774..b5456df 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 @@ -36,7 +36,8 @@ public enum WorkspaceOperation { FOLDER_LINK("FRL", "FRL"), // FOLDER LINK FOLDER_LINK_REMOVE("FPR", "FPR"), VERSIONING("VRN", "VRN"), // VERSIONING - EXECUTE_DM_TASK("EDT", "EDT"); //EXECUTE DM TASK + EXECUTE_DM_TASK("EDT", "EDT"), //EXECUTE DM TASK + SEND_TO_SWITCHBOARD("SDSB", "SDSB"); //SEND_TO_SWITCHBOARD private String id; // ID CONTEXT MENU private String name; 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 eae015d..97ac4b8 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 @@ -4,7 +4,9 @@ import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.ImageResource; public interface Icons extends ClientBundle { - + @Source("icons/CLARIN_SB.png") + ImageResource switchboard(); + @Source("icons/table.png") ImageResource table(); @@ -437,7 +439,7 @@ public interface Icons extends ClientBundle { /** * @return */ - @Source("icons/thredds.gif") + @Source("icons/THREDDS.png") ImageResource thredds(); /** 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 2fa6e17..6d64949 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 @@ -90,6 +90,16 @@ public class Resources { return AbstractImagePrototype.create(ICONS.datacataloguepublish()); } + + /** + * Gets the data catalogue publish. + * + * @return the data catalogue publish + */ + public static AbstractImagePrototype getIconSendToSwitchboard(){ + + return AbstractImagePrototype.create(ICONS.switchboard()); + } /** diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/CLARIN_SB.png b/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/CLARIN_SB.png new file mode 100644 index 0000000..4e10f86 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/CLARIN_SB.png differ diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/THREDDS.png b/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/THREDDS.png new file mode 100644 index 0000000..b8b8149 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/THREDDS.png differ diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/thredds.gif b/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/thredds.gif deleted file mode 100644 index 5f39482..0000000 Binary files a/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/thredds.gif and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/thredds.png b/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/thredds.png deleted file mode 100644 index a0e31c5..0000000 Binary files a/src/main/java/org/gcube/portlets/user/workspace/client/resources/icons/thredds.png and /dev/null 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 d6cb32a..7e7ddb3 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 @@ -6,6 +6,7 @@ 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.ConstantsExplorer.WS_UPLOAD_TYPE; +import org.gcube.portlets.user.workspace.client.MyWindow; import org.gcube.portlets.user.workspace.client.constant.WorkspaceOperation; import org.gcube.portlets.user.workspace.client.event.AccountingHistoryEvent; import org.gcube.portlets.user.workspace.client.event.AccountingReadersEvent; @@ -30,6 +31,7 @@ import org.gcube.portlets.user.workspace.client.event.PasteItemEvent; import org.gcube.portlets.user.workspace.client.event.PublishOnDataCatalogueEvent; 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.SessionExpiredEvent; import org.gcube.portlets.user.workspace.client.event.SyncWithThreddsCatalogueEvent; import org.gcube.portlets.user.workspace.client.event.UnShareFolderEvent; import org.gcube.portlets.user.workspace.client.event.VRESettingPermissionEvent; @@ -38,7 +40,11 @@ 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 org.gcube.portlets.user.workspace.client.util.FileModelUtils; +import org.gcube.portlets.user.workspace.client.util.RequestBuilderWorkspaceValidateItem; import org.gcube.portlets.user.workspace.client.view.tree.CutCopyAndPaste.OperationType; +import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxAlert; +import org.gcube.portlets.user.workspace.shared.PublicLink; +import org.gcube.portlets.user.workspace.shared.SessionExpiredException; import org.gcube.portlets.user.workspace.shared.WorkspaceVersioningOperation; import com.extjs.gxt.ui.client.event.MenuEvent; @@ -49,6 +55,8 @@ import com.extjs.gxt.ui.client.widget.menu.MenuItem; import com.extjs.gxt.ui.client.widget.menu.SeparatorMenuItem; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.http.client.RequestBuilder; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; /** @@ -65,7 +73,8 @@ public class ContextMenuTree { private MenuItem mnRead = new MenuItem(); private boolean hideSharing = false; - + //tells if you're on PARTHENOS Gateway or not + private boolean showCLARINSwitchBoardOption = false; /** * Instantiates a new context menu tree. */ @@ -73,7 +82,6 @@ public class ContextMenuTree { this.contextMenu.setWidth(200); this.listSelectedItems = new ArrayList(); createContextMenu(); - } @@ -81,6 +89,12 @@ public class ContextMenuTree { * Creates the context menu. */ private void createContextMenu() { + //PARTHENOS GATEWAY CASE Show CLARIN SwitchBoard + if (ConstantsExplorer.PARTHENOS_GATEWAY_HOST_NAME.compareToIgnoreCase(Window.Location.getHostName()) == 0) { + showCLARINSwitchBoardOption = true; + } + + //SPECIFIC OPERATION //Preview Image @@ -313,6 +327,36 @@ public class ContextMenuTree { }); contextMenu.add(createShareFolder); + //Add Url + MenuItem addUrl = new MenuItem(); + addUrl.setId(WorkspaceOperation.ADD_URL.getId()); + addUrl.setText(ConstantsExplorer.MESSAGE_ADD_URL); + addUrl.setIcon(Resources.getIconAddUrl()); + + addUrl.addSelectionListener(new SelectionListener() { + public void componentSelected(MenuEvent ce) { + + FileModel selected = listSelectedItems.get(0); + + FileModel parent = selected.getParentFileModel(); + if(parent==null){ + if(selected.isDirectory()){ + parent = selected; + } + } + //FileModel parent = getDirectoryOrParent(selected); + + if(parent!=null){ + eventBus.fireEvent(new CreateUrlEvent(null, parent)); + } + + } + }); + + contextMenu.add(addUrl); + contextMenu.add(new SeparatorMenuItem()); + + // publish on data catalogue MenuItem publishOnDataCatalogue = new MenuItem(); publishOnDataCatalogue.setId(WorkspaceOperation.PUBLISH_ON_DATA_CATALOGUE.getId()); @@ -349,7 +393,7 @@ public class ContextMenuTree { publishOnThredds.setVisible(false); contextMenu.add(publishOnThredds); - // publish on data catalogue + // executre DM task MenuItem executeDMTask = new MenuItem(); executeDMTask.setId(WorkspaceOperation.EXECUTE_DM_TASK.getId()); executeDMTask.setText(ConstantsExplorer.MESSAGE_EXECUTE_DM_TASK); @@ -367,6 +411,41 @@ public class ContextMenuTree { executeDMTask.setVisible(false); contextMenu.add(executeDMTask); + //send to Switchboard + MenuItem sendToSwitchboard = new MenuItem(); + sendToSwitchboard.setId(WorkspaceOperation.SEND_TO_SWITCHBOARD.getId()); + sendToSwitchboard.setText(ConstantsExplorer.MESSAGE_CLARIN_SWITCHBOARD); + sendToSwitchboard.setIcon(Resources.getIconSendToSwitchboard()); + + sendToSwitchboard.addSelectionListener(new SelectionListener() { + public void componentSelected(MenuEvent ce) { + FileModel sourceFileModel = listSelectedItems.get(0); + if (sourceFileModel != null) { + final MyWindow window = MyWindow.open(null, "_blank", null); + AppControllerExplorer.rpcWorkspaceService.getPublicLinkForFolderItemId(sourceFileModel.getIdentifier(), true, new AsyncCallback() { + @Override + public void onSuccess(PublicLink publicLink) { + String encodedURI = com.google.gwt.http.client.URL.encodeQueryString(publicLink.getCompleteURL()); + //Window.open(ConstantsExplorer.CLARIN_SWITCHBOARD_ENDPOINT+encodedURI,"_blank",""); + window.setUrl(ConstantsExplorer.CLARIN_SWITCHBOARD_ENDPOINT+encodedURI); + } + @Override + public void onFailure(Throwable caught) { + if(caught instanceof SessionExpiredException){ + GWT.log("Session expired"); + AppControllerExplorer.getEventBus().fireEvent(new SessionExpiredEvent()); + return; + } + new MessageBoxAlert("Error", caught.getMessage(), null); + window.close(); + } + }); + } + } + }); + sendToSwitchboard.setVisible(false); + contextMenu.add(sendToSwitchboard); + MenuItem editPermissions = new MenuItem(); editPermissions.setId(WorkspaceOperation.EDIT_PERMISSIONS.getId()); @@ -386,33 +465,6 @@ public class ContextMenuTree { contextMenu.add(editPermissions); - //Add Url - MenuItem addUrl = new MenuItem(); - addUrl.setId(WorkspaceOperation.ADD_URL.getId()); - addUrl.setText(ConstantsExplorer.MESSAGE_ADD_URL); - addUrl.setIcon(Resources.getIconAddUrl()); - - addUrl.addSelectionListener(new SelectionListener() { - public void componentSelected(MenuEvent ce) { - - FileModel selected = listSelectedItems.get(0); - - FileModel parent = selected.getParentFileModel(); - if(parent==null){ - if(selected.isDirectory()){ - parent = selected; - } - } - //FileModel parent = getDirectoryOrParent(selected); - - if(parent!=null){ - eventBus.fireEvent(new CreateUrlEvent(null, parent)); - } - - } - }); - - contextMenu.add(addUrl); contextMenu.add(new SeparatorMenuItem()); MenuItem copy = new MenuItem(); @@ -765,18 +817,6 @@ public class ContextMenuTree { contextMenu.showAt(posX, posY); } - - /** - * Prints the selected. - */ - private void printSelected(){ - - for (FileModel sel: listSelectedItems) { - GWT.log("selected " +sel.getName() ); - } - } - - /** * switch visible operation on context menu according to selected item. * @@ -891,7 +931,12 @@ public class ContextMenuTree { else{ contextMenu.getItemByItemId(WorkspaceOperation.SHOW.getId()).setVisible(true); contextMenu.getItemByItemId(WorkspaceOperation.EXECUTE_DM_TASK.getId()).setVisible(true); - + + /* + * we show the send to CLARIN SwitchBoard if and only if the file is a txt file and showCLARINSwitchBoardOption is true + */ + contextMenu.getItemByItemId(WorkspaceOperation.SEND_TO_SWITCHBOARD.getId()).setVisible(selectedItem.getName().endsWith(".txt") && showCLARINSwitchBoardOption); + switch(selectedItem.getGXTFolderItemType()){ case EXTERNAL_IMAGE: