diff --git a/distro/changelog.xml b/distro/changelog.xml index 47ecc7d..bd52c64 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -2,6 +2,7 @@ Added delegate roles method + Added search methods for datasets diff --git a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogue.java b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogue.java index 8c82e52..ad71c92 100644 --- a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogue.java +++ b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogue.java @@ -602,4 +602,24 @@ public interface DataCatalogue { * @param currentRole */ void assignRolesOtherOrganization(String username, String sourceOrganization, RolesCkanGroupOrOrg currentRole); + + /** + * Search for a package through Solr + * @param apiKey + * @param query + * @param start + * @param offset + * @return a list of matching datasets + */ + List searchForPackage(String apiKey, String query, int start, int offset) throws Exception; + + /** + * Search for a package through Solr in a given organization + * @param apiKey + * @param query + * @param start + * @param offset + * @return a list of matching datasets + */ + List searchForPackageInOrganization(String apiKey, String query, int start, int offset, String organization) throws Exception; } diff --git a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogueImpl.java b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogueImpl.java index e600ff9..fc6f851 100644 --- a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogueImpl.java +++ b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogueImpl.java @@ -45,6 +45,7 @@ import org.slf4j.LoggerFactory; import eu.trentorise.opendata.jackan.CheckedCkanClient; import eu.trentorise.opendata.jackan.CkanClient; +import eu.trentorise.opendata.jackan.CkanQuery; import eu.trentorise.opendata.jackan.exceptions.JackanException; import eu.trentorise.opendata.jackan.internal.org.apache.http.HttpEntity; import eu.trentorise.opendata.jackan.internal.org.apache.http.HttpResponse; @@ -2858,4 +2859,47 @@ public class DataCatalogueImpl implements DataCatalogue{ } } + + @Override + public List searchForPackage(String apiKey, String query, int start, int offset) throws Exception{ + + checkNotNull(apiKey); + checkNotNull(query); + checkArgument(start >= 0); + checkArgument(offset >= 0); + + CheckedCkanClient client = new CheckedCkanClient(CKAN_CATALOGUE_URL, apiKey); + + try{ + + CkanQuery queryCkan = CkanQuery.filter().byText(query); + return client.searchDatasets(queryCkan, offset, start).getResults(); + + }catch(Exception e){ + logger.error("Error while executing query", e); + throw e; + } + } + + @Override + public List searchForPackageInOrganization(String apiKey, String query, int start, int offset, String organization) throws Exception{ + + checkNotNull(apiKey); + checkNotNull(query); + checkArgument(start >= 0); + checkArgument(offset >= 0); + + CheckedCkanClient client = new CheckedCkanClient(CKAN_CATALOGUE_URL, apiKey); + + try{ + + CkanQuery queryCkan = CkanQuery.filter().byOrganizationName(organization).byText(query); + return client.searchDatasets(queryCkan, offset, start).getResults(); + + }catch(Exception e){ + logger.error("Error while executing query", e); + throw e; + } + } + } \ No newline at end of file diff --git a/src/test/java/org/gcube/datacatalogue/ckanutillibrary/server/TestDataCatalogueLib.java b/src/test/java/org/gcube/datacatalogue/ckanutillibrary/server/TestDataCatalogueLib.java index 47be9f0..56fb7e9 100644 --- a/src/test/java/org/gcube/datacatalogue/ckanutillibrary/server/TestDataCatalogueLib.java +++ b/src/test/java/org/gcube/datacatalogue/ckanutillibrary/server/TestDataCatalogueLib.java @@ -15,6 +15,7 @@ import org.gcube.datacatalogue.ckanutillibrary.shared.CKanUserWrapper; import org.gcube.datacatalogue.ckanutillibrary.shared.CkanDatasetRelationship; import org.gcube.datacatalogue.ckanutillibrary.shared.DatasetRelationships; import org.gcube.datacatalogue.ckanutillibrary.shared.RolesCkanGroupOrOrg; +import org.junit.Test; import org.slf4j.LoggerFactory; import eu.trentorise.opendata.jackan.CheckedCkanClient; @@ -49,6 +50,22 @@ public class TestDataCatalogueLib { List ids = utils.getProductsIdsInGroupOrOrg("aquamaps", true, 0, Integer.MAX_VALUE); logger.debug("Size is " + ids.size()); } + + //@Test + public void searchInOrganization() throws Exception{ + DataCatalogueImpl utils = factory.getUtilsPerScope(scope); + String apiKey = utils.getApiKeyFromUsername(testUser); + List matches = utils.searchForPackageInOrganization(apiKey, "\"asfis:HMC+eez:AGO;FAO+grsf-org:INT+eez:AGO;RFB+iso3:AGO+isscfg:01.1.1\"", 0, 10, "grsf_admin"); + logger.debug("Size is " + matches.size()); + } + + @Test + public void search() throws Exception{ + DataCatalogueImpl utils = factory.getUtilsPerScope(scope); + String apiKey = utils.getApiKeyFromUsername(testUser); + List matches = utils.searchForPackage(apiKey, "\"asfis:HMC+eez:AGO;FAO+grsf-org:INT+eez:AGO;RFB+iso3:AGO+isscfg:01.1.1\"", 0, 10); + logger.debug("Size is " + matches.size()); + } // @Test public void testManageProduct() throws Exception{ @@ -303,28 +320,6 @@ public class TestDataCatalogueLib { } - //@Test - public void createGroup() throws Exception{ - - // DataCatalogueImpl instance = factory.getUtilsPerScope(scope); - String title = " SoBigData.eu: Method Metadata NextNext "; - String result = UtilMethods.fromGroupTitleToName(title); - logger.debug(result); - // CkanGroup group = instance.createGroup(title, title, "A description for this group"); - // - // if(group != null){ - // - - // boolean associated = instance.checkRoleIntoGroup("user_admin_devvre", "sobigdata_eu_method_metadata_nextnext", RolesCkanGroupOrOrg.ADMIN); - // - // if(associated){ - // - // boolean assigned = instance.assignDatasetToGroup(title, "dataset_random_editor", instance.getApiKeyFromUsername("user_editor_devvre")); - // logger.debug("Assigned is " + assigned); - // } - // } - } - //@Test public void testGroupAssociation() throws Exception{