diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ffc4e7..67583e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,14 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # Changelog for gCube Catalogue (gCat) Client -## [v2.0.0-SNAPSHOT] [r5.0.0] - +## [v2.0.0-SNAPSHOT] -- Switched JSON management to gcube-jackson [#19735] + + +## [v1.2.2] + +- Added count method for Item collection [#20627] +- Added count method for Organization, Group and Profile collection [#20629] ## [v1.2.1] [r4.18.0] - 2019-12-20 diff --git a/pom.xml b/pom.xml index 6188154..ac199f8 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ org.gcube.distribution gcube-bom - 2.0.0-SNAPSHOT + 2.0.1 pom import @@ -59,12 +59,11 @@ org.slf4j slf4j-api - org.gcube.common gcube-jackson-databind - test + junit junit diff --git a/src/main/java/org/gcube/gcat/client/Group.java b/src/main/java/org/gcube/gcat/client/Group.java index 7615264..b1a284a 100644 --- a/src/main/java/org/gcube/gcat/client/Group.java +++ b/src/main/java/org/gcube/gcat/client/Group.java @@ -8,6 +8,8 @@ import java.util.Map; import javax.ws.rs.WebApplicationException; import javax.xml.ws.WebServiceException; +import org.gcube.com.fasterxml.jackson.databind.JsonNode; +import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; import org.gcube.gcat.api.GCatConstants; /** @@ -23,6 +25,22 @@ public class Group extends GCatClient implements org.gcube.gcat.api.interfaces.G super(enforcedServiceURL, GROUPS); } + @Override + public int count() throws WebServiceException { + Map queryParams = new HashMap<>(); + queryParams.put(GCatConstants.COUNT_PARAMETER, String.valueOf(true)); + String ret = this.list(queryParams); + ObjectMapper objectMapper = new ObjectMapper(); + try { + JsonNode jsonNode = objectMapper.readTree(ret); + return jsonNode.get(GCatConstants.COUNT_KEY).asInt(); + }catch (WebApplicationException e) { + throw e; + }catch (Exception e) { + throw new WebApplicationException(e); + } + } + @Override public String list(int limit, int offset) throws WebApplicationException { Map queryParams = new HashMap<>(); diff --git a/src/main/java/org/gcube/gcat/client/Item.java b/src/main/java/org/gcube/gcat/client/Item.java index ece0301..f387c0c 100644 --- a/src/main/java/org/gcube/gcat/client/Item.java +++ b/src/main/java/org/gcube/gcat/client/Item.java @@ -8,6 +8,8 @@ import java.util.Map; import javax.ws.rs.WebApplicationException; import javax.xml.ws.WebServiceException; +import org.gcube.com.fasterxml.jackson.databind.JsonNode; +import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; import org.gcube.gcat.api.GCatConstants; /** @@ -23,11 +25,27 @@ public class Item extends GCatClient implements org.gcube.gcat.api.interfaces.It super(enforcedServiceURL, ITEMS); } + @Override + public int count() throws WebServiceException { + Map queryParams = new HashMap<>(); + queryParams.put(GCatConstants.COUNT_PARAMETER, String.valueOf(true)); + String ret = this.list(queryParams); + ObjectMapper objectMapper = new ObjectMapper(); + try { + JsonNode jsonNode = objectMapper.readTree(ret); + return jsonNode.get(GCatConstants.COUNT_KEY).asInt(); + }catch (WebApplicationException e) { + throw e; + }catch (Exception e) { + throw new WebApplicationException(e); + } + } + /** - * List the item in the organization correspondent to the current VRE. + * List the item in the organisation correspondent to the current VRE. * * If the client is entitled to run at VO or ROOT level the method return all the item in all the organization - * in the catalogue. To filter per organization used the method {@link #list(int, int, String)} + * in the catalogue. To filter per organisation used the method {@link #list(int, int, String)} */ @Override public String list(int limit, int offset) throws WebApplicationException { @@ -43,7 +61,7 @@ public class Item extends GCatClient implements org.gcube.gcat.api.interfaces.It } /** - * List the item of a specific organization. + * List the item of a specific organisation. * This API is only available if the client is entitles to run at VO and ROOT level. */ public String list(int limit, int offset, String organizationName) throws WebApplicationException { @@ -103,4 +121,5 @@ public class Item extends GCatClient implements org.gcube.gcat.api.interfaces.It super.delete(true, name); return null; } + } diff --git a/src/main/java/org/gcube/gcat/client/Organization.java b/src/main/java/org/gcube/gcat/client/Organization.java index 7d79bcf..b31e9bc 100644 --- a/src/main/java/org/gcube/gcat/client/Organization.java +++ b/src/main/java/org/gcube/gcat/client/Organization.java @@ -6,7 +6,10 @@ import java.util.HashMap; import java.util.Map; import javax.ws.rs.WebApplicationException; +import javax.xml.ws.WebServiceException; +import org.gcube.com.fasterxml.jackson.databind.JsonNode; +import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; import org.gcube.gcat.api.GCatConstants; /** @@ -22,6 +25,22 @@ public class Organization extends GCatClient implements org.gcube.gcat.api.inter super(enforcedServiceURL, ORGANIZATIONS); } + @Override + public int count() throws WebServiceException { + Map queryParams = new HashMap<>(); + queryParams.put(GCatConstants.COUNT_PARAMETER, String.valueOf(true)); + String ret = this.list(queryParams); + ObjectMapper objectMapper = new ObjectMapper(); + try { + JsonNode jsonNode = objectMapper.readTree(ret); + return jsonNode.get(GCatConstants.COUNT_KEY).asInt(); + }catch (WebApplicationException e) { + throw e; + }catch (Exception e) { + throw new WebApplicationException(e); + } + } + @Override public String list(int limit, int offset) throws WebApplicationException { Map queryParams = new HashMap<>(); diff --git a/src/main/java/org/gcube/gcat/client/Profile.java b/src/main/java/org/gcube/gcat/client/Profile.java index 53b0f19..582422f 100644 --- a/src/main/java/org/gcube/gcat/client/Profile.java +++ b/src/main/java/org/gcube/gcat/client/Profile.java @@ -3,11 +3,16 @@ package org.gcube.gcat.client; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; +import java.util.HashMap; +import java.util.Map; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; +import javax.xml.ws.WebServiceException; +import org.gcube.com.fasterxml.jackson.databind.JsonNode; +import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; import org.gcube.gcat.api.GCatConstants; /** @@ -23,6 +28,22 @@ public class Profile extends GCatClient implements org.gcube.gcat.api.interfaces super(enforcedServiceURL, PROFILES); } + @Override + public int count() throws WebServiceException { + Map queryParams = new HashMap<>(); + queryParams.put(GCatConstants.COUNT_PARAMETER, String.valueOf(true)); + String ret = this.list(queryParams); + ObjectMapper objectMapper = new ObjectMapper(); + try { + JsonNode jsonNode = objectMapper.readTree(ret); + return jsonNode.get(GCatConstants.COUNT_KEY).asInt(); + }catch (WebApplicationException e) { + throw e; + }catch (Exception e) { + throw new WebApplicationException(e); + } + } + @Override public String list() throws WebApplicationException { return super.list(null); diff --git a/src/test/java/org/gcube/gcat/client/ContextTest.java b/src/test/java/org/gcube/gcat/client/ContextTest.java index dc49df9..a1e2355 100644 --- a/src/test/java/org/gcube/gcat/client/ContextTest.java +++ b/src/test/java/org/gcube/gcat/client/ContextTest.java @@ -1,10 +1,8 @@ -/** - * - */ package org.gcube.gcat.client; import java.io.IOException; import java.io.InputStream; +import java.net.MalformedURLException; import java.util.Properties; import org.gcube.common.authorization.client.Constants; @@ -31,7 +29,12 @@ public class ContextTest { protected static Properties properties; protected static final String PROPERTIES_FILENAME = "token.properties"; - public static final String DEFAULT_TEST_SCOPE_NAME; + protected static final String GCAT_PROPERTIES_FILENAME = "gcat.properties"; + public static final String GCAT_URL_PROPERTY = "GCAT_URL_PROPERTY"; + public static final String GCAT_URL; + + + public static final String DEFAULT_TEST_CONTEXT_NAME; static { properties = new Properties(); @@ -44,14 +47,49 @@ public class ContextTest { throw new RuntimeException(e); } - DEFAULT_TEST_SCOPE_NAME = "/pred4s/preprod/preVRE"; + //DEFAULT_TEST_CONTEXT_NAME = "/pred4s/preprod/preVRE"; + DEFAULT_TEST_CONTEXT_NAME = "/gcube/devsec/devVRE"; + + try { + setContextByName(DEFAULT_TEST_CONTEXT_NAME); + } catch(Exception e) { + throw new RuntimeException(e); + } + + Properties gcatProperties = new Properties(); + input = ContextTest.class.getClassLoader().getResourceAsStream(GCAT_PROPERTIES_FILENAME); + try { + // load the properties file + gcatProperties.load(input); + } catch (IOException e) { + throw new RuntimeException(e); + } + + GCAT_URL = gcatProperties.getProperty(GCAT_URL_PROPERTY); + + if(GCAT_URL!=null){ + try { + GCatClientDiscovery.forceToURL(GCAT_URL); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } } - public static String getCurrentScope(String token) throws ObjectNotFound, Exception { + public static String getCurrentContextFullName() { + String token = SecurityTokenProvider.instance.get(); + AuthorizationEntry authorizationEntry = null; + try { + authorizationEntry = Constants.authorizationService().get(token); + } catch(Exception e) { + return ScopeProvider.instance.get(); + } + return authorizationEntry.getContext(); + } + + public static String getContextFullName(String token) throws ObjectNotFound, Exception { AuthorizationEntry authorizationEntry = Constants.authorizationService().get(token); - String context = authorizationEntry.getContext(); - logger.info("Context of token {} is {}", token, context); - return context; + return authorizationEntry.getContext(); } public static void setContextByName(String fullContextName) throws ObjectNotFound, Exception { @@ -67,12 +105,12 @@ public class ContextTest { String qualifier = authorizationEntry.getQualifier(); Caller caller = new Caller(clientInfo, qualifier); AuthorizationProvider.instance.set(caller); - ScopeProvider.instance.set(getCurrentScope(token)); + ScopeProvider.instance.set(getContextFullName(token)); } @BeforeClass public static void beforeClass() throws Exception { - setContextByName(DEFAULT_TEST_SCOPE_NAME); + setContextByName(DEFAULT_TEST_CONTEXT_NAME); } @AfterClass diff --git a/src/test/java/org/gcube/gcat/client/GroupTest.java b/src/test/java/org/gcube/gcat/client/GroupTest.java index 4339f4c..3676e78 100644 --- a/src/test/java/org/gcube/gcat/client/GroupTest.java +++ b/src/test/java/org/gcube/gcat/client/GroupTest.java @@ -1,6 +1,7 @@ package org.gcube.gcat.client; import java.io.IOException; +import java.net.MalformedURLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -30,6 +31,13 @@ public class GroupTest extends ContextTest { private static final String DISPLAY_NAME_KEY = "display_name"; private static final String DISPLAY_NAME_VALUE = "0000 Display Name"; + @Test + public void testCount() throws MalformedURLException { + Group group = new Group(); + int count = group.count(); + logger.debug("The number of groups is {}", count); + } + // @Test public void completeTest() throws IOException { diff --git a/src/test/java/org/gcube/gcat/client/ItemTest.java b/src/test/java/org/gcube/gcat/client/ItemTest.java index b82d943..9e380b9 100644 --- a/src/test/java/org/gcube/gcat/client/ItemTest.java +++ b/src/test/java/org/gcube/gcat/client/ItemTest.java @@ -1,6 +1,7 @@ package org.gcube.gcat.client; import java.io.IOException; +import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; @@ -72,6 +73,13 @@ public class ItemTest extends ContextTest { */ } + @Test + public void testCount() throws MalformedURLException { + Item item = new Item(); + int count = item.count(); + logger.debug("The items published in the organization corresponding to the VRE {} are {}", ContextTest.getCurrentContextFullName(), count); + } + @Test public void completeTest() throws IOException { ObjectMapper mapper = new ObjectMapper(); diff --git a/src/test/java/org/gcube/gcat/client/OrganizationTest.java b/src/test/java/org/gcube/gcat/client/OrganizationTest.java index d838097..7541ffd 100644 --- a/src/test/java/org/gcube/gcat/client/OrganizationTest.java +++ b/src/test/java/org/gcube/gcat/client/OrganizationTest.java @@ -1,6 +1,7 @@ package org.gcube.gcat.client; import java.io.IOException; +import java.net.MalformedURLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -30,6 +31,13 @@ public class OrganizationTest extends ContextTest { private static final String DISPLAY_NAME_KEY = "display_name"; private static final String DISPLAY_NAME_VALUE = "0000 Display Name"; + @Test + public void testCount() throws MalformedURLException { + Organization organization = new Organization(); + int count = organization.count(); + logger.debug("The number of organizations is {}", count); + } + // @Test public void completeTest() throws IOException { diff --git a/src/test/java/org/gcube/gcat/client/ProfileTest.java b/src/test/java/org/gcube/gcat/client/ProfileTest.java index cd4f25a..9a4b0f5 100644 --- a/src/test/java/org/gcube/gcat/client/ProfileTest.java +++ b/src/test/java/org/gcube/gcat/client/ProfileTest.java @@ -1,6 +1,7 @@ package org.gcube.gcat.client; import java.io.StringReader; +import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -23,6 +24,13 @@ public class ProfileTest extends ContextTest { private static Logger logger = LoggerFactory.getLogger(ProfileTest.class); + @Test + public void testCount() throws MalformedURLException { + Profile profile = new Profile(); + int count = profile.count(); + logger.debug("The number of profiles is {}", count); + } + @Test public void safeTest() throws Exception { diff --git a/src/test/resources/.gitignore b/src/test/resources/.gitignore index a8e4366..eb42d60 100644 --- a/src/test/resources/.gitignore +++ b/src/test/resources/.gitignore @@ -1 +1,2 @@ /token.properties +/gcat.properties