added folder unshare

This commit is contained in:
Massimiliano Assante 2022-04-27 17:54:51 +02:00
parent fd1eb389c3
commit be9f36822f
3 changed files with 45 additions and 62 deletions

View File

@ -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">
<api-classes>
<include
pattern="org.gcube.portal.social.networking.**"/>
<include
pattern="org.gcube.social_networking.socialnetworking.model.beans.**"/>
<exclude
pattern="org.gcube.portal.social.networking.ws.docs.DocsGenerator" />
</api-classes>

16
pom.xml
View File

@ -73,7 +73,7 @@
<dependency>
<groupId>org.gcube.social-networking</groupId>
<artifactId>social-service-model</artifactId>
<version>[1.1.0-SNAPSHOT, 2.0.0)</version>
<version>[1.1.1-SNAPSHOT, 2.0.0)</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
@ -313,7 +313,19 @@
<groupId>com.webcohesion.enunciate</groupId>
<artifactId>enunciate-maven-plugin</artifactId>
<version>${enunciate.version}</version>
<configuration></configuration>
<configuration>
<sourcepath-includes>
<sourcepath-include>
<!-- Include the "com.external:external" artifact on the sourcepath. -->
<groupId>org.gcube.social-networking</groupId>
<artifactId>social-service-model</artifactId>
</sourcepath-include>
<sourcepath-include>
<groupId>org.gcube.portal</groupId>
<artifactId>social-networking-library</artifactId>
</sourcepath-include>
</sourcepath-includes>
</configuration>
<executions>
<execution>
<id>assemble</id>

View File

@ -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();
}
}