From 43e62f42d5c1ab0708366e276f93bb5527c56308 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Mon, 26 Feb 2018 14:23:14 +0000 Subject: [PATCH] Uplaod Dataset/Mthod now use upload file from desktop instead from Workspace git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portal/sbd-uploadshare-portlet@164577 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 10 +-- .settings/org.eclipse.jdt.core.prefs | 6 +- ....eclipse.wst.common.project.facet.core.xml | 2 +- pom.xml | 4 +- .../user/sbdportlets/UploadDataset.java | 90 ++++++++++++++++++- src/main/webapp/WEB-INF/liferay-portlet.xml | 9 +- src/main/webapp/WEB-INF/portlet.xml | 33 ------- src/main/webapp/html/uploaddataset/view.jsp | 30 +++++-- src/main/webapp/js/main.js | 9 +- 9 files changed, 136 insertions(+), 57 deletions(-) diff --git a/.classpath b/.classpath index 0f4a4c2..3b073e7 100644 --- a/.classpath +++ b/.classpath @@ -17,16 +17,16 @@ - - - - - + + + + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 69c31cd..6e80039 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,8 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml index 594f2d0..8aa1623 100644 --- a/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -1,8 +1,8 @@ - + diff --git a/pom.xml b/pom.xml index f9a4284..c53989a 100644 --- a/pom.xml +++ b/pom.xml @@ -62,8 +62,8 @@ 2.5 UTF-8 - 1.6 - 1.6 + 1.8 + 1.8 diff --git a/src/main/java/org/gcube/portlets/user/sbdportlets/UploadDataset.java b/src/main/java/org/gcube/portlets/user/sbdportlets/UploadDataset.java index a525519..33a3564 100644 --- a/src/main/java/org/gcube/portlets/user/sbdportlets/UploadDataset.java +++ b/src/main/java/org/gcube/portlets/user/sbdportlets/UploadDataset.java @@ -1,6 +1,9 @@ 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; @@ -8,6 +11,8 @@ 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; @@ -17,11 +22,15 @@ 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; @@ -30,10 +39,15 @@ 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; @@ -49,7 +63,11 @@ import com.liferay.util.bridges.mvc.MVCPortlet; 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(); @@ -85,6 +103,76 @@ public class UploadDataset extends MVCPortlet { 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); + } +// Path written = Files.write(Paths.get(System.getProperty("catalina.home")+"/temp/"+fileName), FileUtil.getBytes(multipartFile)); +// System.out.println("Written File = " + written.toRealPath()); + 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); diff --git a/src/main/webapp/WEB-INF/liferay-portlet.xml b/src/main/webapp/WEB-INF/liferay-portlet.xml index 5d625e6..c115333 100644 --- a/src/main/webapp/WEB-INF/liferay-portlet.xml +++ b/src/main/webapp/WEB-INF/liferay-portlet.xml @@ -7,6 +7,9 @@ /icon.png false /css/main.css + + /js/jquery.min.js + /js/main.js @@ -49,12 +52,6 @@ access-application-portlet - - file-upload - /icon.png - /css/main.css - file-upload-portlet - administrator Administrator diff --git a/src/main/webapp/WEB-INF/portlet.xml b/src/main/webapp/WEB-INF/portlet.xml index 03f4de6..a61ec91 100644 --- a/src/main/webapp/WEB-INF/portlet.xml +++ b/src/main/webapp/WEB-INF/portlet.xml @@ -143,37 +143,4 @@ user - - file-upload - File Upload - - org.gcube.portlets.user.sbd.FileUpload - - - view-template - /html/fileupload/view.jsp - - 0 - - text/html - view - - - File Upload - File Upload - - - - administrator - - - guest - - - power-user - - - user - - \ No newline at end of file diff --git a/src/main/webapp/html/uploaddataset/view.jsp b/src/main/webapp/html/uploaddataset/view.jsp index 7a9b6f3..71c2a73 100644 --- a/src/main/webapp/html/uploaddataset/view.jsp +++ b/src/main/webapp/html/uploaddataset/view.jsp @@ -9,6 +9,8 @@ + + <% String wpExplorerId = "workspaceexplorerportlet_WAR_workspaceexplorerportlet"; %> @@ -49,6 +51,27 @@ + +  Back (Cancel)

@@ -72,11 +95,8 @@ - Additional Material: - - Select file to attach + Additional Material (max 3 files, allowed max size per file: 10 MB): +

Select file to attach
diff --git a/src/main/webapp/js/main.js b/src/main/webapp/js/main.js index a8ffae9..18f2bdf 100644 --- a/src/main/webapp/js/main.js +++ b/src/main/webapp/js/main.js @@ -19,7 +19,7 @@ function showWPPopup(url) { } -//handle the event from ws explorer +//handle the event from ws explorer (not used anymore) Liferay.on('getSelectedItem', function(event) { var id = event.id; var name = event.name; @@ -29,6 +29,13 @@ Liferay.on('getSelectedItem', function(event) { $("#attachedFiles").append(chip); }); +function appendChip(name, id) { + var chip = $(''+ + name + ' '+ + ''); + $("#attachedFiles").append(chip); +} + function removeFromParent(el) { $(el).parent().remove(); }