diff --git a/.gitignore b/.gitignore index b83d222..e3d2422 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target/ +/.DS_Store diff --git a/CHANGELOG.md b/CHANGELOG.md index 9dbfbff..a590871 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [v1.2.0-SNAPSHOT] - 2021-12-17 -- Ported to git +- Task #22596 Ported to git and removed Home Library dep. ## [v1.0.0] - 2019-05-21 diff --git a/pom.xml b/pom.xml index 54df0d8..4b6d5bd 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ org.gcube.distribution maven-portal-bom - 3.6.3 + 3.6.3-SNAPSHOT pom import @@ -54,24 +54,29 @@ aslsocial provided + + org.gcube.common + storagehub-client-wrapper + [1.1.0-SNAPSHOT ,2.0.0-SNAPSHOT) + org.gcube.portal notifications-common-library provided - + org.gcube.common - home-library-jcr + authorization-client provided org.gcube.common - home-library + common-authorization provided - org.gcube.portal - social-networking-library + org.gcube.core + common-encryption provided diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..9bb88d3 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1 @@ +/.DS_Store diff --git a/src/main/.gitignore b/src/main/.gitignore new file mode 100644 index 0000000..9bb88d3 --- /dev/null +++ b/src/main/.gitignore @@ -0,0 +1 @@ +/.DS_Store diff --git a/src/main/java/.gitignore b/src/main/java/.gitignore new file mode 100644 index 0000000..9bb88d3 --- /dev/null +++ b/src/main/java/.gitignore @@ -0,0 +1 @@ +/.DS_Store diff --git a/src/main/java/org/.gitignore b/src/main/java/org/.gitignore new file mode 100644 index 0000000..9bb88d3 --- /dev/null +++ b/src/main/java/org/.gitignore @@ -0,0 +1 @@ +/.DS_Store diff --git a/src/main/java/org/gcube/.gitignore b/src/main/java/org/gcube/.gitignore new file mode 100644 index 0000000..9bb88d3 --- /dev/null +++ b/src/main/java/org/gcube/.gitignore @@ -0,0 +1 @@ +/.DS_Store diff --git a/src/main/java/org/gcube/portlets/.gitignore b/src/main/java/org/gcube/portlets/.gitignore new file mode 100644 index 0000000..9bb88d3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/.gitignore @@ -0,0 +1 @@ +/.DS_Store diff --git a/src/main/java/org/gcube/portlets/user/.gitignore b/src/main/java/org/gcube/portlets/user/.gitignore new file mode 100644 index 0000000..9bb88d3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/.gitignore @@ -0,0 +1 @@ +/.DS_Store diff --git a/src/main/java/org/gcube/portlets/user/sbdportlets/.gitignore b/src/main/java/org/gcube/portlets/user/sbdportlets/.gitignore new file mode 100644 index 0000000..9bb88d3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sbdportlets/.gitignore @@ -0,0 +1 @@ +/.DS_Store diff --git a/src/main/java/org/gcube/portlets/user/sbdportlets/CollaborateWithUs.java b/src/main/java/org/gcube/portlets/user/sbdportlets/CollaborateWithUs.java deleted file mode 100644 index 1b8876c..0000000 --- a/src/main/java/org/gcube/portlets/user/sbdportlets/CollaborateWithUs.java +++ /dev/null @@ -1,271 +0,0 @@ -package org.gcube.portlets.user.sbdportlets; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.portlet.ActionRequest; -import javax.portlet.ActionResponse; -import javax.portlet.PortletException; -import javax.portlet.ResourceRequest; -import javax.portlet.ResourceResponse; -import javax.servlet.http.HttpServletRequest; - -import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager; -import org.gcube.applicationsupportlayer.social.NotificationsManager; -import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite; -import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser; -import org.gcube.common.authorization.library.provider.SecurityTokenProvider; -import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; -import org.gcube.common.homelibrary.home.HomeLibrary; -import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.Workspace; -import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; -import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException; -import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; -import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; -import org.gcube.common.homelibrary.util.WorkspaceUtil; -import org.gcube.common.portal.PortalContext; -import org.gcube.common.scope.api.ScopeProvider; -import org.gcube.portal.notifications.bean.GenericItemBean; -import org.gcube.portal.notifications.thread.MessageNotificationsThread; -import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager; -import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager; -import org.gcube.vomanagement.usermanagement.model.GCubeUser; - -import com.liferay.portal.kernel.json.JSONFactoryUtil; -import com.liferay.portal.kernel.json.JSONObject; -import com.liferay.portal.kernel.log.Log; -import com.liferay.portal.kernel.log.LogFactoryUtil; -import com.liferay.portal.kernel.servlet.SessionErrors; -import com.liferay.portal.kernel.servlet.SessionMessages; -import com.liferay.portal.kernel.upload.FileItem; -import com.liferay.portal.kernel.upload.UploadPortletRequest; -import com.liferay.portal.kernel.util.FileUtil; -import com.liferay.portal.kernel.util.ParamUtil; -import com.liferay.portal.kernel.util.WebKeys; -import com.liferay.portal.model.User; -import com.liferay.portal.theme.ThemeDisplay; -import com.liferay.portal.util.PortalUtil; -import com.liferay.util.bridges.mvc.MVCPortlet; - -/** - * upload method/dataset: UserUpload Admin -- Share idea: UserIdea Admin - * Portlet implementation class CollaborateWithUs - */ -public class CollaborateWithUs extends MVCPortlet { - private static Log _log = LogFactoryUtil.getLog(CollaborateWithUs.class); - private static String SHARE_IDEA_ROLE_MANAGER_NAME = "UserIdea-Admin"; - private final static String UPLOADED_FILE_ATTR_NAME = "myfile"; - //make sure in the jsp there's - private final static String RESOURCE_URL_ID = "uploadFiles"; - public static final String ATTACHMENT_FOLDER ="_shared attachments"; - - private LiferayRoleManager roleManager = new LiferayRoleManager(); - private LiferayUserManager userManager = new LiferayUserManager(); - - public void addIdea(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException { - try{ - User currentUser = (User) actionRequest.getAttribute(WebKeys.USER); - ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); - long groupId = themeDisplay.getLayout().getGroupId(); - String experiment_name = ParamUtil.getString(actionRequest, "experiment_name"); - String people_institutions = ParamUtil.getString(actionRequest, "people_institutions"); - String theAbstract = ParamUtil.getString(actionRequest, "abstract"); - String experiment_tags = ParamUtil.getString(actionRequest, "experiment_tags"); - String[] attachmentIds = ParamUtil.getParameterValues(actionRequest, "selected-attachment"); - for (int i = 0; i < attachmentIds.length; i++) { - _log.debug(i+"id="+attachmentIds[i]); - } - - SessionMessages.add(actionRequest.getPortletSession(), "method-form-success"); - - _log.debug("new experiment shared: " + experiment_name); - SessionMessages.add(actionRequest.getPortletSession(), "experiment-form-success"); - - - long teamId = roleManager.getTeam(groupId, SHARE_IDEA_ROLE_MANAGER_NAME).getTeamId(); - List theManagers = userManager.listUsersByTeam(teamId); - HttpServletRequest request = PortalUtil.getHttpServletRequest(actionRequest); - boolean result = sendNotificationToUser(request, groupId, currentUser, theManagers, - experiment_name, people_institutions, theAbstract, attachmentIds, experiment_tags); - if (result) - actionResponse.setRenderParameter("mvcPath", "/html/collaboratewithus/view-experiment-inserted.jsp"); - else - actionResponse.setRenderParameter("mvcPath", "/html/collaboratewithus/view-experiment-error.jsp"); - } catch(Exception e){ - SessionErrors.add(actionRequest.getPortletSession(),"experiment-form-error"); - e.printStackTrace(); - } - } - - - @Override - public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws PortletException, IOException { - String resourceID = resourceRequest.getResourceID(); - if (resourceID.equals(RESOURCE_URL_ID)) { - UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(resourceRequest); - File multipartFile = uploadRequest.getFile(UPLOADED_FILE_ATTR_NAME); - - FileItem[] items = uploadRequest.getMultipartParameterMap().get(UPLOADED_FILE_ATTR_NAME); - String fileName = ""; - String contentType = ""; - for (int i = 0; i < items.length; i++) { - fileName = items[i].getFileName(); - contentType = items[i].getContentType(); - System.out.println(fileName); - System.out.println(contentType); - } - JSONObject fileObject = JSONFactoryUtil.createJSONObject(); - try { - Workspace workspace = getWorkspace(uploadRequest); - String wsItemId = uploadToUserWorkspace(workspace, fileName, contentType, new ByteArrayInputStream(FileUtil.getBytes(multipartFile))); - fileObject.put("itemId", wsItemId); - fileObject.put("fileName", fileName); - } catch (Exception e) { - _log.error("There was an error uploading the file " + fileName, e); - } - - resourceResponse.getWriter().println(fileObject); - } else { - _log.debug("nothing to do"); - } - } - /** - * - * @param uploadRequest is the XHR http servlet request - * @return - * @throws Exception - */ - private Workspace getWorkspace(UploadPortletRequest uploadRequest ) throws Exception { - Workspace workspace; - try{ - PortalContext pContext = PortalContext.getConfiguration(); - ScopeProvider.instance.set(pContext.getCurrentScope(uploadRequest)); - workspace = HomeLibrary.getUserWorkspace(pContext.getCurrentUser(uploadRequest).getUsername()); - }catch(InternalErrorException | HomeNotFoundException | WorkspaceFolderNotFoundException e){ - String msg = "Sorry, an error occurred when retrieving workspace item, Refresh an try again"; - _log.error("HL error: ",e); - throw new Exception(msg); - } - return workspace; - } - - private String uploadToUserWorkspace(Workspace ownerWS, String fileName, String mimeType,InputStream fileData) throws Exception { - WorkspaceFolder attachment = null; - try{ - attachment = (WorkspaceFolder) ownerWS.getItemByPath(ownerWS.getRoot().getPath() + "/" + ATTACHMENT_FOLDER); - } catch (ItemNotFoundException e) { - _log.info(ATTACHMENT_FOLDER + " Workspace Folder does not exists, creating it "); - attachment = ownerWS.getRoot().createFolder(ATTACHMENT_FOLDER, "Folder created automatically by the System"); - } - String itemName = WorkspaceUtil.getUniqueName(fileName, attachment); - FolderItem item = WorkspaceUtil.createExternalFile(attachment, itemName, "File created automatically by the System", mimeType, fileData); - String toReturn = item.getId(); - _log.debug("Uploaded " + item.getName() + " - Returned Workspace id=" +toReturn); - return toReturn; - } - - - private boolean sendNotificationToUser(HttpServletRequest request, long groupId, User currentUser, List theManagers - , String experiment_name, String people_institutions, String theAbstract, String[] attachmentIds, String experiment_tags) throws Exception { - String scope = PortalContext.getConfiguration().getCurrentScope(""+groupId); - _log.info("sendNotificationToUser Scope: " + scope); - - String authorizationToken = PortalContext.getConfiguration().getCurrentUserToken(scope, currentUser.getScreenName()); - ScopeProvider.instance.set(scope); - SecurityTokenProvider.instance.set(authorizationToken); - Workspace workspace = HomeLibrary.getUserWorkspace(currentUser.getScreenName()); - - List recipientIds = new ArrayList(); - List recipients = new ArrayList(); - for (GCubeUser addressee : theManagers) { - recipients.add(new GenericItemBean(addressee.getUsername(), addressee.getUsername(), addressee.getFullname(), "")); - recipientIds.add(addressee.getUsername()); - } - - String subject = "A new user shared an idea"; - StringBuilder sb = new StringBuilder("Hi, the following idea was shared by ").append(currentUser.getFullName()) - .append(" (").append(currentUser.getEmailAddress()).append(").") - .append("\n\n").append("Experiment name: ").append(experiment_name).append("\n") - .append("\n").append("Involved people and or institutions: ").append(people_institutions).append("\n") - .append("\n").append("Abstract:\n").append(theAbstract).append("\n") - .append("\n").append("Keywords (Comma separated): ").append(experiment_tags).append("\n"); - - List attachmentsList = Arrays.asList(attachmentIds); - String body = sb.toString(); - try { - body += getPublicLinksForAttachs(workspace, attachmentsList); - } - catch (Exception e) { - _log.error("Ops, could not generate publick link for some of the attachments"); - } - String messageId = - workspace.getWorkspaceMessageManager(). - sendMessageToPortalLogins(subject, body, attachmentsList, recipientIds); - - _log.info("Sending upload method message notification to: " + recipientIds.toString()); - NotificationsManager nm = new ApplicationNotificationsManager(new SocialNetworkingSite(request), scope, new SocialNetworkingUser( - currentUser.getScreenName(), currentUser.getEmailAddress(), currentUser.getFullName(), "")); - Thread thread = new Thread(new MessageNotificationsThread(recipients, messageId, subject, body, nm)); - thread.start(); - - return (messageId != null); - } - - /** - * - * @param workspace - * @param listAttachmentsId - * @return - * @throws ItemNotFoundException - * @throws InternalErrorException - */ - private String getPublicLinksForAttachs(Workspace workspace, List listAttachmentsId) throws ItemNotFoundException, InternalErrorException{ - - if (listAttachmentsId != null && (!listAttachmentsId.isEmpty()) ) { - List attachments = new ArrayList(); - for (String itemId : listAttachmentsId) { - attachments.add(workspace.getItem(itemId)); - } - - StringBuilder builder = new StringBuilder(); - - if(attachments!=null && attachments.size() > 0){ - builder.append("\n\n\nThe following "); - String msg = attachments.size()>1?"files were attached to this message:":"file was attached to this message:"; - builder.append(msg+"\n"); - for (WorkspaceItem workspaceItem : attachments) { - - if(workspaceItem.getType().equals(WorkspaceItemType.FOLDER_ITEM)) { - FolderItem folderItem = (FolderItem) workspaceItem; - String publicLink = ""; - String itemName = ""; - try { - itemName = workspaceItem.getName(); - publicLink = folderItem.getPublicLink(true); - } - catch (InternalErrorException e) { - _log.warn("An error occurred when creating public link for attachment, skipping file: " + itemName); - return ""; - } - builder.append(itemName + " ("+publicLink+")"); - builder.append("\n"); - } - } - _log.debug("returning public links: "+builder.toString()); - return builder.toString(); - } - else return ""; - } - else return ""; - } - -} diff --git a/src/main/java/org/gcube/portlets/user/sbdportlets/UploadDataset.java b/src/main/java/org/gcube/portlets/user/sbdportlets/UploadDataset.java deleted file mode 100644 index 57f8281..0000000 --- a/src/main/java/org/gcube/portlets/user/sbdportlets/UploadDataset.java +++ /dev/null @@ -1,268 +0,0 @@ -package org.gcube.portlets.user.sbdportlets; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.portlet.ActionRequest; -import javax.portlet.ActionResponse; -import javax.portlet.PortletException; -import javax.portlet.ResourceRequest; -import javax.portlet.ResourceResponse; -import javax.servlet.http.HttpServletRequest; - -import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager; -import org.gcube.applicationsupportlayer.social.NotificationsManager; -import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite; -import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser; -import org.gcube.common.authorization.library.provider.SecurityTokenProvider; -import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; -import org.gcube.common.homelibrary.home.HomeLibrary; -import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.Workspace; -import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; -import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException; -import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; -import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; -import org.gcube.common.homelibrary.util.WorkspaceUtil; -import org.gcube.common.portal.PortalContext; -import org.gcube.common.scope.api.ScopeProvider; -import org.gcube.portal.notifications.bean.GenericItemBean; -import org.gcube.portal.notifications.thread.MessageNotificationsThread; -import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager; -import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager; -import org.gcube.vomanagement.usermanagement.model.GCubeUser; - -import com.liferay.portal.kernel.json.JSONFactoryUtil; -import com.liferay.portal.kernel.json.JSONObject; -import com.liferay.portal.kernel.log.Log; -import com.liferay.portal.kernel.log.LogFactoryUtil; -import com.liferay.portal.kernel.servlet.SessionErrors; -import com.liferay.portal.kernel.servlet.SessionMessages; -import com.liferay.portal.kernel.upload.FileItem; -import com.liferay.portal.kernel.upload.UploadPortletRequest; -import com.liferay.portal.kernel.util.FileUtil; -import com.liferay.portal.kernel.util.ParamUtil; -import com.liferay.portal.kernel.util.WebKeys; -import com.liferay.portal.model.User; -import com.liferay.portal.theme.ThemeDisplay; -import com.liferay.portal.util.PortalUtil; -import com.liferay.util.bridges.mvc.MVCPortlet; - -/** - * upload method/dataset: UserUpload Admin -- Share idea: UserIdea Admin - * Portlet implementation class UploadDataset - */ -public class UploadDataset extends MVCPortlet { - private static Log _log = LogFactoryUtil.getLog(UploadDataset.class); - private static String UPLOAD_DATASET_ROLE_MANAGER_NAME = "UserUpload-Admin"; - private final static String UPLOADED_FILE_ATTR_NAME = "myfile"; - //make sure in the jsp there's - private final static String RESOURCE_URL_ID = "uploadFiles"; - public static final String ATTACHMENT_FOLDER ="_shared attachments"; - - private LiferayRoleManager roleManager = new LiferayRoleManager(); - private LiferayUserManager userManager = new LiferayUserManager(); - - public void addExperiment(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException { - try{ - User currentUser = (User) actionRequest.getAttribute(WebKeys.USER); - ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); - long groupId = themeDisplay.getLayout().getGroupId(); - String method_name = ParamUtil.getString(actionRequest, "method_name"); - String people_institutions = ParamUtil.getString(actionRequest, "people_institutions"); - String demo_tutorial = ParamUtil.getString(actionRequest, "demo_tutorial"); - String experiment_tags = ParamUtil.getString(actionRequest, "experiment_tags"); - String[] attachmentIds = ParamUtil.getParameterValues(actionRequest, "selected-attachment"); - for (int i = 0; i < attachmentIds.length; i++) { - System.out.println(i+"id="+attachmentIds[i]); - } - - _log.debug("new dataset_name : " + method_name); - SessionMessages.add(actionRequest.getPortletSession(), "method-form-success"); - - - long teamId = roleManager.getTeam(groupId, UPLOAD_DATASET_ROLE_MANAGER_NAME).getTeamId(); - List theManagers = userManager.listUsersByTeam(teamId); - HttpServletRequest request = PortalUtil.getHttpServletRequest(actionRequest); - boolean result = sendNotificationToUser( - request, groupId, currentUser, theManagers, method_name, people_institutions, demo_tutorial, attachmentIds, experiment_tags); - if (result) - actionResponse.setRenderParameter("mvcPath", "/html/uploaddataset/view-method-inserted.jsp"); - else - actionResponse.setRenderParameter("mvcPath", "/html/uploaddataset/view-method-error.jsp"); - }catch(Exception e){ - SessionErrors.add(actionRequest.getPortletSession(),"view-method-error"); - e.printStackTrace(); - } - } - - @Override - public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws PortletException, IOException { - String resourceID = resourceRequest.getResourceID(); - if (resourceID.equals(RESOURCE_URL_ID)) { - UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(resourceRequest); - File multipartFile = uploadRequest.getFile(UPLOADED_FILE_ATTR_NAME); - - FileItem[] items = uploadRequest.getMultipartParameterMap().get(UPLOADED_FILE_ATTR_NAME); - String fileName = ""; - String contentType = ""; - for (int i = 0; i < items.length; i++) { - fileName = items[i].getFileName(); - contentType = items[i].getContentType(); - System.out.println(fileName); - System.out.println(contentType); - } - JSONObject fileObject = JSONFactoryUtil.createJSONObject(); - try { - Workspace workspace = getWorkspace(uploadRequest); - String wsItemId = uploadToUserWorkspace(workspace, fileName, contentType, new ByteArrayInputStream(FileUtil.getBytes(multipartFile))); - fileObject.put("itemId", wsItemId); - fileObject.put("fileName", fileName); - } catch (Exception e) { - _log.error("There was an error uploading the file " + fileName, e); - } - - resourceResponse.getWriter().println(fileObject); - } else { - _log.debug("nothing to do"); - } - } - /** - * - * @param uploadRequest is the XHR http servlet request - * @return - * @throws Exception - */ - private Workspace getWorkspace(UploadPortletRequest uploadRequest ) throws Exception { - Workspace workspace; - try{ - PortalContext pContext = PortalContext.getConfiguration(); - ScopeProvider.instance.set(pContext.getCurrentScope(uploadRequest)); - workspace = HomeLibrary.getUserWorkspace(pContext.getCurrentUser(uploadRequest).getUsername()); - }catch(InternalErrorException | HomeNotFoundException | WorkspaceFolderNotFoundException e){ - String msg = "Sorry, an error occurred when retrieving workspace item, Refresh an try again"; - _log.error("HL error: ",e); - throw new Exception(msg); - } - return workspace; - } - - private String uploadToUserWorkspace(Workspace ownerWS, String fileName, String mimeType,InputStream fileData) throws Exception { - WorkspaceFolder attachment = null; - try{ - attachment = (WorkspaceFolder) ownerWS.getItemByPath(ownerWS.getRoot().getPath() + "/" + ATTACHMENT_FOLDER); - } catch (ItemNotFoundException e) { - _log.info(ATTACHMENT_FOLDER + " Workspace Folder does not exists, creating it "); - attachment = ownerWS.getRoot().createFolder(ATTACHMENT_FOLDER, "Folder created automatically by the System"); - } - String itemName = WorkspaceUtil.getUniqueName(fileName, attachment); - FolderItem item = WorkspaceUtil.createExternalFile(attachment, itemName, "File created automatically by the System", mimeType, fileData); - String toReturn = item.getId(); - _log.debug("Uploaded " + item.getName() + " - Returned Workspace id=" +toReturn); - return toReturn; - } - - - private boolean sendNotificationToUser(HttpServletRequest request, long groupId, User currentUser, List theManagers - , String method_name, String people_institutions, String demo_tutorial, String[] attachmentIds, String experiment_tags) throws Exception { - String scope = PortalContext.getConfiguration().getCurrentScope(""+groupId); - _log.info("sendNotificationToUser Scope: " + scope); - - String authorizationToken = PortalContext.getConfiguration().getCurrentUserToken(scope, currentUser.getScreenName()); - ScopeProvider.instance.set(scope); - SecurityTokenProvider.instance.set(authorizationToken); - Workspace workspace = HomeLibrary.getUserWorkspace(currentUser.getScreenName()); - - List recipientIds = new ArrayList(); - List recipients = new ArrayList(); - for (GCubeUser addressee : theManagers) { - recipients.add(new GenericItemBean(addressee.getUsername(), addressee.getUsername(), addressee.getFullname(), "")); - recipientIds.add(addressee.getUsername()); - } - - String subject = "A new user uploaded a method or dataset"; - StringBuilder sb = new StringBuilder("Hi, the following dataset/method was shared by ").append(currentUser.getFullName()) - .append(" (").append(currentUser.getEmailAddress()).append(").") - .append("\n\n").append("Dataset/Method name: ").append(method_name).append("\n") - .append("\n").append("Involved people and or institutions: ").append(people_institutions).append("\n") - .append("\n").append("Demo/Tutorial:\n").append(demo_tutorial).append("\n") - .append("\n").append("Keywords (Comma separated): ").append(experiment_tags).append("\n"); - - List attachmentsList = Arrays.asList(attachmentIds); - String body = sb.toString(); - try { - body += getPublicLinksForAttachs(workspace, attachmentsList); - } - catch (Exception e) { - _log.error("Ops, could not generate publick link for some of the attachments"); - } - String messageId = - workspace.getWorkspaceMessageManager(). - sendMessageToPortalLogins(subject, body, attachmentsList, recipientIds); - - _log.info("Sending upload method message notification to: " + recipientIds.toString()); - NotificationsManager nm = new ApplicationNotificationsManager(new SocialNetworkingSite(request), scope, new SocialNetworkingUser( - currentUser.getScreenName(), currentUser.getEmailAddress(), currentUser.getFullName(), "")); - Thread thread = new Thread(new MessageNotificationsThread(recipients, messageId, subject, body, nm)); - thread.start(); - - return (messageId != null); - } - - /** - * - * @param workspace - * @param listAttachmentsId - * @return - * @throws ItemNotFoundException - * @throws InternalErrorException - */ - private String getPublicLinksForAttachs(Workspace workspace, List listAttachmentsId) throws ItemNotFoundException, InternalErrorException{ - - if (listAttachmentsId != null && (!listAttachmentsId.isEmpty()) ) { - List attachments = new ArrayList(); - for (String itemId : listAttachmentsId) { - attachments.add(workspace.getItem(itemId)); - } - - StringBuilder builder = new StringBuilder(); - - if(attachments!=null && attachments.size() > 0){ - builder.append("\n\n\nThe following "); - String msg = attachments.size()>1?"files were attached to this message:":"file was attached to this message:"; - builder.append(msg+"\n"); - for (WorkspaceItem workspaceItem : attachments) { - - if(workspaceItem.getType().equals(WorkspaceItemType.FOLDER_ITEM)) { - FolderItem folderItem = (FolderItem) workspaceItem; - String publicLink = ""; - String itemName = ""; - try { - itemName = workspaceItem.getName(); - publicLink = folderItem.getPublicLink(true); - } - catch (InternalErrorException e) { - _log.warn("An error occurred when creating public link for attachment, skipping file: " + itemName); - return ""; - } - builder.append(itemName + " ("+publicLink+")"); - builder.append("\n"); - } - } - _log.debug("returning public links: "+builder.toString()); - return builder.toString(); - } - else return ""; - } - else return ""; - } - -} diff --git a/src/main/java/org/gcube/portlets/user/vremanagement/RequestVRE.java b/src/main/java/org/gcube/portlets/user/vremanagement/RequestVRE.java index b59bbfe..2cbc1e7 100644 --- a/src/main/java/org/gcube/portlets/user/vremanagement/RequestVRE.java +++ b/src/main/java/org/gcube/portlets/user/vremanagement/RequestVRE.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.List; import javax.portlet.ActionRequest; @@ -21,19 +22,18 @@ import org.gcube.applicationsupportlayer.social.NotificationsManager; import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite; import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; -import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; -import org.gcube.common.homelibrary.home.HomeLibrary; -import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.Workspace; -import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; -import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException; -import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; -import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; -import org.gcube.common.homelibrary.util.WorkspaceUtil; import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.storagehub.client.plugins.AbstractPlugin; +import org.gcube.common.storagehub.client.proxies.MessageManagerClient; +import org.gcube.common.storagehub.model.items.FolderItem; +import org.gcube.common.storagehubwrapper.server.StorageHubWrapper; +import org.gcube.common.storagehubwrapper.server.tohl.Workspace; +import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder; +import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem; +import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItemType; +import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.InternalErrorException; +import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.ItemNotFoundException; import org.gcube.portal.notifications.bean.GenericItemBean; import org.gcube.portal.notifications.thread.MessageNotificationsThread; import org.gcube.vomanagement.usermanagement.exception.RoleRetrievalFault; @@ -162,37 +162,72 @@ public class RequestVRE extends MVCPortlet { _log.debug("nothing to do"); } } + /** * * @param uploadRequest is the XHR http servlet request * @return * @throws Exception */ - private Workspace getWorkspace(UploadPortletRequest uploadRequest ) throws Exception { - Workspace workspace; - try{ - PortalContext pContext = PortalContext.getConfiguration(); - ScopeProvider.instance.set(pContext.getCurrentScope(uploadRequest)); - workspace = HomeLibrary.getUserWorkspace(pContext.getCurrentUser(uploadRequest).getUsername()); - }catch(InternalErrorException | HomeNotFoundException | WorkspaceFolderNotFoundException e){ - String msg = "Sorry, an error occurred when retrieving workspace item, Refresh an try again"; - _log.error("HL error: ",e); - throw new Exception(msg); + public static Workspace getWorkspace(UploadPortletRequest uploadRequest) { + long userId; + String username = null; + try { + userId = PortalUtil.getUser(uploadRequest).getUserId(); + username = new LiferayUserManager().getUserById(userId).getUsername(); + } catch (Exception e) { + e.printStackTrace(); + } + + PortalContext pContext = PortalContext.getConfiguration(); + String context = pContext.getCurrentScope(uploadRequest); + ScopeProvider.instance.set(context); + String authorizationToken = PortalContext.getConfiguration().getCurrentUserToken(context, username); + SecurityTokenProvider.instance.set(authorizationToken); + ScopeProvider.instance.set(context); + try { + StorageHubWrapper wrap = new StorageHubWrapper(context, authorizationToken); + return wrap.getWorkspace(); + } + catch (Exception e) { + e.printStackTrace(); + return null; } - return workspace; } + /** + * + * @param currentUsername + * @param context + * @return + */ + public static Workspace getWorkspace(String currentUsername, String context) { + String username = currentUsername; + String authorizationToken = PortalContext.getConfiguration().getCurrentUserToken(context, username); + SecurityTokenProvider.instance.set(authorizationToken); + ScopeProvider.instance.set(context); + try { + StorageHubWrapper wrap = new StorageHubWrapper(context, authorizationToken); + return wrap.getWorkspace(); + } + catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + private String uploadToUserWorkspace(Workspace ownerWS, String fileName, String mimeType,InputStream fileData) throws Exception { WorkspaceFolder attachment = null; - try{ - attachment = (WorkspaceFolder) ownerWS.getItemByPath(ownerWS.getRoot().getPath() + "/" + ATTACHMENT_FOLDER); - } catch (ItemNotFoundException e) { + if (!ownerWS.exists(ATTACHMENT_FOLDER, ownerWS.getRoot().getId())) { _log.info(ATTACHMENT_FOLDER + " Workspace Folder does not exists, creating it "); - attachment = ownerWS.getRoot().createFolder(ATTACHMENT_FOLDER, "Folder created automatically by the System"); + attachment = ownerWS.createFolder(ATTACHMENT_FOLDER, "Folder created automatically by the System", ownerWS.getRoot().getId()); } - String itemName = WorkspaceUtil.getUniqueName(fileName, attachment); - FolderItem item = WorkspaceUtil.createExternalFile(attachment, itemName, "File created automatically by the System", mimeType, fileData); - String toReturn = item.getId(); + else { + attachment = (WorkspaceFolder) ownerWS.find(ATTACHMENT_FOLDER, ownerWS.getRoot().getId()).get(0); + } + WorkspaceItem item = ownerWS.uploadFile(attachment.getId(), fileData, fileName, "File created automatically by the System on " + new Date()); + String toReturn = item.getId(); _log.debug("Uploaded " + item.getName() + " - Returned Workspace id=" +toReturn); return toReturn; } @@ -200,13 +235,13 @@ public class RequestVRE extends MVCPortlet { private boolean sendNotificationToUser(HttpServletRequest request, long groupId, User currentUser, List theManagers , String vre_name, String theAbstract, String vreManagerName, String email, String[] attachmentIds) throws Exception { - String scope = PortalContext.getConfiguration().getCurrentScope(""+groupId); - _log.info("sendNotificationToUser Scope: " + scope); + String context = PortalContext.getConfiguration().getCurrentScope(""+groupId); + _log.info("sendNotificationToUser context: " + context); - String authorizationToken = PortalContext.getConfiguration().getCurrentUserToken(scope, currentUser.getScreenName()); - ScopeProvider.instance.set(scope); + String authorizationToken = PortalContext.getConfiguration().getCurrentUserToken(context, currentUser.getScreenName()); + ScopeProvider.instance.set(context); SecurityTokenProvider.instance.set(authorizationToken); - Workspace workspace = HomeLibrary.getUserWorkspace(currentUser.getScreenName()); + Workspace workspace = getWorkspace(currentUser.getScreenName(), context); List recipientIds = new ArrayList(); List recipients = new ArrayList(); @@ -231,12 +266,11 @@ public class RequestVRE extends MVCPortlet { catch (Exception e) { _log.error("Ops, could not generate publick link for some of the attachments"); } - String messageId = - workspace.getWorkspaceMessageManager(). - sendMessageToPortalLogins(subject, body, attachmentsList, recipientIds); - + + MessageManagerClient client = AbstractPlugin.messages().build(); + String messageId = client.sendMessage(recipientIds, subject, body, attachmentsList); _log.info("Sending new VRE Request message notification to: " + recipientIds.toString()); - NotificationsManager nm = new ApplicationNotificationsManager(new SocialNetworkingSite(request), scope, new SocialNetworkingUser( + NotificationsManager nm = new ApplicationNotificationsManager(new SocialNetworkingSite(request), context, new SocialNetworkingUser( currentUser.getScreenName(), currentUser.getEmailAddress(), currentUser.getFullName(), "")); Thread thread = new Thread(new MessageNotificationsThread(recipients, messageId, subject, body, nm)); thread.start(); @@ -249,17 +283,18 @@ public class RequestVRE extends MVCPortlet { * @param workspace * @param listAttachmentsId * @return + * @throws Exception * @throws ItemNotFoundException * @throws InternalErrorException */ - private String getPublicLinksForAttachs(Workspace workspace, List listAttachmentsId) throws ItemNotFoundException, InternalErrorException{ + private String getPublicLinksForAttachs(Workspace workspace, List listAttachmentsId) throws ItemNotFoundException, InternalErrorException, Exception { if (listAttachmentsId != null && (!listAttachmentsId.isEmpty()) ) { List attachments = new ArrayList(); for (String itemId : listAttachmentsId) { attachments.add(workspace.getItem(itemId)); } - + StringBuilder builder = new StringBuilder(); if(attachments!=null && attachments.size() > 0){ @@ -268,15 +303,15 @@ public class RequestVRE extends MVCPortlet { builder.append(msg+"\n"); for (WorkspaceItem workspaceItem : attachments) { - if(workspaceItem.getType().equals(WorkspaceItemType.FOLDER_ITEM)) { + if(workspaceItem.getType().equals(WorkspaceItemType.FILE_ITEM)) { FolderItem folderItem = (FolderItem) workspaceItem; String publicLink = ""; String itemName = ""; try { itemName = workspaceItem.getName(); - publicLink = folderItem.getPublicLink(true); - } - catch (InternalErrorException e) { + publicLink = workspace.getPublicLinkForFile(folderItem.getId()).toString(); + } + catch (Exception e) { _log.warn("An error occurred when creating public link for attachment, skipping file: " + itemName); return ""; } diff --git a/src/main/webapp/WEB-INF/liferay-display.xml b/src/main/webapp/WEB-INF/liferay-display.xml index 06e06c5..57b5ed5 100644 --- a/src/main/webapp/WEB-INF/liferay-display.xml +++ b/src/main/webapp/WEB-INF/liferay-display.xml @@ -2,13 +2,9 @@ - - - + - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-plugin-package.properties b/src/main/webapp/WEB-INF/liferay-plugin-package.properties index 60ffebf..d2493c6 100644 --- a/src/main/webapp/WEB-INF/liferay-plugin-package.properties +++ b/src/main/webapp/WEB-INF/liferay-plugin-package.properties @@ -1,6 +1,6 @@ name=SBD-UploadAndSharePortlets module-group-id=liferay -module-incremental-version=4 +module-incremental-version=6 tags= short-description= change-log= diff --git a/src/main/webapp/WEB-INF/liferay-portlet.xml b/src/main/webapp/WEB-INF/liferay-portlet.xml index 13678be..96eff67 100644 --- a/src/main/webapp/WEB-INF/liferay-portlet.xml +++ b/src/main/webapp/WEB-INF/liferay-portlet.xml @@ -2,34 +2,6 @@ - - upload-dataset - /icon.png - false - /css/main.css - - /js/jquery.min.js - - - /js/main.js - - upload-dataset-portlet - - - collaborate-with-us - /icon.png - false - /css/main.css - - /js/jquery.min.js - - - /js/main.js - - - collaborate-with-us-portlet - - access-exploratory /icon.png diff --git a/src/main/webapp/WEB-INF/portlet.xml b/src/main/webapp/WEB-INF/portlet.xml index 5864b29..2c60d65 100644 --- a/src/main/webapp/WEB-INF/portlet.xml +++ b/src/main/webapp/WEB-INF/portlet.xml @@ -1,72 +1,6 @@ - - upload-dataset - Upload your Method / Dataset - - org.gcube.portlets.user.sbdportlets.UploadDataset - - - view-template - /html/uploaddataset/view.jsp - - 0 - - text/html - view - - - Upload your Method / Dataset - Upload Dataset - - - - administrator - - - guest - - - power-user - - - user - - - - collaborate-with-us - Collaborate With Us - - org.gcube.portlets.user.sbdportlets.CollaborateWithUs - - - view-template - /html/collaboratewithus/view.jsp - - 0 - - text/html - view - - - Submit your Idea - Collaborate With Us - - - - administrator - - - guest - - - power-user - - - user - - access-exploratory Access Exploratory diff --git a/src/main/webapp/html/collaboratewithus/view-experiment-error.jsp b/src/main/webapp/html/collaboratewithus/view-experiment-error.jsp deleted file mode 100644 index fb11007..0000000 --- a/src/main/webapp/html/collaboratewithus/view-experiment-error.jsp +++ /dev/null @@ -1,29 +0,0 @@ -<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> -<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%> -<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%> -<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme"%> -<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%> -<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%> -<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%> -<%@page import="com.liferay.portal.model.User"%> -<%@page import="com.liferay.portal.kernel.util.WebKeys"%> - - - -<% -User currentUser = (User) request.getAttribute(WebKeys.USER); -%> - - - -

