From 1272ecae18fe24fe5c29db4e375fd365daba4823 Mon Sep 17 00:00:00 2001 From: Costantino Perciante Date: Fri, 16 Feb 2018 18:22:14 +0000 Subject: [PATCH] lot to do git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/social-networking/social-networking-client-library@163348 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 29 ++--- .../BaseClient.java | 9 +- .../FullTextSearchClient.java | 20 ++-- .../HashTagsClient.java | 8 +- .../MessagesClient.java | 11 +- .../NotificationsClient.java | 13 ++- .../PeopleClient.java | 6 +- .../PostsClient.java | 33 +++--- .../TokensClient.java | 5 +- .../UsersClient.java | 25 ++--- .../VREsClient.java | 5 +- .../exceptions/NoSocialServiceAvailable.java | 15 +++ .../utils/HttpClient.java | 106 ++++++++++++------ .../utils/ServiceDiscoverer.java | 8 +- .../TestClientServices.java | 78 +++++++++---- 15 files changed, 235 insertions(+), 136 deletions(-) create mode 100644 src/main/java/org/gcube/portal/social_networking_client_library/exceptions/NoSocialServiceAvailable.java diff --git a/pom.xml b/pom.xml index bd1c536..32880a7 100644 --- a/pom.xml +++ b/pom.xml @@ -24,12 +24,20 @@ pom import + + org.gcube.distribution + gcube-portal-bom + LATEST + pom + import + 1.7 - 2.25.1 + 2.9 + 2.0.1 ${project.basedir}/distro social-networking ${project.build.directory}/${project.build.finalName} @@ -48,19 +56,16 @@ org.gcube.common home-library - [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) compile org.gcube.common home-library-jcr - [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) compile org.gcube.portal social-networking-library - [1.0.0-SNAPSHOT,) compile @@ -73,23 +78,22 @@ social-networking-service-model [1.0.0-SNAPSHOT,) - - org.glassfish.jersey.ext - jersey-bean-validation - ${version.jersey} - provided - + + + + + org.glassfish.jersey.media jersey-media-json-jackson ${version.jersey} - provided + compile org.glassfish.jersey.core jersey-client ${version.jersey} - provided + compile org.slf4j @@ -99,7 +103,6 @@ org.slf4j slf4j-log4j12 - 1.6.4 provided diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/BaseClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/BaseClient.java index 0dbc18b..201eefd 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/BaseClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/BaseClient.java @@ -1,6 +1,8 @@ package org.gcube.portal.social_networking_client_library; import org.gcube.portal.social_networking_client_library.utils.ServiceDiscoverer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Base client service. @@ -8,13 +10,16 @@ import org.gcube.portal.social_networking_client_library.utils.ServiceDiscoverer */ public abstract class BaseClient { + private static Logger logger = LoggerFactory.getLogger(BaseClient.class); private String serviceEndpoint; public BaseClient(String subPath) throws Exception { - ServiceDiscoverer discover = new ServiceDiscoverer(); - serviceEndpoint = discover.getEntryPoint(); + ServiceDiscoverer discoverer = new ServiceDiscoverer(); + logger.debug("Discovering service..."); + serviceEndpoint = discoverer.getEntryPoint(); serviceEndpoint = serviceEndpoint.endsWith("/") ? serviceEndpoint + subPath : serviceEndpoint + "/" + subPath; + logger.debug("Discovered service " + serviceEndpoint); } public String getServiceEndpoint() { diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/FullTextSearchClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/FullTextSearchClient.java index 6791d1c..e05e0d9 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/FullTextSearchClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/FullTextSearchClient.java @@ -3,12 +3,14 @@ package org.gcube.portal.social_networking_client_library; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; -import java.util.List; + +import javax.ws.rs.core.GenericType; import org.apache.commons.lang.Validate; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.portal.databook.shared.EnhancedFeed; import org.gcube.portal.social_networking_client_library.utils.HttpClient; +import org.gcube.portal.socialnetworking.model.output.ResponseBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,12 +22,11 @@ public class FullTextSearchClient extends BaseClient{ private static final String SUB_SERVICE_PATH = "2/full-text-search/"; private static Logger logger = LoggerFactory.getLogger(FullTextSearchClient.class); - - + public FullTextSearchClient() throws Exception { super(SUB_SERVICE_PATH); } - + /** * Perform a search query over social data * @param query @@ -34,18 +35,17 @@ public class FullTextSearchClient extends BaseClient{ * @return a list of matching posts * @throws UnsupportedEncodingException */ - @SuppressWarnings("unchecked") - public List search(String query, int from, int quantity) throws UnsupportedEncodingException{ - + public ArrayList search(String query, int from, int quantity) throws UnsupportedEncodingException{ + Validate.isTrue(query != null, "Query cannot be null"); Validate.isTrue(from >= 0, "From needs to be greater or equal to zero"); Validate.isTrue(quantity >= 0, "Quantity needs to be greater or equal to zero"); - + logger.debug("Request for query " + query + " and from " + from + " and quantity is " + quantity); String thisMethodSignature = "search-by-query"; String request = getServiceEndpoint() + thisMethodSignature + "?" + "query=" + URLEncoder.encode(query, "UTF-8") + "&from=" + from + "&quantity=" + quantity; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); - + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); + } } diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/HashTagsClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/HashTagsClient.java index 904154c..e5b1c86 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/HashTagsClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/HashTagsClient.java @@ -3,8 +3,11 @@ package org.gcube.portal.social_networking_client_library; import java.util.HashMap; import java.util.Map; +import javax.ws.rs.core.GenericType; + import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.portal.social_networking_client_library.utils.HttpClient; +import org.gcube.portal.socialnetworking.model.output.ResponseBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,14 +29,11 @@ public class HashTagsClient extends BaseClient{ * Get hashtags and their count * @return a map of type hashtag -> number */ - @SuppressWarnings("unchecked") public Map getHashtagsCount(){ - logger.debug("Request for hastags"); String thisMethodSignature = "get-hashtags-and-occurrences"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new HashMap(0).getClass(), request, SecurityTokenProvider.instance.get()); - + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/MessagesClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/MessagesClient.java index 24e028c..d2dd0a7 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/MessagesClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/MessagesClient.java @@ -3,11 +3,14 @@ package org.gcube.portal.social_networking_client_library; import java.util.ArrayList; import java.util.List; +import javax.ws.rs.core.GenericType; + import org.apache.commons.lang.Validate; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.homelibrary.home.workspace.sharing.WorkspaceMessage; import org.gcube.portal.social_networking_client_library.utils.HttpClient; import org.gcube.portal.socialnetworking.model.input.MessageInputBean; +import org.gcube.portal.socialnetworking.model.output.ResponseBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,13 +32,12 @@ public class MessagesClient extends BaseClient{ * Get sent messages * @return */ - @SuppressWarnings("unchecked") public List getSentMessages(){ logger.debug("Request for sent messages"); String thisMethodSignature = "get-sent-messages"; String request = getServiceEndpoint() + thisMethodSignature + "?"; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -43,13 +45,12 @@ public class MessagesClient extends BaseClient{ * Get received messages * @return */ - @SuppressWarnings("unchecked") public List getReceivedMessages(){ logger.debug("Request for received messages"); String thisMethodSignature = "get-received-messages"; String request = getServiceEndpoint() + thisMethodSignature + "?"; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -64,7 +65,7 @@ public class MessagesClient extends BaseClient{ logger.debug("Request for writing new message"); String thisMethodSignature = "write-message"; String request = getServiceEndpoint() + thisMethodSignature + "?"; - return HttpClient.post(String.class, request, SecurityTokenProvider.instance.get(), m); + return HttpClient.post(new GenericType>(){}, request, SecurityTokenProvider.instance.get(), m); } } diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/NotificationsClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/NotificationsClient.java index 9daebf0..8f404da 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/NotificationsClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/NotificationsClient.java @@ -3,11 +3,14 @@ package org.gcube.portal.social_networking_client_library; import java.util.ArrayList; import java.util.List; +import javax.ws.rs.core.GenericType; + import org.apache.commons.lang.Validate; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.portal.databook.shared.Notification; import org.gcube.portal.social_networking_client_library.utils.HttpClient; import org.gcube.portal.socialnetworking.model.input.JobNotificationBean; +import org.gcube.portal.socialnetworking.model.output.ResponseBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,20 +30,19 @@ public class NotificationsClient extends BaseClient{ /** * Get range notifications - * @param from + * @param from greater or equal to one * @param quantity * @return */ - @SuppressWarnings("unchecked") public List getNotifications(int from, int quantity){ - Validate.isTrue(from >= 0, "From cannot be negative"); + Validate.isTrue(from >= 1, "From cannot be negative"); Validate.isTrue(from >= 0, "Quantity cannot be negative"); logger.debug("Request for getting notifications"); String thisMethodSignature = "get-range-notifications"; String request = getServiceEndpoint() + thisMethodSignature + "?from=" + from + "&quantity=" +quantity; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -52,11 +54,10 @@ public class NotificationsClient extends BaseClient{ public void sendJobNotification(JobNotificationBean notification){ Validate.isTrue(notification != null, "Notification cannot be null"); - logger.debug("Request for getting notifications"); String thisMethodSignature = "notify-job-status"; String request = getServiceEndpoint() + thisMethodSignature; - HttpClient.post(Void.class, request, SecurityTokenProvider.instance.get(), notification); + HttpClient.post(new GenericType>(){}, request, SecurityTokenProvider.instance.get(), notification); } diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/PeopleClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/PeopleClient.java index 26d9396..0889779 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/PeopleClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/PeopleClient.java @@ -1,7 +1,10 @@ package org.gcube.portal.social_networking_client_library; +import javax.ws.rs.core.GenericType; + import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.portal.social_networking_client_library.utils.HttpClient; +import org.gcube.portal.socialnetworking.model.output.ResponseBean; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,8 +32,7 @@ public class PeopleClient extends BaseClient{ logger.debug("Request for getting profile"); String thisMethodSignature = "profile"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(JSONObject.class, request, SecurityTokenProvider.instance.get()); - + return HttpClient.get(new GenericType>(){}, request, SecurityTokenProvider.instance.get()); } } diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/PostsClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/PostsClient.java index 1fce66b..775f688 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/PostsClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/PostsClient.java @@ -3,11 +3,14 @@ package org.gcube.portal.social_networking_client_library; import java.util.ArrayList; import java.util.List; +import javax.ws.rs.core.GenericType; + import org.apache.commons.lang.Validate; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.portal.databook.shared.Feed; import org.gcube.portal.social_networking_client_library.utils.HttpClient; import org.gcube.portal.socialnetworking.model.input.PostInputBean; +import org.gcube.portal.socialnetworking.model.output.ResponseBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,7 +32,6 @@ public class PostsClient extends BaseClient{ * Get posts since date * @return */ - @SuppressWarnings("unchecked") public List getPostsSinceDate(long timeInMillis){ Validate.isTrue(timeInMillis >= 0, "time cannot be negative"); @@ -37,7 +39,7 @@ public class PostsClient extends BaseClient{ logger.debug("Request for getting posts"); String thisMethodSignature = "get-posts-user-since"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -45,7 +47,6 @@ public class PostsClient extends BaseClient{ * Get all posts * @return */ - @SuppressWarnings("unchecked") public List getAllPosts(long timeInMillis){ Validate.isTrue(timeInMillis >= 0, "time cannot be negative"); @@ -53,7 +54,7 @@ public class PostsClient extends BaseClient{ logger.debug("Request for getting posts"); String thisMethodSignature = "get-posts-user"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -61,7 +62,6 @@ public class PostsClient extends BaseClient{ * Get posts quantity * @return */ - @SuppressWarnings("unchecked") public List getPostsQuantity(int quantity){ Validate.isTrue(quantity >= 0, "quantity cannot be negative"); @@ -69,7 +69,7 @@ public class PostsClient extends BaseClient{ logger.debug("Request for getting posts"); String thisMethodSignature = "get-posts-user-quantity"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -84,7 +84,7 @@ public class PostsClient extends BaseClient{ logger.debug("Request for writing post"); String thisMethodSignature = "write-post-user"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.post(Feed.class, request, SecurityTokenProvider.instance.get(), toWrite); + return HttpClient.post(new GenericType>(){}, request, SecurityTokenProvider.instance.get(), toWrite); } @@ -92,13 +92,12 @@ public class PostsClient extends BaseClient{ * Get posts application (token set must belong to the application) * @return */ - @SuppressWarnings("unchecked") public List getAllApplicationPosts(){ logger.debug("Request for getting posts"); String thisMethodSignature = "get-posts-app"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -113,7 +112,7 @@ public class PostsClient extends BaseClient{ logger.debug("Request for writing application post"); String thisMethodSignature = "write-post-app"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.post(Feed.class, request, SecurityTokenProvider.instance.get(), toWrite); + return HttpClient.post(new GenericType>(){}, request, SecurityTokenProvider.instance.get(), toWrite); } @@ -121,13 +120,12 @@ public class PostsClient extends BaseClient{ * Get posts vre * @return */ - @SuppressWarnings("unchecked") public List getPostsVRE(){ logger.debug("Request for getting posts vre"); String thisMethodSignature = "get-posts-vre"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -135,7 +133,6 @@ public class PostsClient extends BaseClient{ * Get posts hashtag * @return */ - @SuppressWarnings("unchecked") public List getHashtagPosts(String hashtag){ Validate.isTrue(hashtag != null, "hashtag cannot be null"); @@ -143,21 +140,20 @@ public class PostsClient extends BaseClient{ logger.debug("Request for getting posts with hashtag " + hashtag); String thisMethodSignature = "get-posts-by-hashtag"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } - + /** * Get liked posts * @return */ - @SuppressWarnings("unchecked") public List getLikedPost(){ logger.debug("Request for getting posts liked"); String thisMethodSignature = "get-liked-posts"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -165,13 +161,12 @@ public class PostsClient extends BaseClient{ * Get liked posts ids * @return */ - @SuppressWarnings("unchecked") public List getLikedPostIds(){ logger.debug("Request for getting posts liked"); String thisMethodSignature = "get-id-liked-posts"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/TokensClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/TokensClient.java index ff481ab..b1e17eb 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/TokensClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/TokensClient.java @@ -1,9 +1,12 @@ package org.gcube.portal.social_networking_client_library; +import javax.ws.rs.core.GenericType; + import org.apache.commons.lang.Validate; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.portal.social_networking_client_library.utils.HttpClient; import org.gcube.portal.socialnetworking.model.input.ApplicationId; +import org.gcube.portal.socialnetworking.model.output.ResponseBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,7 +35,7 @@ public class TokensClient extends BaseClient{ logger.debug("Request for writing new message"); String thisMethodSignature = "generate-application-token"; String request = getServiceEndpoint() + thisMethodSignature + "?"; - return HttpClient.post(String.class, request, SecurityTokenProvider.instance.get(), appId); + return HttpClient.post(new GenericType>(){}, request, SecurityTokenProvider.instance.get(), appId); } diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/UsersClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/UsersClient.java index 45bd01b..5cd150d 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/UsersClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/UsersClient.java @@ -5,9 +5,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.ws.rs.core.GenericType; + import org.apache.commons.lang.Validate; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.portal.social_networking_client_library.utils.HttpClient; +import org.gcube.portal.socialnetworking.model.output.ResponseBean; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,7 +40,7 @@ public class UsersClient extends BaseClient{ logger.debug("Request for attribute value"); String thisMethodSignature = "get-custom-attribute"; String request = getServiceEndpoint() + thisMethodSignature + "?attribute=" + attributeKey; - return HttpClient.get(String.class, request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>(){}, request, SecurityTokenProvider.instance.get()); } @@ -50,7 +53,7 @@ public class UsersClient extends BaseClient{ logger.debug("Request for fullname"); String thisMethodSignature = "get-fullname"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(String.class, request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>(){}, request, SecurityTokenProvider.instance.get()); } @@ -63,7 +66,7 @@ public class UsersClient extends BaseClient{ logger.debug("Request for email"); String thisMethodSignature = "get-email"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(String.class, request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>(){}, request, SecurityTokenProvider.instance.get()); } @@ -76,7 +79,7 @@ public class UsersClient extends BaseClient{ logger.debug("Request for getting profile"); String thisMethodSignature = "get-profile"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(JSONObject.class, request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>(){}, request, SecurityTokenProvider.instance.get()); } @@ -84,13 +87,12 @@ public class UsersClient extends BaseClient{ * Get all usernames in this context * @return */ - @SuppressWarnings("unchecked") public List getAllUsernamesContext(){ logger.debug("Request for getting usernames in this context"); String thisMethodSignature = "get-all-usernames"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -98,13 +100,12 @@ public class UsersClient extends BaseClient{ * Get all usernames and fullnames in this context * @return */ - @SuppressWarnings("unchecked") public Map getAllUsernamesFullnamesContext(){ logger.debug("Request for getting usernames and fullnames in this context"); String thisMethodSignature = "get-all-fullnames-and-usernames"; String request = getServiceEndpoint() + thisMethodSignature; - return HttpClient.get(new HashMap(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -112,7 +113,6 @@ public class UsersClient extends BaseClient{ * Get usernames by global role * @return */ - @SuppressWarnings("unchecked") public List getAllUsernamesByGlobalRole(String globalRole){ Validate.isTrue(globalRole != null, "role cannot be null"); @@ -120,7 +120,7 @@ public class UsersClient extends BaseClient{ logger.debug("Request for getting usernames with global role"); String thisMethodSignature = "get-usernames-by-global-role"; String request = getServiceEndpoint() + thisMethodSignature + "?role-name=" + globalRole; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -128,7 +128,6 @@ public class UsersClient extends BaseClient{ * Get usernames by local role * @return */ - @SuppressWarnings("unchecked") public List getAllUsernamesByLocalRole(String localRole){ Validate.isTrue(localRole != null, "role cannot be null"); @@ -136,7 +135,7 @@ public class UsersClient extends BaseClient{ logger.debug("Request for getting usernames with global role"); String thisMethodSignature = "get-usernames-by-role"; String request = getServiceEndpoint() + thisMethodSignature + "?role-name=" + localRole; - return HttpClient.get(new ArrayList(0).getClass(), request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>>(){}, request, SecurityTokenProvider.instance.get()); } @@ -151,7 +150,7 @@ public class UsersClient extends BaseClient{ logger.debug("Request for getting usernames with global role"); String thisMethodSignature = "user-exists"; String request = getServiceEndpoint() + thisMethodSignature + "?username=" + username; - return HttpClient.get(Boolean.class, request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>(){}, request, SecurityTokenProvider.instance.get()); } diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/VREsClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/VREsClient.java index 0371b61..bfdf0a2 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/VREsClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/VREsClient.java @@ -1,7 +1,10 @@ package org.gcube.portal.social_networking_client_library; +import javax.ws.rs.core.GenericType; + import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.portal.social_networking_client_library.utils.HttpClient; +import org.gcube.portal.socialnetworking.model.output.ResponseBean; import org.json.JSONArray; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,7 +32,7 @@ public class VREsClient extends BaseClient{ logger.debug("Request for writing new message"); String thisMethodSignature = "get-my-vres"; String request = getServiceEndpoint() + thisMethodSignature + "?"; - return HttpClient.get(JSONArray.class, request, SecurityTokenProvider.instance.get()); + return HttpClient.get(new GenericType>(){}, request, SecurityTokenProvider.instance.get()); } diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/exceptions/NoSocialServiceAvailable.java b/src/main/java/org/gcube/portal/social_networking_client_library/exceptions/NoSocialServiceAvailable.java new file mode 100644 index 0000000..85eb05d --- /dev/null +++ b/src/main/java/org/gcube/portal/social_networking_client_library/exceptions/NoSocialServiceAvailable.java @@ -0,0 +1,15 @@ +package org.gcube.portal.social_networking_client_library.exceptions; + +/** + * No social service available in the infrastructure. + * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) + */ +public class NoSocialServiceAvailable extends Exception { + + public NoSocialServiceAvailable(String errorMsg) { + super(errorMsg); + } + + private static final long serialVersionUID = 5927949225149691036L; + +} diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/utils/HttpClient.java b/src/main/java/org/gcube/portal/social_networking_client_library/utils/HttpClient.java index 7745b63..7f5f3d2 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/utils/HttpClient.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/utils/HttpClient.java @@ -5,73 +5,111 @@ import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.gcube.portal.socialnetworking.model.output.ResponseBean; -import org.glassfish.jersey.client.ClientResponse; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.jackson.JacksonFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonProcessingException; + /** * Http client with post and get methods (jersey is used) * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) */ -@SuppressWarnings("unchecked") -public class HttpClient { +public class HttpClient{ private static Logger logger = LoggerFactory.getLogger(HttpClient.class); - public static R get(Class returnType, String requestUrl, String token){ + /** + * Executes a get request + * @param genericType + * @param genericType + * @param genericType + * @param returnType + * @param requestUrl + * @param token + * @return + */ + public static R get(GenericType> returnType, String requestUrl, String token){ logger.debug("Executing get request at url " + requestUrl + " and token is " + maskedToken(token)); - // Create Jersey client - Client client = ClientBuilder.newClient(); + ClientConfig cc = new ClientConfig().register(new JacksonFeature());//.register(new JacksonJsonProvider(getMapper())); + Client client = ClientBuilder.newClient(cc); WebTarget webResourceGet = client.target(requestUrl).queryParam("gcube-token", token); - ClientResponse response = webResourceGet.request(MediaType.APPLICATION_JSON).get(ClientResponse.class); + ResponseBean response = webResourceGet.request(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).get(returnType); - if (response.getStatus() < 200 || response.getStatus() > 205) { - throw new RuntimeException("Failed : HTTP error code : " - + response.getStatus()); - } + if(response == null) + throw new WebApplicationException("Response returned by the service is null"); - ResponseBean responseEntity = (ResponseBean) response.getEntity(); - - if (responseEntity.getMessage() != null && !responseEntity.getMessage().isEmpty()) { + if (response.getMessage() != null && !response.getMessage().isEmpty()) throw new WebApplicationException( - "Response has status code " + response.getStatus() + " and message " + - responseEntity.getMessage()); - } + "Error message is " + response.getMessage()); - return (R) responseEntity.getResult(); + return response.getResult(); } - public static R post(Class returnType, String requestUrl, String token, Object body){ + // public static ObjectMapper getMapper(){ + // + // ObjectMapper mapper = new ObjectMapper(); + // mapper.enable(SerializationFeature.INDENT_OUTPUT); + // mapper.addMixIn(WorkspaceMessage.class, MessageOutputBeanMixIn.class); + // mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); + // return mapper; + // } - logger.debug("Executing get request at url " + requestUrl + " and token is " + maskedToken(token)); + /** + * Executes a post request + * @param returnType + * @param requestUrl + * @param token + * @param body + * @return + * @throws JsonProcessingException + */ + public static R post(GenericType> returnType, String requestUrl, String token, Object obj){ - // Create Jersey client - Client client = ClientBuilder.newClient(); + logger.debug("Executing post request at url " + requestUrl + " and token is " + maskedToken(token)); + + ClientConfig cc = new ClientConfig().register(new JacksonFeature()); + Client client = ClientBuilder.newClient(cc); WebTarget webResourceGet = client.target(requestUrl).queryParam("gcube-token", token); - Response response = webResourceGet.request(MediaType.APPLICATION_JSON).post(Entity.json(body)); + // + // String asJson = null; + // try{ + // ObjectMapper mapper = new ObjectMapper(); + // mapper.enable(SerializationFeature.INDENT_OUTPUT); + // mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); + // mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true); + // asJson = mapper.writeValueAsString(obj); + // logger.debug("Request body looks like\n"+asJson); + // }catch(Exception e){ + // logger.error("Failed to parse data", e); + // } - if (response.getStatus() < 200 || response.getStatus() > 205) { - throw new RuntimeException("Failed : HTTP error code : " - + response.getStatus()); - } + logger.debug("Entity looks like " + Entity.json(obj)); - ResponseBean responseEntity = (ResponseBean) response.getEntity(); + ResponseBean response = webResourceGet.request(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).post(Entity.json(obj), returnType); - if (responseEntity.getMessage() != null && !responseEntity.getMessage().isEmpty()) { + if(response == null) + throw new WebApplicationException("Response returned by the service is null"); + + if (response.getMessage() != null && !response.getMessage().isEmpty()) throw new WebApplicationException( - "Response has status code " + response.getStatus() + " and message " + - responseEntity.getMessage()); - } + "Error message is " + response.getMessage()); - return (R) responseEntity.getResult(); + return response.getResult(); } + /** + * Avoid to show the token + * @param token + * @return + */ private static String maskedToken(String token){ if(token == null) diff --git a/src/main/java/org/gcube/portal/social_networking_client_library/utils/ServiceDiscoverer.java b/src/main/java/org/gcube/portal/social_networking_client_library/utils/ServiceDiscoverer.java index 9660573..7432fcb 100644 --- a/src/main/java/org/gcube/portal/social_networking_client_library/utils/ServiceDiscoverer.java +++ b/src/main/java/org/gcube/portal/social_networking_client_library/utils/ServiceDiscoverer.java @@ -10,6 +10,7 @@ import java.util.List; import org.gcube.common.resources.gcore.GCoreEndpoint; import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.portal.social_networking_client_library.exceptions.NoSocialServiceAvailable; import org.gcube.resources.discovery.client.api.DiscoveryClient; import org.gcube.resources.discovery.client.queries.api.SimpleQuery; import org.slf4j.Logger; @@ -31,6 +32,9 @@ public class ServiceDiscoverer { public ServiceDiscoverer() throws Exception { String currentScope = ScopeProvider.instance.get(); + + if(currentScope == null || currentScope.isEmpty()) + throw new RuntimeException("Scope is not set"); try{ @@ -47,12 +51,12 @@ public class ServiceDiscoverer { DiscoveryClient client = client(); List endpoints = client.submit(query); if (endpoints == null || endpoints.isEmpty()) - throw new Exception("Cannot retrieve the GCoreEndpoint serviceName: "+serviceName +", serviceClass: " +serviceClass +", in scope: "+currentScope); + throw new NoSocialServiceAvailable("Cannot retrieve the GCoreEndpoint serviceName: "+serviceName +", serviceClass: " +serviceClass +", in scope: "+currentScope); this.entryPoint = endpoints.get(0); if(entryPoint==null) - throw new Exception("Endpoint:"+resource+", is null for serviceName: "+serviceName +", serviceClass: " +serviceClass +", in scope: "+currentScope); + throw new NoSocialServiceAvailable("Endpoint:"+resource+", is null for serviceName: "+serviceName +", serviceClass: " +serviceClass +", in scope: "+currentScope); logger.info("found entryPoint "+entryPoint+" for social service: "+resource); diff --git a/src/test/java/org/gcube/portal/social_networking_client_library/TestClientServices.java b/src/test/java/org/gcube/portal/social_networking_client_library/TestClientServices.java index 5d7ea51..33db6a4 100644 --- a/src/test/java/org/gcube/portal/social_networking_client_library/TestClientServices.java +++ b/src/test/java/org/gcube/portal/social_networking_client_library/TestClientServices.java @@ -15,78 +15,108 @@ import org.gcube.portal.databook.shared.Notification; import org.gcube.portal.socialnetworking.model.input.JobNotificationBean; import org.gcube.portal.socialnetworking.model.input.MessageInputBean; import org.gcube.portal.socialnetworking.model.input.Recipient; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestClientServices { - + private static Logger logger = LoggerFactory.getLogger(TestClientServices.class); - + @Before public void setContextAndToken(){ - + ScopeProvider.instance.set("/gcube/devNext/NextNext"); SecurityTokenProvider.instance.set("d423aed7-e9e2-424a-b9e7-2bbbd151d9c4-98187548"); - + } - @Test + //@Test public void testSearch() throws Exception { FullTextSearchClient search = new FullTextSearchClient(); - List result = search.search("looking for test", 0, 10); - + ArrayList result = search.search("looking for test", 0, 10); + for (EnhancedFeed enhancedFeed : result) { logger.debug("Returned feed " + enhancedFeed); } } - - @Test + + //@Test + public void testSearchEmptyList() throws Exception { + FullTextSearchClient search = new FullTextSearchClient(); + ArrayList result = search.search("tipiterotipirè", 0, 10); + + for (EnhancedFeed enhancedFeed : result) { + logger.debug("Returned feed " + enhancedFeed); + } + } + + //@Test public void testHashTags() throws Exception { HashTagsClient hashtags = new HashTagsClient(); Map hashtagsCount = hashtags.getHashtagsCount(); - logger.debug("Returned tags " + hashtagsCount); + logger.debug("Returned tags " + hashtagsCount); } - + @Test - public void testMessages() throws Exception { + public void testMessagesReceived() throws Exception { MessagesClient messagesClient = new MessagesClient(); List receivedMessages = messagesClient.getReceivedMessages(); - for (WorkspaceMessage workspaceMessage : receivedMessages) { logger.debug("Received message " + workspaceMessage.toString()); } - + } + + //@Test + public void testMessagesSent() throws Exception { + MessagesClient messagesClient = new MessagesClient(); List sentMessages = messagesClient.getSentMessages(); for (WorkspaceMessage workspaceMessage : sentMessages) { logger.debug("Sent message was " + workspaceMessage); } - + } + + //@Test + public void sendMessage() throws Exception{ logger.debug("Sending message "); + MessagesClient messagesClient = new MessagesClient(); List rec = Arrays.asList(new Recipient("andrea.rossi")); - MessageInputBean input = new MessageInputBean("Test message", + MessageInputBean message = new MessageInputBean( + "Test message", "Sending message via client " + System.currentTimeMillis(), new ArrayList(rec)); - String idMessage = messagesClient.writeMessage(input); + String idMessage = messagesClient.writeMessage(message); assert(idMessage != null); } - @Test + //@Test public void testNotifications() throws Exception { NotificationsClient notificationsClient = new NotificationsClient(); - List latestNotifications = notificationsClient.getNotifications(0, 2000); + List latestNotifications = notificationsClient.getNotifications(1, 2); for (Notification notification : latestNotifications) { logger.debug("Notification is " + notification); } } - - @Test + + //@Test public void sendJobNotification() throws Exception { NotificationsClient notificationsClient = new NotificationsClient(); - JobNotificationBean notification = new JobNotificationBean("costantino.perciante", UUID.randomUUID().toString(), "SmartExecutor Social Indexer", "SmartExecutor", - JobStatusType.SUCCEEDED, ""); + JobNotificationBean notification = new JobNotificationBean( + "costantino.perciante", + UUID.randomUUID().toString(), + "SmartExecutor Social Indexer", + "SmartExecutor", + JobStatusType.SUCCEEDED, + "all ok"); notificationsClient.sendJobNotification(notification); - logger.debug("Sent job notification and received "); + logger.debug("Sent job notification "); + } + + @After + public void reset(){ + ScopeProvider.instance.reset(); + SecurityTokenProvider.instance.reset(); } }