diff --git a/distro/changelog.xml b/distro/changelog.xml index 7323a16..37e9af8 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,4 +1,8 @@ + + [Feature #4128] Migration to Liferay 6.2 + Integrated with new workspace uploader diff --git a/pom.xml b/pom.xml index 4cd2595..cbf1d5c 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ org.gcube.portlets.user workspace-tree-widget - 6.12.0-SNAPSHOT + 6.13.0-SNAPSHOT gCube Workspace Tree Widget gCube Workspace Tree Widget is a widget to navigate and interact with gCube Workspace @@ -37,7 +37,7 @@ org.gcube.distribution maven-portal-bom - 2.6.0-SNAPSHOT + LATEST pom import @@ -62,14 +62,6 @@ provided - - - - - - - - com.google.gwt @@ -213,7 +205,6 @@ com.liferay.portal portal-service - 6.0.6 provided 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 9867884..436f918 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 @@ -274,12 +274,12 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt //IF NOT CANCELLED String clickedButton = be.getButtonClicked().getItemId(); if(clickedButton.equals(Dialog.YES)){ - + explorerPanel.getAsycTreePanel().mask(ConstantsExplorer.UNSHARING,ConstantsExplorer.LOADINGSTYLE); rpcWorkspaceService.unSharedFolderByFolderSharedId(folderIdentification, new AsyncCallback() { @Override public void onFailure(Throwable caught) { - + explorerPanel.getAsycTreePanel().unmask(); if(caught instanceof SessionExpiredException){ GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); @@ -292,6 +292,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt @Override public void onSuccess(Boolean result) { + explorerPanel.getAsycTreePanel().unmask(); if(result) //REFRESH PARENT FOLDER eventBus.fireEvent(new RefreshFolderEvent(source.getParentFileModel(), true, false, false)); 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 22e603b..cfc0813 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 @@ -14,18 +14,18 @@ import com.google.gwt.i18n.client.NumberFormat; * */ public class ConstantsExplorer { - + // public static final String FILE_SERVICE = GWT.getModuleBaseURL() + "fileservice"; public static final String RPC_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "rpcWorkspace"; public static final String UPLOAD_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "UploadService"; public static final String LOCAL_UPLOAD_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "LocalUploadService"; public static final String DOWNLOAD_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "DownloadService"; - + public static final String SERVER_ERROR = "Sorry, an error has occurred on the server when"; public static final String TRY_AGAIN = "Try again"; - + public static final int TIME_BULK_CREATOR_POLLING = 300*1000; //in milliseconds - + //MESSAGE DIALOG BOX constants public static final String MESSAGE_CONFIRM_DELETE_ITEM = "Are you sure you want to delete item"; public static final String MESSAGE_CONFIRM_DELETE_SMART_FOLDER = "Are you sure you want to delete smart folder"; @@ -87,27 +87,28 @@ public class ConstantsExplorer { public static final String TITLEACCESSWEBDAV = "Access from Desktop"; public static final String ACCESSWEBDAVMSG = "Files and folders can be managed directly from the file explorer of your desktop operating system."; public static final String MOVING = "Moving..."; - + protected static final String UNSHARING = "Unsharing..."; + public static final String FILEUPLOADHEADER = "File upload in: "; // public static final String FILE = "File"; // public static final String ARCHIVE = "Archive"; - + public static enum WS_UPLOAD_TYPE {File, Archive}; - + public static final String ERROR = "Error"; public static final String NOFILESPECIFIED = "No file specified"; public static final String PROGRESS = "Progress"; public static final String SAVINGYOURFILE = "Saving your file"; public static final String PREVIEWOF = "Preview of: "; - + public static final String ARCHIVEUPLOADHEADER = "Archive upload in: "; - + public static final String DIALOG_DESCRIPTION = "Description"; public static final String DIALOG_NAME = "Name"; public static final String DIALOG_URL = "Url"; public static final String ERRORURLNOTREACHABLE = "Error: url is not reachable!"; - + //FILE MODEL e Smart Folder constants public static final String ROOT = "root"; public static final String NAME = "Name"; @@ -122,7 +123,7 @@ public class ConstantsExplorer { public static final String ISDIRECTORY = "isDirectory"; public static final String SHAREUSERS = "shareUsers"; public static final String ISSHARED = "isShared"; - public static final String LASTMODIFIED = "lastModified"; + public static final String LASTMODIFIED = "lastModified"; public static final String DESCRIPTION = "description"; public static final String OWNER = "Owner"; public static final String OWNERFULLNAME = "Owner Name"; @@ -133,22 +134,22 @@ public class ConstantsExplorer { public static final String ISROOT = "ISROOT"; public static final String ISSHAREABLE = "ISSHAREABLE"; public static final String DIRECTORYDESCRIPTION = "DIRECTORYDESCRIPTION"; - - + + //GRID COLUMNS constants public static final String GRIDCOLUMNCREATIONDATE = "Creation Date"; public static final String SIZE = "Size"; public static final String EMPTY = "EMPTY"; - - + + public static Map operations = new HashMap(); - + //ID CONTEXT MENU IN GRID public static final String OPM = "OPM"; //Open message public static final String SVA = "SVA"; //Save attachs public static final String MESSAGE_SAVE_ATTACHS = "Save Attachments"; - + //Toolbar Item Name public static final String TREE = "Tree"; public static final String SMARTFOLDER = "Smart Folder"; @@ -164,7 +165,7 @@ public class ConstantsExplorer { //GRID COLUMN ADD CONTACT public static final String GRIDCOLUMNLOGIN = "Login"; - + public static final String SUBJECT = "Subject"; public static final String FROM = "From"; public static final String DATE = "Date"; @@ -174,13 +175,13 @@ public class ConstantsExplorer { public static final String LISTATTACHS = "ListAttachs"; public static final String TEXTMESS = "TextMess"; public static final String ISREAD = "IsRead"; - + //Message grid and context menu public static final String MESSAGE_GET_ALL_NEW_MESSAGES = "Get all new messages"; public static final String MESSAGE_MARK_AS_READ = "Mark as Read"; public static final String MESSAGE_MARK_AS_NOTREAD = "Mark as Not Read"; public static final String MESSAGE_DELETE_MESSAGE = "Delete Message"; - public static final String MESSAGE_FORWARD_MESSAGE = "Forward Message"; + public static final String MESSAGE_FORWARD_MESSAGE = "Forward Message"; public static final String MESSAGE_REPLY = "Reply"; public static final String MESSAGE_REPLY_ALL = "Reply All"; @@ -194,7 +195,7 @@ public class ConstantsExplorer { //USED IN ACCOUNTINGS public static final String ACCOUNTING_HISTORY_OF = "Accounting history of: "; public static final String ACCOUNTING_READERS_OF = "Accounting readers of: "; - + public static final NumberFormat numberFormatterKB = NumberFormat.getFormat("#,##0 KB;(#,##0 KB)"); //USED IN HTTP GET AS PARAMETER.. THIS PARAMS ARE REPLICATED IN THE CONSTANTS OF TREE WIDGET @@ -206,12 +207,12 @@ public class ConstantsExplorer { public static final WsPortletInitOperation DEFAULT_OPERATION = WsPortletInitOperation.gotofolder; public enum ViewSwitchType {Tree, SmartFolder, Messages}; - + //SERLVET ERROR public static final String ERROR_ITEM_DOES_NOT_EXIST = "Item does not exist. It may have been deleted by another user"; public static final String VALIDATEITEM = "validateitem"; public static final String REDIRECTONERROR = "redirectonerror"; - + //UPLOAD SERVLET PARAMETERS public static final String IS_OVERWRITE = "isOverwrite"; public static final String UPLOAD_TYPE = "uploadType"; @@ -221,7 +222,8 @@ public class ConstantsExplorer { //PROPERTY public static final String SPECIALFOLDERNAME = "SPECIALFOLDERNAME"; public static final String SPECIALFOLDERNAMEPROPERTIESFILE = "specialfoldername.properties"; - + public static final String MY_SPECIAL_FOLDERS = "MySpecialFolders"; + } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java index 2ee75bc..e26e686 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java @@ -83,7 +83,7 @@ import org.gcube.portlets.user.workspace.shared.WorkspaceACL; import org.gcube.portlets.user.workspace.shared.WorkspaceACL.USER_TYPE; import org.gcube.portlets.user.workspace.shared.accounting.GxtAccountingEntryType; import org.gcube.portlets.user.workspace.shared.accounting.GxtAccountingField; -import org.gcube.vomanagement.usermanagement.model.UserModel; +import org.gcube.vomanagement.usermanagement.model.GCubeUser; import com.thoughtworks.xstream.XStream; @@ -1459,7 +1459,7 @@ public class GWTWorkspaceBuilder { * @return the list * @throws InternalErrorException the internal error exception */ - public List buildGXTListContactsModelFromUserModel(List listUsers) throws InternalErrorException { + public List buildGXTListContactsModelFromUserModel(List listUsers) throws InternalErrorException { List listContactsModel = new ArrayList(); @@ -1469,7 +1469,7 @@ public class GWTWorkspaceBuilder { logger.trace("List size returned from Portal VO is: "+ listUsers.size()); logger.trace("Building list contact model list user model"); - for (UserModel userModel : listUsers) { + for (GCubeUser userModel : listUsers) { String fullName = userModel.getFullname(); if(fullName!=null && !fullName.isEmpty()) diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java index f209549..638865e 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java @@ -40,7 +40,6 @@ import org.gcube.common.homelibrary.home.workspace.search.SearchItem; import org.gcube.common.homelibrary.home.workspace.trash.WorkspaceTrashFolder; import org.gcube.common.homelibrary.home.workspace.trash.WorkspaceTrashItem; import org.gcube.common.scope.api.ScopeProvider; -import org.gcube.portal.custom.communitymanager.OrganizationsUtil; import org.gcube.portlets.user.workspace.client.ConstantsExplorer; import org.gcube.portlets.user.workspace.client.interfaces.GXTCategoryItemInterface; import org.gcube.portlets.user.workspace.client.model.FileDetailsModel; @@ -81,12 +80,13 @@ import org.gcube.portlets.user.workspace.shared.accounting.GxtAccountingField; import org.gcube.portlets.user.workspaceapplicationhandler.ApplicationReaderFromGenericResource; import org.gcube.vomanagement.usermanagement.GroupManager; import org.gcube.vomanagement.usermanagement.UserManager; -import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayGroupManager; -import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayUserManager; +import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException; +import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault; +import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager; +import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager; +import org.gcube.vomanagement.usermanagement.model.GCubeUser; import com.google.gwt.user.server.rpc.RemoteServiceServlet; -import com.liferay.portal.kernel.exception.PortalException; -import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.service.UserLocalServiceUtil; @@ -134,7 +134,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT */ protected NotificationsProducer getNotificationProducer(){ - return WsUtil.getNotificationProducer(WsUtil.getAslSession(this.getThreadLocalRequest().getSession())); + return WsUtil.getNotificationProducer(WsUtil.getAslSession(this.getThreadLocalRequest().getSession()), this.getThreadLocalRequest()); } /** @@ -863,7 +863,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT workspace.removeItem(itemId); //IF SOURCE SHARED FOLDER IS NOT NULL if(sourceFolderSharedId!=null) - NotificationsUtil.checkSendNotifyRemoveItemToShare(this.getThreadLocalRequest().getSession(), sourceItemIsShared, itemName, itemId, sourceFolderSharedId); + NotificationsUtil.checkSendNotifyRemoveItemToShare(this.getThreadLocalRequest(), this.getThreadLocalRequest().getSession(), sourceItemIsShared, itemName, itemId, sourceFolderSharedId); return Boolean.TRUE; @@ -1496,7 +1496,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT UserManager userManag = new LiferayUserManager(); GroupManager gm = new LiferayGroupManager(); - String groupId = gm.getRootVO().getGroupId(); + long groupId = gm.getRootVO().getGroupId(); workspaceLogger.trace("Liferay User Manager getting list users by group: "+groupId); List listContactsModel = builder.buildGXTListContactsModelFromUserModel(userManag.listUsersByGroup(groupId)); @@ -2435,7 +2435,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT workspaceLogger.trace("Check notification for "+item); //IF SOURCE SHARED FOLDER IS NOT NULL if(item.getSourceFolderSharedId()!=null) - NotificationsUtil.checkSendNotifyRemoveItemToShare(this.getThreadLocalRequest().getSession(), item.isSourceItemIsShared(), item.getOldItemName(), item.getOldItemName(), item.getSourceFolderSharedId()); + NotificationsUtil.checkSendNotifyRemoveItemToShare(this.getThreadLocalRequest(), this.getThreadLocalRequest().getSession(), item.isSourceItemIsShared(), item.getOldItemName(), item.getOldItemName(), item.getSourceFolderSharedId()); } return frontEndError; @@ -2661,14 +2661,17 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT if (isWithinPortal() && username.compareTo(WsUtil.TEST_USER) != 0) { - com.liferay.portal.model.UserModel user = null; try { - user = UserLocalServiceUtil.getUserByScreenName(OrganizationsUtil.getCompany().getCompanyId(), username); + LiferayUserManager l = new LiferayUserManager(); + GCubeUser user = l.getUserByUsername(username); firstName = user.getFirstName(); lastName = user.getLastName(); - email = user.getEmailAddress(); - } catch (PortalException | SystemException e) { - e.printStackTrace(); + email = user.getEmail(); + }catch (UserManagementSystemException e) { + workspaceLogger.error("UserManagementSystemException for username: "+username); + } + catch (UserRetrievalFault e) { + workspaceLogger.error("UserRetrievalFault for username: "+username); } } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java deleted file mode 100644 index 81525ff..0000000 --- a/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java +++ /dev/null @@ -1,500 +0,0 @@ -/** - * - */ -package org.gcube.portlets.user.workspace.server; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.Calendar; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.io.FilenameUtils; -import org.apache.log4j.Logger; -import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; -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.InsufficientPrivilegesException; -import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException; -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.exceptions.WrongDestinationException; -import org.gcube.common.homelibrary.home.workspace.exceptions.WrongItemTypeException; -import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; -import org.gcube.common.homelibrary.home.workspace.folder.items.Report; -import org.gcube.common.homelibrary.home.workspace.folder.items.ReportTemplate; -import org.gcube.common.homelibrary.util.Extensions; -import org.gcube.common.homelibrary.util.MimeTypeUtil; -import org.gcube.common.homelibrary.util.WorkspaceUtil; -import org.gcube.common.homelibrary.util.zip.UnzipUtil; -import org.gcube.portlets.user.workspace.client.ConstantsExplorer; -import org.gcube.portlets.user.workspace.server.notifications.NotificationsUtil; -import org.gcube.portlets.user.workspace.server.util.WsUtil; -import org.gcube.portlets.user.workspace.shared.HandlerResultMessage; - -/** - * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Jan 21, 2014 - * - */ -public class LocalUploadServlet extends HttpServlet { - - /** - * - */ - protected static final String UTF_8 = "UTF-8"; - - public static final String UPLOAD_TYPE = ConstantsExplorer.UPLOAD_TYPE; - - public static final String ID_FOLDER = ConstantsExplorer.ID_FOLDER; - - public static final String UPLOAD_FORM_ELEMENT = ConstantsExplorer.UPLOAD_FORM_ELEMENT; - - public static final String IS_OVERWRITE = ConstantsExplorer.IS_OVERWRITE; - - public static final String FILE = "File"; - - protected static Logger logger = Logger.getLogger(LocalUploadServlet.class); - - public static final String D4ST = Extensions.REPORT_TEMPLATE.getName(); //extension of Report Template type - public static final String D4SR = Extensions.REPORT.getName(); //extension of Report type - /** - * - */ - private static final long serialVersionUID = -4197748678713054285L; - - - /** - * {@inheritDoc} - */ - @Override - public void init() throws ServletException { - super.init(); - - logger.trace("Workspace "+LocalUploadServlet.class+" ready."); - } - - /** - * {@inheritDoc} - */ - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { -// System.out.println("GET on LocalUploadServlet"); - logger.trace("GET method in LocalUploadServlet is running"); - String absolutePathFile = ""; - String destinationId = ""; - String uploadType = ""; - boolean isOverwrite = false; - try{ - absolutePathFile = request.getParameter(UPLOAD_FORM_ELEMENT); - destinationId = request.getParameter(ID_FOLDER); - uploadType = request.getParameter(UPLOAD_TYPE); - isOverwrite = Boolean.parseBoolean(request.getParameter(IS_OVERWRITE)); - - }catch (Exception e) { - logger.error("Error processing GET parameters", e); - sendError(response, "Internal error: Error during request processing"); - return; - } - - uploadData(request, response, absolutePathFile, destinationId, uploadType, isOverwrite); - } - - /** - * {@inheritDoc} - */ - @SuppressWarnings("rawtypes") - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - logger.trace("POST method in LocalUploadServlet is running"); - String absolutePathFile = ""; - String destinationId = ""; - String uploadType = ""; - boolean isOverwrite = false; - try{ - - absolutePathFile = request.getParameter(UPLOAD_FORM_ELEMENT); - destinationId = request.getParameter(ID_FOLDER); - uploadType = request.getParameter(UPLOAD_TYPE); - isOverwrite = Boolean.parseBoolean(request.getParameter(IS_OVERWRITE)); - - }catch (Exception e) { - logger.error("Error processing POST parameters", e); - sendError(response, "Internal error: Error during request processing"); - return; - } - uploadData(request, response, absolutePathFile, destinationId, uploadType, isOverwrite); - } - - - - private void uploadData(HttpServletRequest request, HttpServletResponse response, String absolutePathFile, String destinationId,String uploadType,boolean isOverwrite) throws ServletException, IOException{ - - File file = null; - InputStream fileUploadIS = null; - - try { - logger.info("Upload servlet parameters: [uploadItem: "+absolutePathFile +", destinationId: "+destinationId +", uploadType: "+uploadType+", isOverwrite: "+isOverwrite+"]"); - - if(absolutePathFile==null || absolutePathFile.isEmpty()) - throw new FileUploadException("Absolute path is null or empty"); - - - file = new File(absolutePathFile); - - fileUploadIS = openInputStream(file); - - } catch (Exception e) { - logger.error("Error processing request in upload servlet", e); - sendError(response, "Internal error: Error during request processing"); - return; - } - - if (destinationId == null) { - logger.error("Error processing request in upload servlet: No destination folder id found"); - sendError(response, "Internal error: No destination folder id found"); - return; - } - - logger.trace("destination folder id: "+destinationId); - logger.trace("uploadType: "+uploadType); - - Workspace wa = null; - try { - wa = WsUtil.getWorkspace(request.getSession()); - } catch (Exception e) { - logger.error("Error during workspace retrieving", e); - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error processing request in upload servlet"); - return; - } - - if (wa == null) { - logger.error("Now workspace found in session"); - sendError(response, "Internal error: No workspace in session"); - return; - } - - WorkspaceItem item; - try { - item = wa.getItem(destinationId); - } catch (ItemNotFoundException e) { - logger.error("Error, no destination folder found", e); - sendError(response, "Internal error: No destination folder found"); - return; - } - - if (item.getType() != WorkspaceItemType.FOLDER && item.getType() != WorkspaceItemType.SHARED_FOLDER) { - logger.error("Error processing request in upload servlet: Wrong destination item"); - sendError(response, "Internal error: Wrong destination item"); - return; - } - - WorkspaceFolder destinationFolder = (WorkspaceFolder) item; - - try { - //we calculate an unique name for the current destination - String itemName = ""; - - if(!isOverwrite) - itemName = WorkspaceUtil.getUniqueName(file.getName(), destinationFolder); - else - itemName = file.getName(); - - String contentType = MimeTypeUtil.getMimeType(itemName, new BufferedInputStream(fileUploadIS)); - logger.trace("Content type (mime type): "+contentType + " unique name: "+itemName); - - String extension = FilenameUtils.getExtension(itemName); - logger.trace("extension: "+extension); - - if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD - - boolean isZipFile = MimeTypeUtil.isZipContentType(contentType); - - if(isZipFile && (extension.compareToIgnoreCase(D4ST)==0)){ //Create REPORT TEMPLATE - - String newItemName = itemName; - logger.trace("createTemplate: "+newItemName); - createTemplate(request.getSession(), wa, newItemName, openInputStream(file), destinationFolder, response, isOverwrite); - - }else if(isZipFile && (extension.compareToIgnoreCase(D4SR)==0)){ //Create REPORT - - String newItemName = itemName; - logger.trace("createReport: "+newItemName); - createReport(request.getSession(), wa, newItemName, openInputStream(file), destinationFolder, response, isOverwrite); - }else{ //CREATE AN EXTERNAL FILE - - createExternalFile(request.getSession(), wa, itemName, openInputStream(file), destinationFolder, contentType, response, isOverwrite); - } - - }else {//IS ARCHIVE UPLOAD - - if (MimeTypeUtil.isZipContentType(contentType)){ - logger.trace("Unziping content"); - UnzipUtil.unzip(destinationFolder, openInputStream(file), itemName); - - //TODO NOTIFY UPLOAD ARCHIVE - sendMessage(response, "Archive "+absolutePathFile+" imported correctly in "+destinationFolder.getPath()); - } else - createExternalFile(request.getSession(), wa, itemName, openInputStream(file), destinationFolder, contentType, response, isOverwrite); - } - - file.delete(); - } catch (InsufficientPrivilegesException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: Insufficient privileges"); - return; - } catch (InternalErrorException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: "+e.getMessage()); - return; - } catch (ItemAlreadyExistException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: An item with that name already exists"); - return; - }catch (Exception e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: An error occurred on uploading the file, try again later"); - return; - } - - } - - /** - * - * @param file - * @return - * @throws IOException - */ - public FileInputStream openInputStream(File file) throws IOException { - if (file.exists()) { - if (file.isDirectory()) { - throw new IOException("File '" + file - + "' exists but is a directory"); - } - if (file.canRead() == false) { - throw new IOException("File '" + file + "' cannot be read"); - } - } else { - throw new FileNotFoundException("File '" + file - + "' does not exist"); - } - return new FileInputStream(file); - } - - /** - * - * @param httpSession - * @param workspace - * @param itemId - * @param destinationFolderId - */ - private void notifyUploadInSharedFolder(final HttpSession httpSession, final Workspace workspace, final String itemId, final String destinationFolderId, final boolean isOverwrite){ - - new Thread(){ - public void run() { - WorkspaceItem sourceItem; - try { - sourceItem = workspace.getItem(itemId); - String sourceSharedId = sourceItem.getIdSharedFolder(); - WorkspaceItem folderDestinationItem = workspace.getItem(destinationFolderId); - NotificationsUtil.checkSendNotifyChangedItemToShare(httpSession, sourceItem, sourceSharedId, folderDestinationItem,isOverwrite); - } catch (Exception e) { - logger.error("Error in notifyUploadInSharedFolder", e); - } - }; - - }.start(); - } - - private void createExternalFile(HttpSession httpSession, Workspace wa, String itemName, InputStream uploadItem, WorkspaceFolder destinationFolder, String contentType, HttpServletResponse response, boolean isOverwrite) throws InternalErrorException, InsufficientPrivilegesException, ItemAlreadyExistException, IOException { - - FolderItem createdItem = null; - - if(!isOverwrite){ - //we need to recalculate the item name - itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder); - logger.trace("before calling createExternalFile - [itemName: "+itemName+", contentType: "+contentType+"]"); - createdItem = WorkspaceUtil.createExternalFile(destinationFolder, itemName, "", contentType, uploadItem); - if(createdItem!=null) - logger.info("Item "+createdItem.getName() + " uploaded correctly"); - } - else{ - createdItem = overwriteItem(wa, itemName, uploadItem, destinationFolder); //CASE OVERWRITE - if(createdItem!=null) - logger.info("Overwrite item "+createdItem.getName() + " uploaded correctly"); - } - - if(createdItem!=null){ - notifyUploadInSharedFolder(httpSession,wa,createdItem.getId(),destinationFolder.getId(), isOverwrite); - sendMessage(response, "File "+createdItem.getName()+" imported correctly in "+destinationFolder.getPath()); - } - else - sendError(response,"Internal error: Workspace Item Not Found"); - } - - - private FolderItem overwriteItem(Workspace wa, String itemName, InputStream fileData, WorkspaceFolder destinationFolder){ - - FolderItem overwriteItem = null; - - try { - logger.trace("case overwriting item.. "+itemName); - overwriteItem = (FolderItem) wa.find(itemName, destinationFolder.getId()); - logger.trace("overwriteItem item was found, id is: "+overwriteItem.getId()); - wa.updateItem(overwriteItem.getId(), fileData); - logger.trace("updateItem with id: "+overwriteItem.getId()+ ", is completed"); - } catch (ItemNotFoundException e) { - logger.error("Error in createExternalFile, ItemNotFoundException", e); - } catch (WrongItemTypeException e) { - logger.error("Error in createExternalFile, WrongItemTypeException", e); - } catch (WorkspaceFolderNotFoundException e) { - logger.error("Error in createExternalFile, WorkspaceFolderNotFoundException", e); - } catch (WrongDestinationException e) { - logger.error("Error in createExternalFile, WrongDestinationException", e); - } catch (InsufficientPrivilegesException e) { - logger.error("Error in createExternalFile, InsufficientPrivilegesException", e); - } catch (ItemAlreadyExistException e) { - logger.error("Error in createExternalFile, ItemAlreadyExistException", e); - } catch (InternalErrorException e) { - logger.error("Error in createExternalFile, InternalErrorException", e); - }catch (Exception e) { - logger.error("Error in createExternalFile, Exception", e); - } - - return overwriteItem; - - } - - - private void createReport(HttpSession httpSession, Workspace wa, String itemName, InputStream stream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{ - - try { - - Report report = null; - - if(!isOverwrite){ - itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder); - report = wa.createReport(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", "", 0, "", stream, destinationFolder.getId()); - - notifyUploadInSharedFolder(httpSession,wa,report.getId(),destinationFolder.getId(), isOverwrite); - sendMessage(response, "File "+report.getName()+" imported correctly in "+destinationFolder.getPath()); - } - else{ //CASE OVERWRITE - FolderItem rep = overwriteItem(wa, itemName, stream, destinationFolder); - - if(rep!=null){ - - notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite); - sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath()); - } - else - sendError(response,"Internal error: Workspace Item Not Found"); - } - } catch (WrongDestinationException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: Wrong Destination"); - } catch (WorkspaceFolderNotFoundException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: Workspace Folder Not Found"); - } - - } - - private void createTemplate(HttpSession httpSession, Workspace wa, String itemName, InputStream stream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{ - - try { - - ReportTemplate template = null; - - if(!isOverwrite){ - itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder); - template = wa.createReportTemplate(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", 0, "", stream, destinationFolder.getId()); - - notifyUploadInSharedFolder(httpSession,wa,template.getId(),destinationFolder.getId(), isOverwrite); - sendMessage(response, "File "+template.getName()+" imported correctly in "+destinationFolder.getPath()); - - }else{ //CASE OVERWRITE - FolderItem rep = overwriteItem(wa, itemName, stream, destinationFolder); - - if(rep!=null){ - - notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite); - sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath()); - } - else - sendError(response,"Internal error: Workspace Item Not Found"); - } - - } catch (WrongDestinationException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: Wrong Destination"); - } catch (WorkspaceFolderNotFoundException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: Workspace Folder Not Found"); - } - - } - - - protected void sendError(HttpServletResponse response, String message) throws IOException{ - try { - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message); - response.getWriter().write(resultMessage.toString()); - //5.6 Closure of Response Object: - //When a response is closed, the container must immediately flush all remaining content in the response buffer to the client -// response.flushBuffer(); - } catch (IOException e){ - logger.warn("IOException class name: "+e.getClass().getSimpleName()); - if (e.getClass().getSimpleName().equals("ClientAbortException")) - logger.warn("Skipping ClientAbortException: "+e.getMessage()); - else - throw e; //Sending Exceptions - } - } - - protected void sendMessage(HttpServletResponse response, String message) throws IOException{ - try { - response.setStatus(HttpServletResponse.SC_ACCEPTED); - HandlerResultMessage resultMessage = HandlerResultMessage.okResult(message); - response.getWriter().write(resultMessage.toString()); - //5.6 Closure of Response Object: - //When a response is closed, the container must immediately flush all remaining content in the response buffer to the client -// response.flushBuffer(); - } catch (IOException e){ - logger.warn("IOException class name: "+e.getClass().getSimpleName()); - if (e.getClass().getSimpleName().equals("ClientAbortException")) - logger.warn("Skipping ClientAbortException: "+e.getMessage()); - else - throw e; //Sending Exceptions - } - } - - protected void sendWarnMessage(HttpServletResponse response, String message) throws IOException{ - try { - response.setStatus(HttpServletResponse.SC_ACCEPTED); - HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message); - response.getWriter().write(resultMessage.toString()); - //5.6 Closure of Response Object: - //When a response is closed, the container must immediately flush all remaining content in the response buffer to the client -// response.flushBuffer(); - } catch (IOException e){ - logger.warn("IOException class name: "+e.getClass().getSimpleName()); - if (e.getClass().getSimpleName().equals("ClientAbortException")) - logger.warn("Skipping ClientAbortException: "+e.getMessage()); - else - throw e; //Sending Exceptions - } - } -} diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java deleted file mode 100644 index c9a8196..0000000 --- a/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java +++ /dev/null @@ -1,470 +0,0 @@ -/** - * - */ -package org.gcube.portlets.user.workspace.server; - -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Calendar; -import java.util.Iterator; -import java.util.List; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileItemFactory; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.commons.io.FilenameUtils; -import org.apache.log4j.Logger; -import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; -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.InsufficientPrivilegesException; -import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException; -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.exceptions.WrongDestinationException; -import org.gcube.common.homelibrary.home.workspace.exceptions.WrongItemTypeException; -import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; -import org.gcube.common.homelibrary.home.workspace.folder.items.Report; -import org.gcube.common.homelibrary.home.workspace.folder.items.ReportTemplate; -import org.gcube.common.homelibrary.util.Extensions; -import org.gcube.common.homelibrary.util.MimeTypeUtil; -import org.gcube.common.homelibrary.util.WorkspaceUtil; -import org.gcube.common.homelibrary.util.zip.UnzipUtil; -import org.gcube.portlets.user.workspace.client.ConstantsExplorer; -import org.gcube.portlets.user.workspace.server.notifications.NotificationsUtil; -import org.gcube.portlets.user.workspace.server.util.WsUtil; -import org.gcube.portlets.user.workspace.shared.HandlerResultMessage; - -/** - * @author Federico De Faveri defaveri@isti.cnr.it - * - */ -public class UploadServlet extends HttpServlet { - - public static final String UPLOAD_TYPE = ConstantsExplorer.UPLOAD_TYPE; - - public static final String ID_FOLDER = ConstantsExplorer.ID_FOLDER; - - public static final String UPLOAD_FORM_ELEMENT = ConstantsExplorer.UPLOAD_FORM_ELEMENT; - - public static final String IS_OVERWRITE = ConstantsExplorer.IS_OVERWRITE; - - public static final String FILE = "File"; - - protected static Logger logger = Logger.getLogger(UploadServlet.class); - - public static final String D4ST = Extensions.REPORT_TEMPLATE.getName(); //extension of Report Template type - public static final String D4SR = Extensions.REPORT.getName(); //extension of Report type - /** - * - */ - private static final long serialVersionUID = -4197748678713054285L; - - - /** - * {@inheritDoc} - */ - @Override - public void init() throws ServletException { - super.init(); - - System.out.println("Workspace UploadServlet ready."); - } - - /** - * {@inheritDoc} - */ - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - System.out.println("GET on UploadServlet"); - } - - - /** - * {@inheritDoc} - */ - @SuppressWarnings("rawtypes") - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - System.out.println("POST on UploadServlet"); - logger.trace("POST on UploadServlet"); - - FileItemFactory factory = new DiskFileItemFactory(); - ServletFileUpload upload = new ServletFileUpload(factory); - - FileItem uploadItem = null; - String destinationId = null; - String uploadType = null; - boolean isOverwrite = false; - - try { - logger.trace("parsing request"); - List items = upload.parseRequest(request); - - Iterator it = items.iterator(); - while (it.hasNext()) { - FileItem item = (FileItem) it.next(); - - if (UPLOAD_FORM_ELEMENT.equals(item.getFieldName())) { - uploadItem = item; - } - - if (item.isFormField() && ID_FOLDER.equals(item.getFieldName())){ - destinationId = item.getString(); - } - - if (item.isFormField() && UPLOAD_TYPE.equals(item.getFieldName())){ - uploadType = item.getString(); - } - - if (item.isFormField() && IS_OVERWRITE.equals(item.getFieldName())){ - isOverwrite = Boolean.parseBoolean(item.getString()); - } - - } - - logger.info("Upload servlet parameters: [uploadItem: "+uploadItem +", destinationId: "+destinationId +", uploadType: "+uploadType+", isOverwrite: "+isOverwrite+"]"); - } catch (FileUploadException e) { - logger.error("Error processing request in upload servlet", e); - sendError(response, "Internal error: Error during request processing"); - return; - } - - - if (uploadItem == null) { - logger.error("Error processing request in upload servlet: No file to upload"); - sendError(response, "Internal error: No file to upload"); - return; - } - - if (destinationId == null) { - logger.error("Error processing request in upload servlet: No destination folder id found"); - sendError(response, "Internal error: No destination folder id found"); - return; - } - - logger.trace("destination folder id: "+destinationId); - logger.trace("uploadType: "+uploadType); - - Workspace wa = null; - try { - wa = WsUtil.getWorkspace(request.getSession()); - } catch (Exception e) { - logger.error("Error during workspace retrieving", e); - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error processing request in upload servlet"); - return; - } - - if (wa == null) { - logger.error("Now workspace found in session"); - sendError(response, "Internal error: No workspace in session"); - return; - } - - WorkspaceItem item; - try { - item = wa.getItem(destinationId); - } catch (ItemNotFoundException e) { - logger.error("Error, no destination folder found", e); - sendError(response, "Internal error: No destination folder found"); - return; - } - - if (item.getType() != WorkspaceItemType.FOLDER && item.getType() != WorkspaceItemType.SHARED_FOLDER) { - logger.error("Error processing request in upload servlet: Wrong destination item"); - sendError(response, "Internal error: Wrong destination item"); - return; - } - - WorkspaceFolder destinationFolder = (WorkspaceFolder) item; - - try { - //we calculate an unique name for the current destination - String itemName = ""; - - if(!isOverwrite) - itemName = WorkspaceUtil.getUniqueName(uploadItem.getName(), destinationFolder); - else - itemName = uploadItem.getName(); - - String contentType = MimeTypeUtil.getMimeType(itemName, new BufferedInputStream(uploadItem.getInputStream())); - logger.trace("Content type (mime type): "+contentType + " unique name: "+itemName); - -// System.out.println("Content type: "+contentType + " unique name: "+itemName); - - String extension = FilenameUtils.getExtension(itemName); - logger.trace("extension: "+extension); - -// System.out.println("extension: "+extension); - - if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD - - boolean isZipFile = MimeTypeUtil.isZipContentType(contentType); - - if(isZipFile && (extension.compareToIgnoreCase(D4ST)==0)){ //Create REPORT TEMPLATE - -// String newItemName = ""; -// -// if(!isOverwrite) -// newItemName = itemName.substring(0,itemName.lastIndexOf(D4ST)-1); //remove extension -// else -// newItemName = item.getName(); - -// System.out.println("itemwithoutext " +itemwithoutext); - - String newItemName = itemName; - - logger.trace("createTemplate: "+newItemName); - createTemplate(request.getSession(), wa, newItemName, uploadItem.getInputStream(), destinationFolder, response, isOverwrite); - - }else if(isZipFile && (extension.compareToIgnoreCase(D4SR)==0)){ //Create REPORT - -// String newItemName = ""; -// -// if(!isOverwrite) -// newItemName = itemName.substring(0,itemName.lastIndexOf(D4SR)-1); //remove extension -// else -// newItemName = item.getName(); - -// System.out.println("itemwithoutext " +itemwithoutext); - String newItemName = itemName; - logger.trace("createReport: "+newItemName); - createReport(request.getSession(), wa, newItemName, uploadItem.getInputStream(), destinationFolder, response, isOverwrite); - - }else{ //CREATE AN EXTERNAL FILE - - createExternalFile(request.getSession(), wa, itemName, uploadItem, destinationFolder, contentType, response, isOverwrite); - } - - }else {//IS ARCHIVE UPLOAD - - if (MimeTypeUtil.isZipContentType(contentType)){ - logger.trace("Unziping content"); - UnzipUtil.unzip(destinationFolder, uploadItem.getInputStream(), itemName); - - //TODO NOTIFY UPLOAD ARCHIVE - sendMessage(response, "Archive "+uploadItem.getName()+" imported correctly in "+destinationFolder.getPath()); - } else - createExternalFile(request.getSession(), wa, itemName, uploadItem, destinationFolder, contentType, response, isOverwrite); - } - - uploadItem.delete(); - } catch (InsufficientPrivilegesException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: Insufficient privileges"); - return; - } catch (InternalErrorException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: "+e.getMessage()); - return; - } catch (ItemAlreadyExistException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: An item with that name already exists"); - return; - }catch (Exception e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: An error occurred on uploading the file, try again later"); - return; - } - } - - /** - * - * @param httpSession - * @param workspace - * @param itemId - * @param destinationFolderId - */ - private void notifyUploadInSharedFolder(final HttpSession httpSession, final Workspace workspace, final String itemId, final String destinationFolderId, final boolean isOverwrite){ - - new Thread(){ - - public void run() { - - WorkspaceItem sourceItem; - try { - sourceItem = workspace.getItem(itemId); - String sourceSharedId = sourceItem.getIdSharedFolder(); - WorkspaceItem folderDestinationItem = workspace.getItem(destinationFolderId); - - NotificationsUtil.checkSendNotifyChangedItemToShare(httpSession, sourceItem, sourceSharedId, folderDestinationItem,isOverwrite); - - - } catch (Exception e) { - logger.error("Error in notifyUploadInSharedFolder", e); - - } - - }; - - }.start(); - } - - private void createExternalFile(HttpSession httpSession, Workspace wa, String itemName, FileItem uploadItem, WorkspaceFolder destinationFolder, String contentType, HttpServletResponse response, boolean isOverwrite) throws InternalErrorException, InsufficientPrivilegesException, ItemAlreadyExistException, IOException { - - FolderItem createdItem = null; - - if(!isOverwrite){ - //we need to recalculate the item name - itemName = WorkspaceUtil.getUniqueName(uploadItem.getName(), destinationFolder); - createdItem = WorkspaceUtil.createExternalFile(destinationFolder, itemName, "", contentType, uploadItem.getInputStream()); - } - else - createdItem = overwriteItem(wa, itemName, uploadItem.getInputStream(), destinationFolder); //CASE OVERWRITE - - if(createdItem!=null){ - notifyUploadInSharedFolder(httpSession,wa,createdItem.getId(),destinationFolder.getId(), isOverwrite); - - sendMessage(response, "File "+createdItem.getName()+" imported correctly in "+destinationFolder.getPath()); - } - else - sendError(response,"Internal error: Workspace Item Not Found"); - } - - - private FolderItem overwriteItem(Workspace wa, String itemName, InputStream fileData, WorkspaceFolder destinationFolder){ - - FolderItem overwriteItem = null; - - try { - logger.trace("case overwriting item.. "+itemName); - overwriteItem = (FolderItem) wa.find(itemName, destinationFolder.getId()); - logger.trace("overwriteItem item was found, id is: "+overwriteItem.getId()); - wa.updateItem(overwriteItem.getId(), fileData); - logger.trace("updateItem with id: "+overwriteItem.getId()+ ", is completed"); - } catch (ItemNotFoundException e) { - logger.error("Error in createExternalFile, ItemNotFoundException", e); - } catch (WrongItemTypeException e) { - logger.error("Error in createExternalFile, WrongItemTypeException", e); - } catch (WorkspaceFolderNotFoundException e) { - logger.error("Error in createExternalFile, WorkspaceFolderNotFoundException", e); - } catch (WrongDestinationException e) { - logger.error("Error in createExternalFile, WrongDestinationException", e); - } catch (InsufficientPrivilegesException e) { - logger.error("Error in createExternalFile, InsufficientPrivilegesException", e); - } catch (ItemAlreadyExistException e) { - logger.error("Error in createExternalFile, ItemAlreadyExistException", e); - } catch (InternalErrorException e) { - logger.error("Error in createExternalFile, InternalErrorException", e); - }catch (Exception e) { - logger.error("Error in createExternalFile, Exception", e); - } - - return overwriteItem; - - } - - - private void createReport(HttpSession httpSession, Workspace wa, String itemName, InputStream stream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{ - - try { - - Report report = null; - - if(!isOverwrite){ - itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder); - report = wa.createReport(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", "", 0, "", stream, destinationFolder.getId()); - - notifyUploadInSharedFolder(httpSession,wa,report.getId(),destinationFolder.getId(), isOverwrite); - - sendMessage(response, "File "+report.getName()+" imported correctly in "+destinationFolder.getPath()); - } - else{ //CASE OVERWRITE - FolderItem rep = overwriteItem(wa, itemName, stream, destinationFolder); - - if(rep!=null){ - - notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite); - - sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath()); - } - else - sendError(response,"Internal error: Workspace Item Not Found"); - - } - } catch (WrongDestinationException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: Wrong Destination"); - } catch (WorkspaceFolderNotFoundException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: Workspace Folder Not Found"); - } - - } - - private void createTemplate(HttpSession httpSession, Workspace wa, String itemName, InputStream stream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{ - - try { - - ReportTemplate template = null; - - if(!isOverwrite){ - itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder); - template = wa.createReportTemplate(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", 0, "", stream, destinationFolder.getId()); - - notifyUploadInSharedFolder(httpSession,wa,template.getId(),destinationFolder.getId(), isOverwrite); - - sendMessage(response, "File "+template.getName()+" imported correctly in "+destinationFolder.getPath()); - - }else{ //CASE OVERWRITE - FolderItem rep = overwriteItem(wa, itemName, stream, destinationFolder); - - if(rep!=null){ - - notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite); - - sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath()); - } - else - sendError(response,"Internal error: Workspace Item Not Found"); - - } - - } catch (WrongDestinationException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: Wrong Destination"); - } catch (WorkspaceFolderNotFoundException e) { - logger.error("Error creating elements", e); - sendError(response, "Internal error: Workspace Folder Not Found"); - } - - } - - - protected void sendError(HttpServletResponse response, String message) throws IOException - { - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message); - response.getWriter().write(resultMessage.toString()); - response.flushBuffer(); - } - - protected void sendMessage(HttpServletResponse response, String message) throws IOException - { - response.setStatus(HttpServletResponse.SC_ACCEPTED); - HandlerResultMessage resultMessage = HandlerResultMessage.okResult(message); - response.getWriter().write(resultMessage.toString()); - response.flushBuffer(); - } - - protected void sendWarnMessage(HttpServletResponse response, String message) throws IOException - { - response.setStatus(HttpServletResponse.SC_ACCEPTED); - HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message); - response.getWriter().write(resultMessage.toString()); - response.flushBuffer(); - } - - -} diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsProducer.java b/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsProducer.java index 6b0b2e4..99c6d53 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsProducer.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsProducer.java @@ -6,9 +6,10 @@ package org.gcube.portlets.user.workspace.server.notifications; import java.util.ArrayList; import java.util.List; +import javax.servlet.http.HttpServletRequest; + import org.apache.log4j.Logger; import org.gcube.application.framework.core.session.ASLSession; -import org.gcube.application.framework.core.session.SessionManager; import org.gcube.applicationsupportlayer.social.NotificationsManager; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; @@ -39,9 +40,10 @@ public class NotificationsProducer { * Instantiates a new notifications producer. * * @param aslSession the asl session + * @param request the request */ - public NotificationsProducer(ASLSession aslSession) { - this.notificationsMng = WsUtil.getNotificationManager(aslSession); + public NotificationsProducer(ASLSession aslSession, HttpServletRequest request) { + this.notificationsMng = WsUtil.getNotificationManager(aslSession, request); this.aslSession = aslSession; this.userId = aslSession.getUsername(); } @@ -226,7 +228,7 @@ public class NotificationsProducer { /** - * Runs a new thread to notify the updated (add/remove) contacts to sharing + * Runs a new thread to notify the updated (add/remove) contacts to sharing. * * @param listSharedContact - list of contacts already shared * @param listSharingContact - list of "new" contacts to share @@ -380,7 +382,7 @@ public class NotificationsProducer { * Notify folder removed user. * * @param userUnShared the user un shared - * @param unSharedFolder the un shared folder + * @param shareFolder the share folder */ public void notifyFolderRemovedUser(final InfoContactModel userUnShared, final WorkspaceSharedFolder shareFolder) { @@ -813,7 +815,7 @@ public class NotificationsProducer { * @param args the arguments * @throws Exception the exception */ - public static void main(String[] args) throws Exception + /*public static void main(String[] args) throws Exception { String sessionID = "1"; String user = "francesco.mangiacrapa"; @@ -832,7 +834,6 @@ public class NotificationsProducer { NotificationsProducer feeder = new NotificationsProducer(session); - - } + }*/ } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsUtil.java b/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsUtil.java index c8539eb..8a1c0db 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsUtil.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsUtil.java @@ -6,6 +6,7 @@ package org.gcube.portlets.user.workspace.server.notifications; import java.util.ArrayList; import java.util.List; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; @@ -28,13 +29,16 @@ public class NotificationsUtil { protected static Logger logger = Logger.getLogger(NotificationsUtil.class); /** - * Send a notification if an item is added or updated to sharing folder - * @param httpSession - * @param sourceItem - * @param sourceSharedId - * @param folderDestinationItem + * Send a notification if an item is added or updated to sharing folder. + * + * @param request the request + * @param httpSession the http session + * @param sourceItem the source item + * @param sourceSharedId the source shared id + * @param folderDestinationItem the folder destination item + * @param isOverwrite the is overwrite */ - public static void checkSendNotifyChangedItemToShare(HttpSession httpSession, final WorkspaceItem sourceItem, final String sourceSharedId, final WorkspaceItem folderDestinationItem, boolean isOverwrite) { + public static void checkSendNotifyChangedItemToShare(HttpServletRequest request, HttpSession httpSession, final WorkspaceItem sourceItem, final String sourceSharedId, final WorkspaceItem folderDestinationItem, boolean isOverwrite) { logger.trace("checkSendNotifyAddItemToShare"); @@ -44,24 +48,18 @@ public class NotificationsUtil { if(folderDestinationItem.isShared()){ //Notify Added Item To Sharing? logger.trace("checkNotifyAddItemToShare source item: "+sourceItem.getName()+" sourceSharedId: "+sourceSharedId + " folder destination: "+folderDestinationItem.getName() + " folder destination shared folder id: "+folderDestinationItem.getIdSharedFolder()); - //share condition is true if source shared folder is not null boolean shareChangeCondition = sourceSharedId==null?false:true; - //System.out.println("shareChangeCondition add item: "+ shareChangeCondition); - logger.trace("shareChangeCondition add item: "+shareChangeCondition); //if shareChangeCondition is true.. notifies added item to sharing if(shareChangeCondition){ Workspace workspace = WsUtil.getWorkspace(httpSession); - List listContacts = getListUsersSharedByFolderSharedId(workspace, folderDestinationItem.getIdSharedFolder()); - WorkspaceItem destinationSharedFolder = workspace.getItem(folderDestinationItem.getIdSharedFolder()); - - NotificationsProducer np = new NotificationsProducer(WsUtil.getAslSession(httpSession)); + NotificationsProducer np = new NotificationsProducer(WsUtil.getAslSession(httpSession), request); if(destinationSharedFolder instanceof WorkspaceSharedFolder){ @@ -71,7 +69,6 @@ public class NotificationsUtil { else np.notifyUpdatedItemToSharing(listContacts, sourceItem, (WorkspaceSharedFolder) destinationSharedFolder); - logger.trace("The notifies was sent correctly"); }else logger.trace("The notifies doesn't sent because "+destinationSharedFolder+ " is not instance of WorkspaceSharedFolder"); @@ -107,15 +104,10 @@ public class NotificationsUtil { if(isASharedFolder(wsItem)){ WorkspaceSharedFolder wsFolder = (WorkspaceSharedFolder) wsItem; - GWTWorkspaceBuilder builder = new GWTWorkspaceBuilder(); - List listPortalLogin = wsFolder.getUsers(); - logger.trace("getListUserSharedByFolderSharedId return "+ listPortalLogin.size() + " user"); - return builder.buildGxtInfoContactsFromPortalLogins(listPortalLogin); - } else{ logger.trace("the item with id: "+idSharedFolder+ " is not "+WorkspaceItemType.SHARED_FOLDER); @@ -131,62 +123,45 @@ public class NotificationsUtil { } } - - - /** + * Check send notify remove item to share. * - * @param httpSession - * @param sourceItemIsShared - * @param oldItemName - * @param oldItemId - * @param sourceFolderSharedId + * @param request the request + * @param httpSession the http session + * @param sourceItemIsShared the source item is shared + * @param oldItemName the old item name + * @param oldItemId the old item id + * @param sourceFolderSharedId the source folder shared id */ - public static void checkSendNotifyRemoveItemToShare(HttpSession httpSession, final boolean sourceItemIsShared, final String oldItemName, String oldItemId, final String sourceFolderSharedId) { - + public static void checkSendNotifyRemoveItemToShare(HttpServletRequest request, HttpSession httpSession, final boolean sourceItemIsShared, final String oldItemName, String oldItemId, final String sourceFolderSharedId) { logger.trace("checkNotifyRemoveItemToShare:"); try{ if(!sourceItemIsShared){ - logger.trace("checkSendNotifyRemoveItemToShare returned, source item is not shared"); return; } String idSharedFolder = sourceFolderSharedId!=null?sourceFolderSharedId:""; - -// System.out.println("shareChangeCondition remove item: "+ shareChangeCondition); - - boolean isRootFolderShared = checkIsRootFolderShared(oldItemId, idSharedFolder); logger.trace("isRootFolderShared is: "+ isRootFolderShared); - - /* if(isRootFolderShared){ logger.trace("Notification doesn't sent because the event is on root shared folder"); return; }*/ - - boolean isSharedFolder = isASharedFolderForId(httpSession,idSharedFolder); - if(isSharedFolder){ logger.trace("idSharedFolder is: "+ idSharedFolder +" is shared folder: "+isSharedFolder); - Workspace workspace = WsUtil.getWorkspace(httpSession); - //get contacts List listContacts = getListUsersSharedByFolderSharedId(workspace, idSharedFolder); - WorkspaceItem sourceSharedFolder = workspace.getItem(idSharedFolder); - //System.out.println(" name sourceSharedFolder: "+ sourceSharedFolder.getName()); - - NotificationsProducer np = new NotificationsProducer(WsUtil.getAslSession(httpSession)); + NotificationsProducer np = new NotificationsProducer(WsUtil.getAslSession(httpSession), request); //Notify Removed Item To Sharing? if(!isRootFolderShared){ diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/util/UserUtil.java b/src/main/java/org/gcube/portlets/user/workspace/server/util/UserUtil.java index 42efd0d..bdf5748 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/util/UserUtil.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/util/UserUtil.java @@ -6,12 +6,10 @@ import java.util.List; import org.apache.log4j.Logger; import org.gcube.portlets.user.workspace.client.model.InfoContactModel; import org.gcube.vomanagement.usermanagement.UserManager; -import org.gcube.vomanagement.usermanagement.exception.UserManagementPortalException; import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException; import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault; -import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayUserManager; -import org.gcube.vomanagement.usermanagement.model.UserModel; - +import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager; +import org.gcube.vomanagement.usermanagement.model.GCubeUser; /** @@ -21,11 +19,11 @@ import org.gcube.vomanagement.usermanagement.model.UserModel; * Nov 17, 2015 */ public class UserUtil { - + static UserManager um = new LiferayUserManager(); protected static Logger logger = Logger.getLogger(UserUtil.class); - + /** * Gets the user full name. * @@ -34,35 +32,33 @@ public class UserUtil { */ public static String getUserFullName(String portalLogin){ // return user.getPortalLogin(); //for testing in eclipse - + // logger.trace("Finding full name for: "+portalLogin); - + if(portalLogin==null) return ""; - + if (WsUtil.isWithinPortal()) { //INTO PORTAL - - UserModel curr = null; - + + GCubeUser curr = null; + try { try { curr = um.getUserByScreenName(portalLogin); - + } catch (UserManagementSystemException e) { - + logger.error("An error occurred in getUserFullName "+e,e); } catch (UserRetrievalFault e) { - + logger.error("An error occurred in getUserFullName "+e,e); } - } catch (UserManagementPortalException ume) { - logger.error("An error occurred in getUserFullName "+ume,ume); }catch (Exception e) { logger.error("An error occurred in getUserFullName "+e,e); logger.warn("Return portal login "+portalLogin); return portalLogin; } - + if (curr != null){ // logger.trace("Return "+curr.getFullname() +" full name for: "+portalLogin); return curr.getFullname(); @@ -72,11 +68,11 @@ public class UserUtil { logger.trace("Returning input login: "+portalLogin); return portalLogin; } - + logger.trace("Return portal login as full name for: "+portalLogin); return portalLogin; } - + /** * Gets the list login by info contact model. * @@ -84,16 +80,16 @@ public class UserUtil { * @return the list login by info contact model */ public static List getListLoginByInfoContactModel(List listContacts){ - + List listUsers = new ArrayList(); - + for (InfoContactModel infoContactModel : listContacts) { listUsers.add(infoContactModel.getLogin()); } - + return listUsers; } - + /** * Separate users names to comma. * @@ -101,20 +97,20 @@ public class UserUtil { * @return the string */ public static String separateUsersNamesToComma(List listContacts){ - + String users = ""; - + for (int i = 0; i < listContacts.size()-1; i++) { users+= listContacts.get(i).getName() + ", "; } - + if(listContacts.size()>1) users += listContacts.get(listContacts.size()-1).getName(); - + return users; } - - + + /** * Separate full name to comma for portal login. * @@ -122,28 +118,28 @@ public class UserUtil { * @return the string */ public static String separateFullNameToCommaForPortalLogin(List listLogin){ - + String users = ""; - + logger.trace("SeparateFullNameToCommaForPortalLogin converting: "+listLogin); - + //N-1 MEMBERS for (int i = 0; i < listLogin.size()-1; i++) { // logger.trace("Converting: "+i+") "+listLogin.get(i)); users+= getUserFullName(listLogin.get(i)) + ", "; } - + //LAST MEMBER if(listLogin.size()>=1){ // logger.trace("Converting: "+(listLogin.size()-1)+") " +listLogin.get(listLogin.size()-1)); users += getUserFullName(listLogin.get(listLogin.size()-1)); } - + logger.trace("SeparateFullNameToCommaForPortalLogin returning: "+users); - + return users; } - + /** * The main method. * @@ -154,6 +150,6 @@ public class UserUtil { // login.add("ale"); // login.add("pepe"); System.out.println(separateFullNameToCommaForPortalLogin(login)); - + } } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java b/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java index e8b95bf..d58136c 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java @@ -3,6 +3,7 @@ */ package org.gcube.portlets.user.workspace.server.util; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; @@ -11,6 +12,8 @@ import org.gcube.application.framework.core.session.ASLSession; import org.gcube.application.framework.core.session.SessionManager; 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.homelibrary.home.HomeLibrary; import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; @@ -31,10 +34,10 @@ import com.liferay.portal.service.UserLocalServiceUtil; /** + * The Class WsUtil. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * @Feb 18, 2014 - * */ public class WsUtil { @@ -75,9 +78,10 @@ public class WsUtil { // public static boolean withoutPortal = false; /** - * - * @return true if you're running into the portal, false if in development - */ + * Checks if is within portal. + * + * @return true if you're running into the portal, false if in development + */ public static boolean isWithinPortal() { try { UserLocalServiceUtil.getService(); @@ -89,6 +93,12 @@ public class WsUtil { } } + /** + * Gets the asl session. + * + * @param httpSession the http session + * @return the asl session + */ public static ASLSession getAslSession(HttpSession httpSession) { String sessionID = httpSession.getId(); @@ -133,10 +143,11 @@ public class WsUtil { } /** + * Checks if is session expired. * - * @param httpSession + * @param httpSession the http session * @return true if current username into ASL session is WsUtil.TEST_USER, false otherwise - * @throws Exception + * @throws Exception the exception */ public static boolean isSessionExpired(HttpSession httpSession) throws Exception { logger.trace("workspace session validating..."); @@ -159,6 +170,15 @@ public class WsUtil { } + /** + * Gets the workspace. + * + * @param httpSession the http session + * @return the workspace + * @throws InternalErrorException the internal error exception + * @throws HomeNotFoundException the home not found exception + * @throws WorkspaceFolderNotFoundException the workspace folder not found exception + */ public static Workspace getWorkspace(final HttpSession httpSession) throws InternalErrorException, HomeNotFoundException, WorkspaceFolderNotFoundException { logger.trace("Get Workspace"); @@ -174,6 +194,12 @@ public class WsUtil { } + /** + * Gets the GWT workspace builder. + * + * @param httpSession the http session + * @return the GWT workspace builder + */ public static GWTWorkspaceBuilder getGWTWorkspaceBuilder(HttpSession httpSession) { ASLSession session = getAslSession(httpSession); @@ -189,7 +215,14 @@ public class WsUtil { return builder; } - public static NotificationsManager getNotificationManager(ASLSession session) + /** + * Gets the notification manager. + * + * @param session the session + * @param request the request + * @return the notification manager + */ + public static NotificationsManager getNotificationManager(ASLSession session, HttpServletRequest request) { NotificationsManager notifMng = (NotificationsManager) session.getAttribute(NOTIFICATION_MANAGER); @@ -198,7 +231,9 @@ public class WsUtil { try{ logger.trace("Create new NotificationsManager for user: "+session.getUsername()); logger.trace("New ApplicationNotificationsManager with portlet class name: "+NOTIFICATION_PORTLET_CLASS_ID); - notifMng = new ApplicationNotificationsManager(session, NOTIFICATION_PORTLET_CLASS_ID); + SocialNetworkingSite site = new SocialNetworkingSite(request); + SocialNetworkingUser curser = new SocialNetworkingUser(session.getUsername(), session.getUserEmailAddress(), session.getUserFullName(), session.getUserAvatarId()); + notifMng = new ApplicationNotificationsManager(site, session.getScope(), curser, NOTIFICATION_PORTLET_CLASS_ID); session.setAttribute(NOTIFICATION_MANAGER, notifMng); }catch (Exception e) { logger.error("An error occurred instancing ApplicationNotificationsManager for user: "+session.getUsername(),e); @@ -208,20 +243,33 @@ public class WsUtil { return notifMng; } - public static NotificationsProducer getNotificationProducer(ASLSession session) + /** + * Gets the notification producer. + * + * @param session the session + * @param request the request + * @return the notification producer + */ + public static NotificationsProducer getNotificationProducer(ASLSession session, HttpServletRequest request) { NotificationsProducer notifProducer = (NotificationsProducer) session.getAttribute(NOTIFICATION_PRODUCER); if (notifProducer == null) { logger.trace("Create new Notification Producer for user: "+session.getUsername()); - notifProducer = new NotificationsProducer(session); + notifProducer = new NotificationsProducer(session, request); session.setAttribute(NOTIFICATION_PRODUCER, notifProducer); } return notifProducer; } + /** + * Gets the user id. + * + * @param httpSession the http session + * @return the user id + */ public static String getUserId(HttpSession httpSession) { ASLSession session = getAslSession(httpSession); @@ -229,6 +277,12 @@ public class WsUtil { return session.getUsername(); } + /** + * Checks if is vre. + * + * @param session the session + * @return true, if is vre + */ public static boolean isVRE(ASLSession session){ String currentScope = session.getScopeName(); @@ -245,6 +299,12 @@ public class WsUtil { } + /** + * Gets the scope util filter. + * + * @param httpSession the http session + * @return the scope util filter + */ public static ScopeUtilFilter getScopeUtilFilter(HttpSession httpSession){ ASLSession session = getAslSession(httpSession); @@ -265,8 +325,10 @@ public class WsUtil { /** - * @param session - * @return + * Gets the url shortener. + * + * @param httpSession the http session + * @return the url shortener */ public static UrlShortener getUrlShortener(HttpSession httpSession) { @@ -289,8 +351,10 @@ public class WsUtil { /** - * @param session - * @return + * Gets the uri resolver. + * + * @param httpSession the http session + * @return the uri resolver */ public static UriResolverReaderParameterForResolverIndex getUriResolver(HttpSession httpSession) { @@ -313,8 +377,11 @@ public class WsUtil { } /** - * @param session - * @return + * Gets the property special folder reader. + * + * @param httpSession the http session + * @param pathProperty the path property + * @return the property special folder reader */ public static PropertySpecialFolderReader getPropertySpecialFolderReader(HttpSession httpSession, String pathProperty) { ASLSession session = getAslSession(httpSession);