- Thank you - <%=currentUser.getFirstName()%>. There was an error submitting your request. Please report this issue. -

- - - Close and return to home -
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> -<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%> -<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%> -<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme"%> -<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%> -<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%> -<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%> -<%@page import="com.liferay.portal.model.User"%> -<%@page import="com.liferay.portal.kernel.util.WebKeys"%> - - - -<% -User currentUser = (User) request.getAttribute(WebKeys.USER); -%> - - - -

- Thank you - <%=currentUser.getFirstName()%>. We have been notified about your - request, will get back to you shortly. -

- - - Close and return to home -
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> -<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%> -<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%> -<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme"%> -<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%> -<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%> - - - - - -<% - if (SessionErrors.contains(renderRequest.getPortletSession(), "experiment-form-error")) { -%> - -<% - } -%> - - - - - - - - - - - - -
- -
-
- - - -  Back (Cancel) -

- Please give us a description about the dataset/method you want to - insert in the catalogue. The SoBigData research, technical and - ethical boards will evaluate your application before the actual - upload. In particular, in case of datasets, please visit also our First aid for - Responsible data Scientists: we provide resources and information to - understand and check possible ethical issues for your dataset. -

-
- - - - - - Additional Material (max 3 files, allowed max size per file: 10 MB): -
Select file to attach
-
- - - - Cancel - - -
-
-
- -
- - - diff --git a/src/main/webapp/html/requestvre/view-experiment-error.jsp b/src/main/webapp/html/requestvre/view-experiment-error.jsp index fb11007..fe1fa39 100644 --- a/src/main/webapp/html/requestvre/view-experiment-error.jsp +++ b/src/main/webapp/html/requestvre/view-experiment-error.jsp @@ -26,4 +26,3 @@ User currentUser = (User) request.getAttribute(WebKeys.USER);  Close and return to home -
 Close and return to home -
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> -<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%> -<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%> -<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme"%> -<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%> -<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%> -<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%> -<%@page import="com.liferay.portal.model.User"%> -<%@page import="com.liferay.portal.kernel.util.WebKeys"%> - - - -<% -User currentUser = (User) request.getAttribute(WebKeys.USER); -%> - - - -

