From be9f36822f50667046effa828c9f7bdd5e5f6817 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Wed, 27 Apr 2022 17:54:51 +0200 Subject: [PATCH] added folder unshare --- enunciate.xml | 4 + pom.xml | 16 +++- .../ws/methods/v2/Notifications.java | 87 ++++++------------- 3 files changed, 45 insertions(+), 62 deletions(-) diff --git a/enunciate.xml b/enunciate.xml index 167927e..5536344 100644 --- a/enunciate.xml +++ b/enunciate.xml @@ -3,6 +3,10 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://enunciate.webcohesion.com/schemas/enunciate-2.14.0.xsd"> + + diff --git a/pom.xml b/pom.xml index 4ca2639..bb6589b 100644 --- a/pom.xml +++ b/pom.xml @@ -73,7 +73,7 @@ org.gcube.social-networking social-service-model - [1.1.0-SNAPSHOT, 2.0.0) + [1.1.1-SNAPSHOT, 2.0.0) net.sf.ehcache @@ -313,7 +313,19 @@ com.webcohesion.enunciate enunciate-maven-plugin ${enunciate.version} - + + + + + org.gcube.social-networking + social-service-model + + + org.gcube.portal + social-networking-library + + + assemble diff --git a/src/main/java/org/gcube/portal/social/networking/ws/methods/v2/Notifications.java b/src/main/java/org/gcube/portal/social/networking/ws/methods/v2/Notifications.java index d5e90be..b10440b 100644 --- a/src/main/java/org/gcube/portal/social/networking/ws/methods/v2/Notifications.java +++ b/src/main/java/org/gcube/portal/social/networking/ws/methods/v2/Notifications.java @@ -27,7 +27,6 @@ import org.gcube.applicationsupportlayer.social.shared.SocialSharedFolder; import org.gcube.common.authorization.library.provider.AuthorizationProvider; import org.gcube.common.authorization.library.utils.Caller; import org.gcube.common.scope.api.ScopeProvider; -import org.gcube.common.storagehub.model.exceptions.InvalidCallParameters; import org.gcube.portal.databook.shared.Notification; import org.gcube.portal.notifications.bean.GenericItemBean; import org.gcube.portal.notifications.thread.JobStatusNotificationThread; @@ -39,10 +38,11 @@ import org.gcube.portal.social.networking.ws.mappers.WorkspaceItemMapper; import org.gcube.portal.social.networking.ws.outputs.ResponseBean; import org.gcube.portal.social.networking.ws.utils.CassandraConnection; import org.gcube.portal.social.networking.ws.utils.ErrorMessages; -import org.gcube.social_networking.socialnetworking.model.beans.SharedFolderBean; import org.gcube.social_networking.socialnetworking.model.beans.WSAddedItemNotificationBean; import org.gcube.social_networking.socialnetworking.model.beans.WSSharedFolderNotificationBean; +import org.gcube.social_networking.socialnetworking.model.beans.WSUnsharedFolderNotificationBean; import org.gcube.social_networking.socialnetworking.model.beans.WorkspaceFileItemBean; +import org.gcube.social_networking.socialnetworking.model.beans.WorkspaceNotificationBean; import org.gcube.social_networking.socialnetworking.model.beans.WorkspaceNotificationMessage; import org.gcube.vomanagement.usermanagement.model.GCubeUser; import org.slf4j.LoggerFactory; @@ -171,14 +171,14 @@ public class Notifications { * @throws ValidationException */ @POST - @Path("notify-ws/") + @Path("workspace/") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @StatusCodes ({ @ResponseCode ( code = 200, condition = "Workspace Notification is sent correctly"), @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) }) - public Response notifyWs( + public Response workspace( @NotNull(message="input is missing") @Valid WorkspaceNotificationMessage message) throws ValidationException{ @@ -193,19 +193,32 @@ public class Notifications { ResponseBean responseBean = new ResponseBean(); Status status = Status.OK; - + try{ + SocialNetworkingSite site = SocialNetworkingSiteFinder.getSocialNetworkingSiteFromScope(context); + GCubeUser senderUser = UserManagerWSBuilder.getInstance().getUserManager().getUserByEmail(LiferayJSONWsCredentials.getSingleton().getUser()); + SocialNetworkingUser user = new SocialNetworkingUser(senderUser.getUsername(), senderUser.getEmail(), senderUser.getFullname(), senderUser.getUserAvatarURL()); + NotificationsManager nm = new ApplicationNotificationsManager(UserManagerWSBuilder.getInstance().getUserManager(), site, context, user); switch (message.getType()) { - case WP_ITEM_NEW: - WSAddedItemNotificationBean wpItemBean = (WSAddedItemNotificationBean) message.getBean(); - GCubeUser userRecipient = UserManagerWSBuilder.getInstance().getUserManager().getUserByUsername(wpItemBean.getUserIdToNotify()); - // notifications are sent by using the user allowed to use liferay's json apis - SocialNetworkingSite site = SocialNetworkingSiteFinder.getSocialNetworkingSiteFromScope(context); - GCubeUser senderUser = UserManagerWSBuilder.getInstance().getUserManager().getUserByEmail(LiferayJSONWsCredentials.getSingleton().getUser()); - SocialNetworkingUser user = new SocialNetworkingUser(senderUser.getUsername(), senderUser.getEmail(), senderUser.getFullname(), senderUser.getUserAvatarURL()); - NotificationsManager nm = new ApplicationNotificationsManager(UserManagerWSBuilder.getInstance().getUserManager(), site, context, user); - nm.notifyAddedItem(context, WorkspaceItemMapper.getFileItem(wpItemBean.getItem()), WorkspaceItemMapper.getSharedFolder(wpItemBean.getFolder())); + case ITEM_NEW: { + WSAddedItemNotificationBean itemBean = (WSAddedItemNotificationBean) message.getBean(); + String userIdToNotify = itemBean.getUserIdToNotify(); + nm.notifyAddedItem(userIdToNotify, WorkspaceItemMapper.getFileItem(itemBean.getItem()), WorkspaceItemMapper.getSharedFolder(itemBean.getFolder())); break; + } + case FOLDER_SHARE: { + WSSharedFolderNotificationBean itemBean = (WSSharedFolderNotificationBean) message.getBean(); + String userIdToNotify = itemBean.getUserIdToNotify(); + nm.notifyFolderSharing(userIdToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder())); + break; + } + case FOLDER_UNSHARE: { + WSUnsharedFolderNotificationBean itemBean = (WSUnsharedFolderNotificationBean) message.getBean(); + String userIdToNotify = itemBean.getUserIdToNotify(); + nm.notifyFolderUnsharing(userIdToNotify, itemBean.getUnsharedFolderId(), itemBean.getUnsharedFolderName()); + break; + } + default: break; @@ -220,50 +233,4 @@ public class Notifications { return Response.status(status).entity(responseBean).build(); } - /** - * Send a Workspace notification to a given user - * @param userIdToNotify the user you want to notify - * @param newItem the new shared {@link SocialFileItem} instance - * @param sharedFolder the shared folder {@link SocialSharedFolder} instance - * @return - * @throws ValidationException - */ - @POST - @Path("notify-ws-item-new/") - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - @StatusCodes ({ - @ResponseCode ( code = 200, condition = "Workspace Notification is sent correctly"), - @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) - }) - public Response notifyWsItemNew( - @NotNull(message="input is missing") - @Valid - String userIdToNotify, - @NotNull(message="input is missing") - @Valid - WorkspaceFileItemBean fileItem) throws ValidationException{ - - Caller caller = AuthorizationProvider.instance.get(); - String context = ScopeProvider.instance.get(); - ResponseBean responseBean = new ResponseBean(); - Status status = Status.OK; - - try{ - // notifications are sent by using the user allowed to use liferay's json apis - SocialNetworkingSite site = SocialNetworkingSiteFinder.getSocialNetworkingSiteFromScope(context); - GCubeUser senderUser = UserManagerWSBuilder.getInstance().getUserManager().getUserByEmail(LiferayJSONWsCredentials.getSingleton().getUser()); - SocialNetworkingUser user = new SocialNetworkingUser(senderUser.getUsername(), senderUser.getEmail(), senderUser.getFullname(), senderUser.getUserAvatarURL()); - NotificationsManager nm = new ApplicationNotificationsManager(UserManagerWSBuilder.getInstance().getUserManager(), site, context, user); - nm.notifyAddedItem(context, WorkspaceItemMapper.getFileItem(fileItem), WorkspaceItemMapper.getSharedFolder(fileItem.getParent())); - } catch(Exception e){ - logger.error("Unable to send job notification", e); - responseBean.setSuccess(false); - responseBean.setMessage(e.getMessage()); - status = Status.INTERNAL_SERVER_ERROR; - } - return Response.status(status).entity(responseBean).build(); - } - - }