diff --git a/pom.xml b/pom.xml
index c28b1ef..4ca2639 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,6 +70,11 @@
provided
+
+ org.gcube.social-networking
+ social-service-model
+ [1.1.0-SNAPSHOT, 2.0.0)
+
net.sf.ehcache
ehcache
@@ -302,7 +307,6 @@
- ${project.name}
@@ -345,6 +349,24 @@
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+
+ -Xdoclint:none
+ -Xdoclint:none
+
+ 3.1.0
+
+
+ generate-doc
+ install
+
+ jar
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portal/social/networking/ws/mappers/WorkspaceItemMapper.java b/src/main/java/org/gcube/portal/social/networking/ws/mappers/WorkspaceItemMapper.java
new file mode 100644
index 0000000..11683d9
--- /dev/null
+++ b/src/main/java/org/gcube/portal/social/networking/ws/mappers/WorkspaceItemMapper.java
@@ -0,0 +1,57 @@
+package org.gcube.portal.social.networking.ws.mappers;
+
+import org.gcube.applicationsupportlayer.social.shared.SocialFileItem;
+import org.gcube.applicationsupportlayer.social.shared.SocialSharedFolder;
+import org.gcube.social_networking.socialnetworking.model.beans.SharedFolderBean;
+import org.gcube.social_networking.socialnetworking.model.beans.WorkspaceFileItemBean;
+
+public class WorkspaceItemMapper {
+
+ public WorkspaceItemMapper() {
+ // TODO Auto-generated constructor stub
+ }
+
+ public static SocialFileItem getFileItem(WorkspaceFileItemBean item) {
+ String id = null;
+ String name= null;
+ String title= null;
+ String path= null;
+ SocialSharedFolder parent = null;
+
+ try {
+ id = item.getId();
+ name = item.getName();
+ title = item.getTitle();
+ path = item.getPath();
+ parent = getSharedFolder(item.getParent());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ SocialFileItem toReturn = new SocialFileItem(id, name, title, path, parent);
+ return toReturn;
+ }
+
+ public static SocialSharedFolder getSharedFolder(SharedFolderBean item) {
+
+ String id = null;
+ String name= null;
+ String title= null;
+ String displayName= null;
+ String path= null;
+ String parentId= null;
+ boolean vreFolder = false;
+ try {
+ id = item.getId();
+ name = item.getName();
+ title = item.getTitle();
+ displayName = item.getDisplayName();
+ path = item.getPath();
+ parentId = item.getParentId();
+ vreFolder = item.isVreFolder();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ SocialSharedFolder toReturn = new SocialSharedFolder(id, name, title, displayName, path, parentId, vreFolder);
+ return toReturn;
+ }
+}
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 3e69518..d5e90be 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
@@ -20,8 +20,10 @@ import javax.ws.rs.core.Response.Status;
import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager;
import org.gcube.applicationsupportlayer.social.NotificationsManager;
+import org.gcube.applicationsupportlayer.social.shared.SocialFileItem;
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite;
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser;
+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;
@@ -33,12 +35,15 @@ import org.gcube.portal.social.networking.caches.SocialNetworkingSiteFinder;
import org.gcube.portal.social.networking.liferay.ws.LiferayJSONWsCredentials;
import org.gcube.portal.social.networking.liferay.ws.UserManagerWSBuilder;
import org.gcube.portal.social.networking.ws.inputs.JobNotificationBean;
-import org.gcube.portal.social.networking.ws.model.AddFileNotificationBean;
-import org.gcube.portal.social.networking.ws.model.AddFolderNotificationBean;
-import org.gcube.portal.social.networking.ws.model.NotificationMessage;
+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.WorkspaceFileItemBean;
+import org.gcube.social_networking.socialnetworking.model.beans.WorkspaceNotificationMessage;
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
import org.slf4j.LoggerFactory;
@@ -52,9 +57,9 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes;
*/
@Path("2/notifications")
@RequestHeaders ({
- @RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"),
- @RequestHeader( name = "Content-Type", description = "application/json")
- })
+ @RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"),
+ @RequestHeader( name = "Content-Type", description = "application/json")
+})
public class Notifications {
// Logger
@@ -160,23 +165,23 @@ public class Notifications {
}
/**
- * Send a JOB notification to a given recipient
- * @param job The job bean
+ * Send a Workspace notification to a given user
+ * @param message
* @return
* @throws ValidationException
*/
@POST
- @Path("notify/")
+ @Path("notify-ws/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@StatusCodes ({
- @ResponseCode ( code = 200, condition = "Notification is sent correctly"),
+ @ResponseCode ( code = 200, condition = "Workspace Notification is sent correctly"),
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
})
- public Response notify(
+ public Response notifyWs(
@NotNull(message="input is missing")
@Valid
- NotificationMessage message) throws ValidationException{
+ WorkspaceNotificationMessage message) throws ValidationException{
Caller caller = AuthorizationProvider.instance.get();
String context = ScopeProvider.instance.get();
@@ -185,12 +190,80 @@ public class Notifications {
//invalid call
return Response.status(Status.BAD_REQUEST).build();
}
-
- //TODO: call notification method
-
- return Response.ok().build();
+
+ ResponseBean responseBean = new ResponseBean();
+ Status status = Status.OK;
+
+ try{
+ 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()));
+ break;
+
+ default:
+ break;
+ }
+ } 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();
}
-
-
-
+
+ /**
+ * 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();
+ }
+
+
}
diff --git a/src/main/java/org/gcube/portal/social/networking/ws/model/AddFileNotificationBean.java b/src/main/java/org/gcube/portal/social/networking/ws/model/AddFileNotificationBean.java
deleted file mode 100644
index 9a02c47..0000000
--- a/src/main/java/org/gcube/portal/social/networking/ws/model/AddFileNotificationBean.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.gcube.portal.social.networking.ws.model;
-
-public class AddFileNotificationBean implements NotificationBean {
-
- private String filename;
-
- public AddFileNotificationBean(String filename) {
- this.filename = filename;
- }
-
- public String getFilename() {
- return filename;
- }
-
-
-}
diff --git a/src/main/java/org/gcube/portal/social/networking/ws/model/AddFolderNotificationBean.java b/src/main/java/org/gcube/portal/social/networking/ws/model/AddFolderNotificationBean.java
deleted file mode 100644
index 13f202a..0000000
--- a/src/main/java/org/gcube/portal/social/networking/ws/model/AddFolderNotificationBean.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.gcube.portal.social.networking.ws.model;
-
-public class AddFolderNotificationBean implements NotificationBean {
-
- private String foldername;
-
- public AddFolderNotificationBean(String foldername) {
- this.foldername = foldername;
- }
-
- public String getFoldername() {
- return foldername;
- }
-
-}
diff --git a/src/main/java/org/gcube/portal/social/networking/ws/model/NotificationBean.java b/src/main/java/org/gcube/portal/social/networking/ws/model/NotificationBean.java
deleted file mode 100644
index 410fe02..0000000
--- a/src/main/java/org/gcube/portal/social/networking/ws/model/NotificationBean.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.gcube.portal.social.networking.ws.model;
-
-interface NotificationBean {
-
-}
diff --git a/src/main/java/org/gcube/portal/social/networking/ws/model/NotificationMessage.java b/src/main/java/org/gcube/portal/social/networking/ws/model/NotificationMessage.java
deleted file mode 100644
index be295da..0000000
--- a/src/main/java/org/gcube/portal/social/networking/ws/model/NotificationMessage.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.gcube.portal.social.networking.ws.model;
-
-public class NotificationMessage {
-
- private NotificationType type;
-
- private NotificationBean bean;
-
- public NotificationMessage(NotificationType type, NotificationBean bean) {
- super();
- this.type = type;
- this.bean = bean;
- }
-
- public NotificationType getType() {
- return type;
- }
-
- public NotificationBean getBean() {
- return bean;
- }
-
-
-
-}
diff --git a/src/main/java/org/gcube/portal/social/networking/ws/model/NotificationType.java b/src/main/java/org/gcube/portal/social/networking/ws/model/NotificationType.java
deleted file mode 100644
index fdb33c7..0000000
--- a/src/main/java/org/gcube/portal/social/networking/ws/model/NotificationType.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.gcube.portal.social.networking.ws.model;
-
-public enum NotificationType {
-
- AddFileToWS(AddFileNotificationBean.class),
- AddFolderToWS(AddFolderNotificationBean.class);
-
-
- Class extends NotificationBean> beanClass;
-
- NotificationType(Class extends NotificationBean> beanClass){
- this.beanClass = beanClass;
- }
-
-
- public Class extends NotificationBean> getNotificationClass(){
- return this.beanClass;
- }
-
-}