- Thank you - <%=currentUser.getFirstName()%>. There was an error submitting your request. Please report this issue. -

- - - Close and return to home -
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> -<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%> -<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%> -<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme"%> -<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%> -<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%> -<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%> -<%@page import="com.liferay.portal.model.User"%> -<%@page import="com.liferay.portal.kernel.util.WebKeys"%> - - - -<% -User currentUser = (User) request.getAttribute(WebKeys.USER); -%> - - - -

- Thank you - <%=currentUser.getFirstName()%>. We have been notified about your - request, will get back to you shortly. -

- - - Close and return to home -
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> -<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%> -<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%> -<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme"%> -<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%> -<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%> -<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%> - - - - - -<% - String wpExplorerId = "workspaceexplorerportlet_WAR_workspaceexplorerportlet"; -%> - -<% - if (SessionErrors.contains(renderRequest.getPortletSession(), "dataset-form-error")) { -%> - -<% - } -%> - - - - - - - - - - -
- - - - -
- -
- -
- - - -  Back (Cancel) -

- Please give us a description about the dataset/method you want to - insert in the catalogue. The SoBigData research, technical and - ethical boards will evaluate your application before the actual - upload. In particular, in case of datasets, please visit also our First aid for - Responsible data Scientists: we provide resources and information to - understand and check possible ethical issues for your dataset. -

-
- - - - - Additional Material (max 3 files, allowed max size per file: 10 MB): -
Select file to attach
-
- - - - Cancel - - -

Please note: depending on the number of attachments it could - take some time (seconds) to submit the request.

-
-
-
- -
- - -