Social service - More REST API resoruces

This commit is contained in:
Ahmed Salah Tawfik Ibrahim 2023-11-22 19:52:25 +01:00
parent 0551ee95f3
commit a55ba31d9a
7 changed files with 244 additions and 249 deletions

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.gcube.tools</groupId> <groupId>org.gcube.tools</groupId>
<artifactId>maven-parent</artifactId> <artifactId>maven-parent</artifactId>
<version>1.2.0</version> <version>1.1.0</version>
</parent> </parent>
<groupId>org.gcube.portal</groupId> <groupId>org.gcube.portal</groupId>

View File

@ -1,7 +1,6 @@
package org.gcube.portal.social.networking.ws.methods.v2; package org.gcube.portal.social.networking.ws.methods.v2;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -16,12 +15,10 @@ import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam; import javax.ws.rs.QueryParam;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status;
import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.AuthorizationProvider; import org.gcube.common.authorization.library.provider.AuthorizationProvider;
import org.gcube.common.authorization.library.utils.Caller; import org.gcube.common.authorization.library.utils.Caller;
import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.api.ScopeProvider;
@ -52,8 +49,8 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes;
*/ */
@Path("2/comments") @Path("2/comments")
@RequestHeaders ({ @RequestHeaders ({
@RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"), @RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"),
@RequestHeader( name = "Content-Type", description = "application/json") @RequestHeader( name = "Content-Type", description = "application/json")
}) })
public class Comments { public class Comments {
@ -70,8 +67,8 @@ public class Comments {
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@Path("get-comments-by-post-id") @Path("get-comments-by-post-id")
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "The list of comments is put into the 'result' field"), @ResponseCode ( code = 200, condition = "The list of comments is put into the 'result' field"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getAllCommentsByPostId( public Response getAllCommentsByPostId(
@NotNull @NotNull
@ -108,8 +105,8 @@ public class Comments {
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@Path("get-comments-user") @Path("get-comments-user")
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "The list of comments is put into the 'result' field"), @ResponseCode ( code = 200, condition = "The list of comments is put into the 'result' field"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getCommentsUser() { public Response getCommentsUser() {
@ -146,7 +143,7 @@ public class Comments {
@QueryParam("time") @QueryParam("time")
@Min(value = 0, message="time cannot be negative") @Min(value = 0, message="time cannot be negative")
long timeInMillis long timeInMillis
) throws ValidationException{ ) throws ValidationException{
ResponseBean responseBean = new ResponseBean(); ResponseBean responseBean = new ResponseBean();
Status status = Status.OK; Status status = Status.OK;
@ -182,8 +179,8 @@ public class Comments {
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 201, condition = "Successfull created, the new comment is reported in the 'result' field of the returned object"), @ResponseCode ( code = 201, condition = "Successfull created, the new comment is reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response writeComment( public Response writeComment(
@NotNull(message="Comment to write is missing") @NotNull(message="Comment to write is missing")
@ -235,14 +232,16 @@ public class Comments {
//lib api //lib api
@POST @POST
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@Path("add-comment-lib") @Path("add-comment-lib")
public Response addCommentLib(@NotNull(message="Comment to write is missing") public Response addCommentLib(@NotNull(message="Comment to write is missing")
@Valid @Valid
Comment comment)throws ValidationException { Comment comment)throws ValidationException {
ResponseBean responseBean = new ResponseBean(); ResponseBean responseBean = new ResponseBean();
Status status = Status.OK; Status status = Status.OK;
try { try {
@ -396,4 +395,6 @@ public class Comments {
} }
return Response.status(status).entity(responseBean).build(); return Response.status(status).entity(responseBean).build();
} }
} }

View File

@ -1,7 +1,5 @@
package org.gcube.portal.social.networking.ws.methods.v2; package org.gcube.portal.social.networking.ws.methods.v2;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -10,18 +8,14 @@ import javax.validation.ValidationException;
import javax.validation.constraints.Min; import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.ws.rs.*; import javax.ws.rs.*;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status;
import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.AuthorizationProvider; import org.gcube.common.authorization.library.provider.AuthorizationProvider;
import org.gcube.common.authorization.library.utils.Caller; import org.gcube.common.authorization.library.utils.Caller;
import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portal.databook.server.DatabookStore; import org.gcube.portal.databook.server.DatabookStore;
import org.gcube.portal.databook.shared.Comment;
import org.gcube.portal.databook.shared.Feed;
import org.gcube.portal.databook.shared.Post; import org.gcube.portal.databook.shared.Post;
import org.gcube.portal.social.networking.liferay.ws.GroupManagerWSBuilder; import org.gcube.portal.social.networking.liferay.ws.GroupManagerWSBuilder;
import org.gcube.portal.social.networking.ws.outputs.ResponseBean; import org.gcube.portal.social.networking.ws.outputs.ResponseBean;
@ -39,9 +33,9 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes;
*/ */
@Path("2/hashtags") @Path("2/hashtags")
@RequestHeaders ({ @RequestHeaders ({
@RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"), @RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"),
@RequestHeader( name = "Content-Type", description = "application/json") @RequestHeader( name = "Content-Type", description = "application/json")
}) })
public class HashTags { public class HashTags {
// Logger // Logger
@ -51,8 +45,8 @@ public class HashTags {
@Path("get-hashtags-and-occurrences/") @Path("get-hashtags-and-occurrences/")
@Produces({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON})
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Hashtags and occurrences retrieved, reported in the 'result' field of the returned object"), @ResponseCode ( code = 200, condition = "Hashtags and occurrences retrieved, reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
/** /**
* @return hashtags in the context bound to the auth token * @return hashtags in the context bound to the auth token
@ -103,7 +97,7 @@ public class HashTags {
@NotNull(message="hashtag to save is missing") @NotNull(message="hashtag to save is missing")
@Valid @Valid
List<String> hashtags List<String> hashtags
) throws ValidationException{ ) throws ValidationException {
ResponseBean responseBean = new ResponseBean(); ResponseBean responseBean = new ResponseBean();
Status status = Status.OK; Status status = Status.OK;
try{ try{
@ -281,6 +275,7 @@ public class HashTags {
@QueryParam("hashtag") @QueryParam("hashtag")
String hashtag String hashtag
) throws ValidationException { ) throws ValidationException {
hashtag = "#" + hashtag;
ResponseBean responseBean = new ResponseBean(); ResponseBean responseBean = new ResponseBean();
Status status = Status.OK; Status status = Status.OK;
@ -300,4 +295,5 @@ public class HashTags {
} }
return Response.status(status).entity(responseBean).build(); return Response.status(status).entity(responseBean).build();
} }
} }

View File

@ -41,9 +41,9 @@ public class Invites {
@QueryParam("email") @QueryParam("email")
String email String email
) throws ValidationException{ ) throws ValidationException{
ResponseBean responseBean = new ResponseBean(); ResponseBean responseBean = new ResponseBean();
Status status = Status.OK; Status status = Status.OK;
String inv = null; String inv = null;
try{ try{
logger.info("Retrieving invite for vre " + vreid); logger.info("Retrieving invite for vre " + vreid);

View File

@ -1,12 +1,10 @@
package org.gcube.portal.social.networking.ws.methods.v2; package org.gcube.portal.social.networking.ws.methods.v2;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.ValidationException; import javax.validation.ValidationException;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.GET; import javax.ws.rs.GET;
@ -14,16 +12,13 @@ import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam; import javax.ws.rs.QueryParam;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status;
import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.AuthorizationProvider; import org.gcube.common.authorization.library.provider.AuthorizationProvider;
import org.gcube.common.authorization.library.utils.Caller; import org.gcube.common.authorization.library.utils.Caller;
import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portal.databook.shared.Comment;
import org.gcube.portal.databook.shared.Like; import org.gcube.portal.databook.shared.Like;
import org.gcube.portal.social.networking.ws.inputs.LikeInputBean; import org.gcube.portal.social.networking.ws.inputs.LikeInputBean;
import org.gcube.portal.social.networking.ws.inputs.PostId; import org.gcube.portal.social.networking.ws.inputs.PostId;
@ -43,8 +38,8 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes;
*/ */
@Path("2/likes") @Path("2/likes")
@RequestHeaders ({ @RequestHeaders ({
@RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"), @RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"),
@RequestHeader( name = "Content-Type", description = "application/json") @RequestHeader( name = "Content-Type", description = "application/json")
}) })
public class Likes { public class Likes {
@ -61,8 +56,8 @@ public class Likes {
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@Path("get-likes-by-post-id") @Path("get-likes-by-post-id")
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "The list of likes is put into the 'result' field"), @ResponseCode ( code = 200, condition = "The list of likes is put into the 'result' field"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getAllLikesByPostId( public Response getAllLikesByPostId(
@NotNull @NotNull
@ -93,8 +88,8 @@ public class Likes {
/** /**
* Create a new like to a post in the context of the token * Create a new like to a post in the context of the token
* @param post The post id to be liked * @param postid The post id to be liked
* @return true if everything is OK * @return true if everything is OK
* @throws ValidationException * @throws ValidationException
*/ */
@POST @POST
@ -102,8 +97,8 @@ public class Likes {
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 201, condition = "Successful created, the like operation result is reported in the 'result' field of the returned object"), @ResponseCode ( code = 201, condition = "Successful created, the like operation result is reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response like( public Response like(
@NotNull(message="Post to like is missing") @NotNull(message="Post to like is missing")
@ -133,7 +128,7 @@ public class Likes {
/** /**
* Unlike to a post in the context of the token * Unlike to a post in the context of the token
* @param likeInputBean The post id to be liked * @param postid The post id to be liked
* @return true if everything is OK * @return true if everything is OK
* @throws ValidationException * @throws ValidationException
*/ */
@ -142,8 +137,8 @@ public class Likes {
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 201, condition = "The unlike operation result is reported in the 'result' field of the returned object"), @ResponseCode ( code = 201, condition = "The unlike operation result is reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response unlike( public Response unlike(
@NotNull(message="Post to unlike is missing") @NotNull(message="Post to unlike is missing")

View File

@ -1,7 +1,10 @@
package org.gcube.portal.social.networking.ws.methods.v2; package org.gcube.portal.social.networking.ws.methods.v2;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.ValidationException; import javax.validation.ValidationException;
@ -14,12 +17,10 @@ import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam; import javax.ws.rs.QueryParam;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status;
import org.apache.commons.lang.Validate;
import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager; import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager;
import org.gcube.applicationsupportlayer.social.NotificationsManager; import org.gcube.applicationsupportlayer.social.NotificationsManager;
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite; import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite;
@ -30,7 +31,10 @@ import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.authorization.library.utils.Caller; import org.gcube.common.authorization.library.utils.Caller;
import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.common.scope.impl.ScopeBean; import org.gcube.common.scope.impl.ScopeBean;
import org.gcube.portal.databook.shared.*; import org.gcube.portal.databook.shared.Notification;
import org.gcube.portal.databook.shared.NotificationChannelType;
import org.gcube.portal.databook.shared.NotificationType;
import org.gcube.portal.databook.shared.RunningJob;
import org.gcube.portal.notifications.bean.GenericItemBean; import org.gcube.portal.notifications.bean.GenericItemBean;
import org.gcube.portal.notifications.thread.JobStatusNotificationThread; import org.gcube.portal.notifications.thread.JobStatusNotificationThread;
import org.gcube.portal.social.networking.caches.SocialNetworkingSiteFinder; import org.gcube.portal.social.networking.caches.SocialNetworkingSiteFinder;
@ -77,8 +81,8 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes;
*/ */
@Path("2/notifications") @Path("2/notifications")
@RequestHeaders ({ @RequestHeaders ({
@RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"), @RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"),
@RequestHeader( name = "Content-Type", description = "application/json") @RequestHeader( name = "Content-Type", description = "application/json")
}) })
public class Notifications { public class Notifications {
@ -97,15 +101,15 @@ public class Notifications {
@Path("get-range-notifications/") @Path("get-range-notifications/")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Notifications retrieved and reported in the 'result' field of the returned object"), @ResponseCode ( code = 200, condition = "Notifications retrieved and reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getRangeNotifications( public Response getRangeNotifications(
@DefaultValue("1") @QueryParam("from") @Min(value=1, message="from must be greater or equal to 1") @DefaultValue("1") @QueryParam("from") @Min(value=1, message="from must be greater or equal to 1")
int from, int from,
@DefaultValue("10") @QueryParam("quantity") @Min(value=0, message="quantity must be greater or equal to 0") @DefaultValue("10") @QueryParam("quantity") @Min(value=0, message="quantity must be greater or equal to 0")
int quantity int quantity
) throws ValidationException{ ) throws ValidationException{
Caller caller = AuthorizationProvider.instance.get(); Caller caller = AuthorizationProvider.instance.get();
String username = caller.getClient().getId(); String username = caller.getClient().getId();
@ -145,8 +149,8 @@ public class Notifications {
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "true if the notification for the username given as query param are disabled (Catalogue and Workspace ones), false otherwise"), @ResponseCode ( code = 200, condition = "true if the notification for the username given as query param are disabled (Catalogue and Workspace ones), false otherwise"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
@AuthorizationControl(allowedRoles={INFRASTRUCTURE_MANAGER_ROLE}, exception=AuthException.class) @AuthorizationControl(allowedRoles={INFRASTRUCTURE_MANAGER_ROLE}, exception=AuthException.class)
public Response isUserDisabled( public Response isUserDisabled(
@ -273,8 +277,8 @@ public class Notifications {
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Notification is sent correctly"), @ResponseCode ( code = 200, condition = "Notification is sent correctly"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response notifyJobStatus( public Response notifyJobStatus(
@NotNull(message="input is missing") @NotNull(message="input is missing")
@ -329,8 +333,8 @@ public class Notifications {
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Catalogue Notification is sent correctly"), @ResponseCode ( code = 200, condition = "Catalogue Notification is sent correctly"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response catalogue( public Response catalogue(
@NotNull(message="input is missing") @NotNull(message="input is missing")
@ -469,8 +473,8 @@ public class Notifications {
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Workspace Notification is sent correctly"), @ResponseCode ( code = 200, condition = "Workspace Notification is sent correctly"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response workspace( public Response workspace(
@NotNull(message="input is missing") @NotNull(message="input is missing")
@ -589,49 +593,49 @@ public class Notifications {
private boolean notifyWorkspaceEvent(WorkspaceEvent event, NotificationsManager nm, String idToNotify) { private boolean notifyWorkspaceEvent(WorkspaceEvent event, NotificationsManager nm, String idToNotify) {
try { try {
switch (event.getType()) { switch (event.getType()) {
case ITEM_NEW: { case ITEM_NEW: {
AddedItemEvent itemBean = (AddedItemEvent) event; AddedItemEvent itemBean = (AddedItemEvent) event;
return nm.notifyAddedItem(idToNotify, WorkspaceItemMapper.getFileItem(itemBean.getItem()), WorkspaceItemMapper.getSharedFolder(itemBean.getItem().getParent())); return nm.notifyAddedItem(idToNotify, WorkspaceItemMapper.getFileItem(itemBean.getItem()), WorkspaceItemMapper.getSharedFolder(itemBean.getItem().getParent()));
} }
case ITEM_UPDATE: { case ITEM_UPDATE: {
UpdatedItemEvent itemBean = (UpdatedItemEvent) event; UpdatedItemEvent itemBean = (UpdatedItemEvent) event;
return nm.notifyUpdatedItem(idToNotify, WorkspaceItemMapper.getFileItem(itemBean.getItem()), WorkspaceItemMapper.getSharedFolder(itemBean.getItem().getParent())); return nm.notifyUpdatedItem(idToNotify, WorkspaceItemMapper.getFileItem(itemBean.getItem()), WorkspaceItemMapper.getSharedFolder(itemBean.getItem().getParent()));
} }
case ITEM_DELETE: { case ITEM_DELETE: {
DeletedItemEvent itemBean = (DeletedItemEvent) event; DeletedItemEvent itemBean = (DeletedItemEvent) event;
return nm.notifyRemovedItem(idToNotify, itemBean.getItemName(), WorkspaceItemMapper.getSharedFolder(itemBean.getFolder())); return nm.notifyRemovedItem(idToNotify, itemBean.getItemName(), WorkspaceItemMapper.getSharedFolder(itemBean.getFolder()));
} }
case FOLDER_SHARE: { case FOLDER_SHARE: {
SharedFolderEvent itemBean = (SharedFolderEvent) event; SharedFolderEvent itemBean = (SharedFolderEvent) event;
return nm.notifyFolderSharing(idToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder())); return nm.notifyFolderSharing(idToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder()));
} }
case FOLDER_UNSHARE: { case FOLDER_UNSHARE: {
UnsharedFolderEvent itemBean = (UnsharedFolderEvent) event; UnsharedFolderEvent itemBean = (UnsharedFolderEvent) event;
return nm.notifyFolderUnsharing(idToNotify, itemBean.getUnsharedFolderId(), itemBean.getUnsharedFolderName()); return nm.notifyFolderUnsharing(idToNotify, itemBean.getUnsharedFolderId(), itemBean.getUnsharedFolderName());
} }
case FOLDER_RENAME: { case FOLDER_RENAME: {
RenamedFolderEvent itemBean = (RenamedFolderEvent) event; RenamedFolderEvent itemBean = (RenamedFolderEvent) event;
return nm.notifyFolderRenaming(idToNotify, itemBean.getPreviousName(), itemBean.getNewName(), itemBean.getRenamedFolderId()); return nm.notifyFolderRenaming(idToNotify, itemBean.getPreviousName(), itemBean.getNewName(), itemBean.getRenamedFolderId());
} }
case FOLDER_ADMIN_UPGRADE: { case FOLDER_ADMIN_UPGRADE: {
FolderAdminUpgradeEvent itemBean = (FolderAdminUpgradeEvent) event; FolderAdminUpgradeEvent itemBean = (FolderAdminUpgradeEvent) event;
return nm.notifyAdministratorUpgrade(idToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder())); return nm.notifyAdministratorUpgrade(idToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder()));
} }
case FOLDER_ADMIN_DOWNGRADE: { case FOLDER_ADMIN_DOWNGRADE: {
FolderAdminDowngradeEvent itemBean = (FolderAdminDowngradeEvent) event; FolderAdminDowngradeEvent itemBean = (FolderAdminDowngradeEvent) event;
return nm.notifyAdministratorDowngrade(idToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder())); return nm.notifyAdministratorDowngrade(idToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder()));
} }
case FOLDER_ADDEDUSER: { case FOLDER_ADDEDUSER: {
FolderAddedUserEvent itemBean = (FolderAddedUserEvent) event; FolderAddedUserEvent itemBean = (FolderAddedUserEvent) event;
UserManager userManager = UserManagerWSBuilder.getInstance().getUserManager(); UserManager userManager = UserManagerWSBuilder.getInstance().getUserManager();
return nm.notifyFolderAddedUsers(idToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder()), itemBean.getNewAddedUserIds(), userManager); return nm.notifyFolderAddedUsers(idToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder()), itemBean.getNewAddedUserIds(), userManager);
} }
case FOLDER_REMOVEDUSER: { case FOLDER_REMOVEDUSER: {
FolderRemovedUserEvent itemBean = (FolderRemovedUserEvent) event; FolderRemovedUserEvent itemBean = (FolderRemovedUserEvent) event;
return nm.notifyFolderRemovedUser(idToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder())); return nm.notifyFolderRemovedUser(idToNotify, WorkspaceItemMapper.getSharedFolder(itemBean.getFolder()));
} }
default: default:
break; break;
} }
} catch(Exception e){ } catch(Exception e){
logger.error("Unable to send job notification", e); logger.error("Unable to send job notification", e);
@ -672,6 +676,7 @@ public class Notifications {
//library api //library api
@POST @POST
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@ -970,4 +975,5 @@ public class Notifications {
} }
return Response.status(status).entity(responseBean).build(); return Response.status(status).entity(responseBean).build();
} }
} }

View File

@ -2,7 +2,6 @@ package org.gcube.portal.social.networking.ws.methods.v2;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -17,12 +16,10 @@ import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam; import javax.ws.rs.QueryParam;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status;
import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.AuthorizationProvider; import org.gcube.common.authorization.library.provider.AuthorizationProvider;
import org.gcube.common.authorization.library.utils.Caller; import org.gcube.common.authorization.library.utils.Caller;
import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.api.ScopeProvider;
@ -32,7 +29,6 @@ import org.gcube.portal.databook.shared.ex.ColumnNameNotFoundException;
import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException; import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException;
import org.gcube.portal.databook.shared.ex.FeedTypeNotFoundException; import org.gcube.portal.databook.shared.ex.FeedTypeNotFoundException;
import org.gcube.portal.databook.shared.ex.PrivacyLevelTypeNotFoundException; import org.gcube.portal.databook.shared.ex.PrivacyLevelTypeNotFoundException;
import org.gcube.portal.social.networking.ws.inputs.PostId;
import org.gcube.portal.social.networking.ws.inputs.PostInputBean; import org.gcube.portal.social.networking.ws.inputs.PostInputBean;
import org.gcube.portal.social.networking.ws.outputs.ResponseBean; 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.CassandraConnection;
@ -51,8 +47,8 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes;
*/ */
@Path("2/posts") @Path("2/posts")
@RequestHeaders ({ @RequestHeaders ({
@RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"), @RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"),
@RequestHeader( name = "Content-Type", description = "application/json") @RequestHeader( name = "Content-Type", description = "application/json")
}) })
public class Posts { public class Posts {
@ -69,13 +65,13 @@ public class Posts {
@Path("get-posts-user-since/") @Path("get-posts-user-since/")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Successful retrieval of posts, reported in the 'result' field of the returned object"), @ResponseCode ( code = 200, condition = "Successful retrieval of posts, reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getRecentPostsByUserAndDate( public Response getRecentPostsByUserAndDate(
@QueryParam("time") @Min(value = 0, message="time cannot be negative") @QueryParam("time") @Min(value = 0, message="time cannot be negative")
long timeInMillis long timeInMillis
) throws ValidationException{ ) throws ValidationException{
ResponseBean responseBean = new ResponseBean(); ResponseBean responseBean = new ResponseBean();
Status status = Status.OK; Status status = Status.OK;
@ -112,8 +108,8 @@ public class Posts {
@Path("get-posts-user/") @Path("get-posts-user/")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Successful retrieval of posts, reported in the 'result' field of the returned object"), @ResponseCode ( code = 200, condition = "Successful retrieval of posts, reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getAllPostsByUser() { public Response getAllPostsByUser() {
@ -149,8 +145,8 @@ public class Posts {
@Path("get-post/") @Path("get-post/")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Successful retrieval of posts, reported in the 'result' field of the returned object"), @ResponseCode ( code = 200, condition = "Successful retrieval of posts, reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getPost(@QueryParam("id") String id) { public Response getPost(@QueryParam("id") String id) {
String context = ScopeProvider.instance.get(); String context = ScopeProvider.instance.get();
@ -199,8 +195,8 @@ public class Posts {
@Path("get-posts-user-quantity/") @Path("get-posts-user-quantity/")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Successful retrieval of posts, reported in the 'result' field of the returned object"), @ResponseCode ( code = 200, condition = "Successful retrieval of posts, reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getQuantityPostsByUser( public Response getQuantityPostsByUser(
@DefaultValue("10") @DefaultValue("10")
@ -253,8 +249,8 @@ public class Posts {
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 201, condition = "Successfull created, the new post is reported in the 'result' field of the returned object"), @ResponseCode ( code = 201, condition = "Successfull created, the new post is reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response writePostUser( public Response writePostUser(
@NotNull(message="Post to write is missing") @NotNull(message="Post to write is missing")
@ -296,7 +292,7 @@ public class Posts {
previewUrl, previewUrl,
httpImageUrl, httpImageUrl,
enableNotification enableNotification
); );
if(res != null){ if(res != null){
logger.debug("Post correctly written by user " + username); logger.debug("Post correctly written by user " + username);
@ -322,9 +318,9 @@ public class Posts {
@Path("get-posts-app/") @Path("get-posts-app/")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Successfull created, the new post is reported in the 'result' field of the returned object"), @ResponseCode ( code = 200, condition = "Successfull created, the new post is reported in the 'result' field of the returned object"),
@ResponseCode ( code = 403, condition = "\"There is no application profile with such token"), @ResponseCode ( code = 403, condition = "\"There is no application profile with such token"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getAllPostsByApp() { public Response getAllPostsByApp() {
@ -375,9 +371,9 @@ public class Posts {
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Successfull created, the new post is reported in the 'result' field of the returned object"), @ResponseCode ( code = 200, condition = "Successfull created, the new post is reported in the 'result' field of the returned object"),
@ResponseCode ( code = 403, condition = "\"There is no application profile with such token"), @ResponseCode ( code = 403, condition = "\"There is no application profile with such token"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response writePostApp( public Response writePostApp(
@NotNull(message="Post to write is null") @NotNull(message="Post to write is null")
@ -427,7 +423,7 @@ public class Posts {
appProfile, appProfile,
caller, caller,
enableNotification enableNotification
); );
if(written != null){ if(written != null){
responseBean.setResult(written); responseBean.setResult(written);
@ -450,8 +446,8 @@ public class Posts {
@Path("get-posts-vre/") @Path("get-posts-vre/")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 201, condition = "Sccessfull retrieved posts, they are reported in the 'result' field of the returned object"), @ResponseCode ( code = 201, condition = "Sccessfull retrieved posts, they are reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getAllPostsByVRE() { public Response getAllPostsByVRE() {
@ -491,8 +487,8 @@ public class Posts {
@Path("get-recent-posts-vre-by-range/") @Path("get-recent-posts-vre-by-range/")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 201, condition = "Sccessfull retrieved posts, they are reported in the 'result' field of the returned object"), @ResponseCode ( code = 201, condition = "Sccessfull retrieved posts, they are reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getRecentPostsByVREAndRange( public Response getRecentPostsByVREAndRange(
@QueryParam("from") @QueryParam("from")
@ -533,8 +529,8 @@ public class Posts {
@Path("get-posts-by-hashtag/") @Path("get-posts-by-hashtag/")
@Produces({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON})
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 201, condition = "Sccessfull retrieved posts, they are reported in the 'result' field of the returned object"), @ResponseCode ( code = 201, condition = "Sccessfull retrieved posts, they are reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getPostsByHashTags( public Response getPostsByHashTags(
@QueryParam("hashtag") @QueryParam("hashtag")
@ -569,8 +565,8 @@ public class Posts {
@Path("get-id-liked-posts/") @Path("get-id-liked-posts/")
@Produces({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON})
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 201, condition = "Sccessfull retrieved ids, they are reported in the 'result' field of the returned object"), @ResponseCode ( code = 201, condition = "Sccessfull retrieved ids, they are reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getAllLikedPostIdsByUser() { public Response getAllLikedPostIdsByUser() {
@ -610,8 +606,8 @@ public class Posts {
@Path("get-liked-posts/") @Path("get-liked-posts/")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({ @StatusCodes ({
@ResponseCode ( code = 200, condition = "Successfull retrieved posts, they are reported in the 'result' field of the returned object"), @ResponseCode ( code = 200, condition = "Successfull retrieved posts, they are reported in the 'result' field of the returned object"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
}) })
public Response getAllLikedPostsByUser( public Response getAllLikedPostsByUser(
@DefaultValue("10") @DefaultValue("10")
@ -646,6 +642,7 @@ public class Posts {
//library api //library api
@POST @POST
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@ -883,7 +880,7 @@ public class Posts {
public Response getAllPostsByAppLib( public Response getAllPostsByAppLib(
@QueryParam("appid") @QueryParam("appid")
String appid String appid
) throws ValidationException{ ) throws ValidationException{
ResponseBean responseBean = new ResponseBean(); ResponseBean responseBean = new ResponseBean();
Status status = Status.OK; Status status = Status.OK;
try{ try{
@ -980,7 +977,7 @@ public class Posts {
public Response getAllPostsByVRELib( public Response getAllPostsByVRELib(
@QueryParam("vreid") @QueryParam("vreid")
String vreid String vreid
) throws ValidationException{ ) throws ValidationException{
ResponseBean responseBean = new ResponseBean(); ResponseBean responseBean = new ResponseBean();
Status status = Status.OK; Status status = Status.OK;
try{ try{