diff --git a/pom.xml b/pom.xml
index 09e2f03..9fc3f01 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,7 +70,7 @@
org.gcube.data-publishing
gcat-client
- [1.0.0, 2.0.0-SNAPSHOT)
+ [1.0.0, 2.0.0)
compile
diff --git a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/ckan/DirectCkanCaller.java b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/ckan/DirectCkanCaller.java
deleted file mode 100644
index 2cf8020..0000000
--- a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/ckan/DirectCkanCaller.java
+++ /dev/null
@@ -1,140 +0,0 @@
-//package org.gcube.datacatalogue.ckanutillibrary.ckan;
-//
-//import static com.google.common.base.Preconditions.checkArgument;
-//import static com.google.common.base.Preconditions.checkNotNull;
-//
-//import org.json.simple.JSONArray;
-//import org.json.simple.JSONObject;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//
-//import eu.trentorise.opendata.jackan.internal.org.apache.http.HttpResponse;
-//import eu.trentorise.opendata.jackan.internal.org.apache.http.HttpStatus;
-//import eu.trentorise.opendata.jackan.internal.org.apache.http.client.methods.HttpPost;
-//import eu.trentorise.opendata.jackan.internal.org.apache.http.entity.StringEntity;
-//import eu.trentorise.opendata.jackan.internal.org.apache.http.impl.client.CloseableHttpClient;
-//import eu.trentorise.opendata.jackan.internal.org.apache.http.impl.client.HttpClientBuilder;
-//
-///**
-// * The Class DirectCkanCaller.
-// *
-// * @author Francesco Mangiacrapa at ISTI-CNR Pisa (Italy)
-// * Jun 3, 2020
-// */
-//public class DirectCkanCaller {
-//
-// private static final String PATH_PACKAGE_PATCH = "/api/3/action/package_patch";
-// public final static String PATH_SET_PRIVATE_DATASET = "/api/3/action/bulk_update_private";
-// public final static String PATH_SET_PUBLIC_DATASET = "/api/3/action/bulk_update_public";
-// private String catalogueURL;
-//
-// private static final Logger LOG = LoggerFactory.getLogger(DirectCkanCaller.class);
-//
-//
-// /**
-// * Instantiates a new direct ckan caller.
-// *
-// * @param catalogueURL the catalogue URL
-// */
-// public DirectCkanCaller(String catalogueURL){
-// this.catalogueURL = catalogueURL;
-// }
-//
-// /**
-// * Set dataset private/public.
-// *
-// * @param priv the priv
-// * @param organizationId (NOTE: The ID, not the name!)
-// * @param datasetId (NOTE: The ID, not the name!)
-// * @param apiKey the user's api key
-// * @return true on success, false otherwise
-// */
-// public boolean setDatasetPrivate(boolean priv, String organizationId,
-// String datasetId, String apiKey) {
-//
-// // checks
-// checkNotNull(organizationId);
-// checkNotNull(apiKey);
-// checkNotNull(datasetId);
-// checkArgument(!apiKey.isEmpty());
-// checkArgument(!datasetId.isEmpty());
-// checkArgument(!organizationId.isEmpty());
-//
-// JSONObject obj = new JSONObject();
-// obj.put("org_id", organizationId);
-//
-// JSONArray array = new JSONArray();
-// array.add(datasetId);
-// obj.put("datasets", array);
-//
-// try(CloseableHttpClient httpClient = HttpClientBuilder.create().build();) {
-// HttpPost request;
-//
-// if(priv)
-// request = new HttpPost(catalogueURL + PATH_SET_PRIVATE_DATASET);
-// else
-// request = new HttpPost(catalogueURL + PATH_SET_PUBLIC_DATASET);
-//
-// LOG.info("Excuting request for making dataset with id " + datasetId + " " + (priv? "private" : "public"));
-//
-// request.addHeader("Authorization", apiKey);
-// StringEntity params = new StringEntity(obj.toJSONString());
-// request.setEntity(params);
-// HttpResponse response = httpClient.execute(request);
-//
-// LOG.info("Response code is " + response.getStatusLine().getStatusCode() + " and response message is " + response.getStatusLine().getReasonPhrase());
-//
-// if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
-// return true;
-//
-// }catch (Exception ex) {
-// LOG.error("Error while trying to set private the dataset ", ex);
-// }
-//
-//
-// return false;
-// }
-//
-// /**
-// * MOVED INTO gCatCaller
-// *
-// * Sets the searchable field.
-// *
-// * @param datasetId the dataset id
-// * @param searchable the searchable
-// * @return true, if successful
-// *
-// public boolean setSearchableField(String datasetId, boolean searchable, String apiKey) {
-//
-// // checks
-// checkNotNull(datasetId);
-// checkArgument(!datasetId.isEmpty());
-// String searchableAsString = searchable ? "True" : "False";
-//
-// // Patch package path
-// String patchPackage = catalogueURL + PATH_PACKAGE_PATCH;
-//
-// JSONObject obj = new JSONObject();
-// obj.put("id", datasetId);
-// obj.put("searchable", searchableAsString);
-//
-// try(CloseableHttpClient httpClient = HttpClientBuilder.create().build();) {
-// HttpPost request = new HttpPost(patchPackage);
-// request.addHeader("Authorization", apiKey);
-// StringEntity params = new StringEntity(obj.toJSONString());
-// request.setEntity(params);
-// HttpResponse response = httpClient.execute(request);
-// LOG.debug("Response code is " + response.getStatusLine().getStatusCode() + " and response message is " + response.getStatusLine().getReasonPhrase());
-//
-// if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
-// return true;
-//
-// }catch (Exception ex) {
-// LOG.error("Error while trying to set searchable the dataset ", ex);
-// }
-//
-// return false;
-// }*/
-//
-//
-//}
diff --git a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/ckan/ExtendCkanClient.java b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/ckan/ExtendCkanClient.java
index 2fe9994..ea07127 100644
--- a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/ckan/ExtendCkanClient.java
+++ b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/ckan/ExtendCkanClient.java
@@ -27,13 +27,13 @@ import eu.trentorise.opendata.jackan.model.CkanGroup;
import eu.trentorise.opendata.jackan.model.CkanOrganization;
import eu.trentorise.opendata.jackan.model.CkanResponse;
+
/**
- * The Class SimpleExtendCkanClient.
+ * The Class ExtendCkanClient.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
- * Jun 7, 2019
- *
+ * Feb 9, 2021
*/
public class ExtendCkanClient extends CkanClient implements PatchedCkan{
@@ -46,6 +46,13 @@ public class ExtendCkanClient extends CkanClient implements PatchedCkan{
private static final Map OBJECT_MAPPERS_FOR_POSTING = new HashMap();
+ /**
+ * The Enum HTTP_METHOD.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
+ *
+ * Feb 9, 2021
+ */
private static enum HTTP_METHOD {
GET, POST
}
@@ -123,6 +130,22 @@ public class ExtendCkanClient extends CkanClient implements PatchedCkan{
}
+ /**
+ * Gets the organization.
+ *
+ * @param idOrName the id or name
+ * @param includeUsers the include users
+ * @return the organization
+ */
+ public synchronized CkanOrganization getOrganization(String idOrName, boolean includeUsers) {
+ checkNotNull(idOrName, "Need a valid id or name!");
+ logger.debug("Patched read organization for id/name: {}", idOrName);
+ return getHttp(OrganizationResponse.class, "/api/3/action/organization_show", "id", idOrName,
+ "include_datasets", "false", "include_users", ""+includeUsers+"").result;
+
+ }
+
+
/**
* Gets the group.
*
@@ -139,6 +162,21 @@ public class ExtendCkanClient extends CkanClient implements PatchedCkan{
"false", "include_users", "true").result;
}
+
+ /**
+ * Gets the group.
+ *
+ * @param idOrName the id or name
+ * @param includeUsers the include users
+ * @return the group
+ */
+ public synchronized CkanGroup getGroup(String idOrName, boolean includeUsers) {
+ checkNotNull(idOrName, "Need a valid id or name!");
+ logger.debug("Patched read group for id/name: {}", idOrName);
+ return getHttp(GroupResponse.class, "/api/3/action/group_show", "id", idOrName, "include_datasets",
+ "false", "include_users", ""+includeUsers+"").result;
+ }
+
/**
* Retrieves the Jackson object mapper for reading operations. Internally,
@@ -158,9 +196,9 @@ public class ExtendCkanClient extends CkanClient implements PatchedCkan{
* Retrieves the Jackson object mapper configured for creation/update
* operations. Internally, Object mapper is initialized at first call.
*
- * @param clazz
- * the class you want to post. For generic class, just put
+ * @param clazz the class you want to post. For generic class, just put
* Object.class
+ * @return the object mapper for posting
* @since 0.4.1
*/
static ObjectMapper getObjectMapperForPosting(Class clazz) {
diff --git a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/db/DBCaller.java b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/db/DBCaller.java
index 5057918..cdf891e 100644
--- a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/db/DBCaller.java
+++ b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/db/DBCaller.java
@@ -15,22 +15,23 @@ import org.gcube.datacatalogue.ckanutillibrary.shared.RolesCkanGroupOrOrg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-// TODO: Auto-generated Javadoc
+
/**
* The Class DBCaller.
*
- * @author Francesco Mangiacrapa at ISTI-CNR Pisa (Italy)
- * Jun 1, 2020
+ * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
+ *
+ * Feb 9, 2021
*/
public class DBCaller {
private static final Logger LOG = LoggerFactory.getLogger(DBCaller.class);
- private String CKAN_DB_URL;
- private Integer CKAN_DB_PORT;
- private String CKAN_DB_NAME;
- private String CKAN_DB_USER;
- private String CKAN_DB_PASSWORD;
+ private String ckanDBURL;
+ private Integer ckanDBPort;
+ private String ckanDBName;
+ private String ckanDBUser;
+ private String ckanDBPwd;
/**
* Instantiates a new DB caller.
@@ -38,22 +39,23 @@ public class DBCaller {
public DBCaller() {
}
+
/**
* Instantiates a new DB caller.
*
- * @param cKAN_DB_URL the c KA N D B URL
- * @param cKAN_DB_PORT the c KA N D B PORT
- * @param cKAN_DB_NAME the c KA N D B NAME
- * @param cKAN_DB_USER the c KA N D B USER
- * @param cKAN_DB_PASSWORD the c KA N D B PASSWORD
+ * @param ckanDBURL the ckan DBURL
+ * @param ckanDBPort the ckan DB port
+ * @param ckanDBName the ckan DB name
+ * @param ckanDBUser the ckan DB user
+ * @param ckanDBPwd the ckan DB pwd
*/
- public DBCaller(String cKAN_DB_URL, Integer cKAN_DB_PORT, String cKAN_DB_NAME, String cKAN_DB_USER,
- String cKAN_DB_PASSWORD) {
- CKAN_DB_URL = cKAN_DB_URL;
- CKAN_DB_PORT = cKAN_DB_PORT;
- CKAN_DB_NAME = cKAN_DB_NAME;
- CKAN_DB_USER = cKAN_DB_USER;
- CKAN_DB_PASSWORD = cKAN_DB_PASSWORD;
+ public DBCaller(String ckanDBURL, Integer ckanDBPort, String ckanDBName, String ckanDBUser,
+ String ckanDBPwd) {
+ this.ckanDBURL = ckanDBURL;
+ this.ckanDBPort = ckanDBPort;
+ this.ckanDBName = ckanDBName;
+ this.ckanDBUser = ckanDBUser;
+ this.ckanDBPwd = ckanDBPwd;
}
@@ -70,17 +72,16 @@ public class DBCaller {
// create db connection
Class.forName("org.postgresql.Driver");
- String dbBaseConnectionURL = String.format("jdbc:postgresql://%s", CKAN_DB_URL);
+ String dbBaseConnectionURL = String.format("jdbc:postgresql://%s", ckanDBURL);
- if(CKAN_DB_PORT!=null)
- dbBaseConnectionURL+=":" + CKAN_DB_PORT;
+ if(ckanDBPort!=null)
+ dbBaseConnectionURL+=":" + ckanDBPort;
- dbBaseConnectionURL+="/" + CKAN_DB_NAME;
+ dbBaseConnectionURL+="/" + ckanDBName;
LOG.debug("DB CONNECTION URL: "+dbBaseConnectionURL);
- LOG.debug("CKAN_DB_USER: "+CKAN_DB_USER);
- LOG.debug("CKAN_DB_PASSWORD: "+CKAN_DB_PASSWORD);
- Connection connection = DriverManager.getConnection(dbBaseConnectionURL, CKAN_DB_USER, CKAN_DB_PASSWORD);
+ LOG.debug("CKAN_DB_USER: "+ckanDBUser);
+ Connection connection = DriverManager.getConnection(dbBaseConnectionURL, ckanDBUser, ckanDBPwd);
LOG.trace("Returnig db connection");
return connection;
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 c09dec8..f8bc8cb 100644
--- a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogue.java
+++ b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogue.java
@@ -12,7 +12,6 @@ import eu.trentorise.opendata.jackan.model.CkanGroup;
import eu.trentorise.opendata.jackan.model.CkanLicense;
import eu.trentorise.opendata.jackan.model.CkanOrganization;
-// TODO: Auto-generated Javadoc
/**
* The Interface DataCatalogue.
*
@@ -188,6 +187,32 @@ public interface DataCatalogue {
* @return true, if successful
*/
boolean checkValidUser(String username);
+
+ /**
+ * Check if this role is present for this user in the organization. If he/she is not present we need to add it with the given role.
+ * @param username
+ * @param organizationName
+ * @param correspondentRoleToCheck
+ * @return true if the role can be set, false if it cannot
+ */
+ boolean checkRoleIntoOrganization(String username, String organizationName, RolesCkanGroupOrOrg correspondentRoleToCheck);
+
+ /**
+ * Check if this role is present for this user in the group. If he/she is not present we need to add it with the given role.
+ * @param username
+ * @param organizationName
+ * @param correspondentRoleToCheck
+ * @return true if the role can be set, false if it cannot
+ */
+ boolean checkRoleIntoGroup(String username, String groupName, RolesCkanGroupOrOrg correspondentRoleToCheck);
+
+ /**
+ * Returns the main landing pages for this catalogue (i.e. type, orgs, groups and items pages)
+ *
+ * @return the landing pages
+ * @throws Exception the exception
+ */
+ LandingPages getLandingPages() throws Exception;
@@ -269,13 +294,6 @@ public interface DataCatalogue {
*/
boolean deleteResourceFromDataset(String resourceId) throws Exception;
- /**
- * Returns the main landing pages for this catalogue (i.e. type, orgs, groups and items pages)
- *
- * @return the landing pages
- * @throws Exception the exception
- */
- LandingPages getLandingPages() throws Exception;
/**
* Create a CkanGroup.
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 af3e9cf..40dc0ce 100644
--- a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogueImpl.java
+++ b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/DataCatalogueImpl.java
@@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory;
import eu.trentorise.opendata.jackan.exceptions.JackanException;
import eu.trentorise.opendata.jackan.internal.org.apache.http.HttpResponse;
+import eu.trentorise.opendata.jackan.internal.org.apache.http.HttpStatus;
import eu.trentorise.opendata.jackan.internal.org.apache.http.client.methods.HttpPost;
import eu.trentorise.opendata.jackan.internal.org.apache.http.entity.ContentType;
import eu.trentorise.opendata.jackan.internal.org.apache.http.entity.StringEntity;
@@ -439,11 +440,21 @@ public class DataCatalogueImpl implements DataCatalogue {
try{
+
+ Map partialResult = dbCaller.getOrganizationsByUserFromDB(ckanUsername);
+
+ for (String orgID : partialResult.keySet()) {
+
+ CkanOrganization org = ckanCaller.getOrganization(orgID,false);
+ LOG.debug("User " + ckanUsername + " is into " + org.getName());
+ toReturn.add(org);
+ }
+
// get the list of all organizations
- List organizations = ckanCaller.getOrganizationList();
+ //List organizations = ckanCaller.getOrganizationList();
// iterate over them
- for (CkanOrganization ckanOrganization : organizations) {
+ /*for (CkanOrganization ckanOrganization : organizations) {
// get the list of users in it (if you try ckanOrganization.getUsers() it returns null.. maybe a bug TODO)
List users = ckanCaller.getOrganization(ckanOrganization.getName()).getUsers();
// check if the current user is among them
@@ -457,7 +468,7 @@ public class DataCatalogueImpl implements DataCatalogue {
}
}
- }
+ }*/
}catch(Exception e){
LOG.error("Unable to get user's organizations", e);
}
@@ -477,9 +488,19 @@ public class DataCatalogueImpl implements DataCatalogue {
try{
+ Map partialResult = dbCaller.getGroupsByUserFromDB(ckanUsername);
+
+ for (String groupID : partialResult.keySet()) {
+
+ CkanGroup group = ckanCaller.getGroup(groupID,false);
+ LOG.debug("User " + ckanUsername + " is into " + group.getName());
+ toReturn.add(group);
+ }
+
+ /*
// get the list of all organizations
List groups = ckanCaller.getGroupList();
-
+
// iterate over them
for (CkanGroup ckanGroup : groups) {
@@ -496,7 +517,7 @@ public class DataCatalogueImpl implements DataCatalogue {
}
}
- }
+ }*/
}catch(Exception e){
LOG.error("Unable to get user's groups", e);
}
@@ -665,6 +686,149 @@ public class DataCatalogueImpl implements DataCatalogue {
}
+ @Override
+ public boolean checkRoleIntoOrganization(String username, String organizationName,
+ RolesCkanGroupOrOrg correspondentRoleToCheck) {
+
+ LOG.debug("Request for checking if " + username + " into organization " + organizationName + " has role " + correspondentRoleToCheck);
+
+ // checks
+ checkNotNull(username);
+ checkNotNull(organizationName);
+ checkNotNull(correspondentRoleToCheck);
+ checkArgument(!username.isEmpty());
+ checkArgument(!organizationName.isEmpty());
+
+ // convert ckan username
+ String ckanUsername = CatalogueUtilMethods.fromUsernameToCKanUsername(username);
+
+ // check if this role is already present in ckan for this user within the organization
+ String organizationNameToCheck = organizationName.toLowerCase();
+
+ try{
+ boolean alreadyPresent = isRoleAlreadySet(ckanUsername, organizationNameToCheck, correspondentRoleToCheck, false);
+
+ if(alreadyPresent)
+ return true; // just return
+ else{
+
+ //TODO PASS by GCAT?
+ // we need to use the APIs to make it
+ String path = "/api/3/action/organization_member_create";
+
+ JSONObject obj = new JSONObject();
+ obj.put("id", organizationNameToCheck);
+ obj.put("username", ckanUsername);
+ obj.put("role", RolesCkanGroupOrOrg.convertToCkanCapacity(correspondentRoleToCheck));
+
+ LOG.debug("API request for organization membership is going to be " + obj.toJSONString());
+
+
+ try(CloseableHttpClient httpClient = HttpClientBuilder.create().build();) {
+ HttpPost request = new HttpPost(CKAN_CATALOGUE_URL + path);
+ request.addHeader("Authorization", CKAN_TOKEN_SYS); // sys token
+ StringEntity params = new StringEntity(obj.toJSONString());
+ request.setEntity(params);
+ HttpResponse response = httpClient.execute(request);
+ LOG.debug("Response code is " + response.getStatusLine().getStatusCode() + " and response message is " + response.getStatusLine().getReasonPhrase());
+
+ return response.getStatusLine().getStatusCode() == HttpStatus.SC_OK;
+
+ }catch (Exception ex) {
+ LOG.error("Error while trying to change the role for this user ", ex);
+ }
+ }
+ }catch (Exception ex) {
+ LOG.error("Unable to check if this role was already set, please check your parameters! ", ex);
+ }
+
+ return false;
+ }
+
+ @Override
+ public boolean checkRoleIntoGroup(String username, String groupName, RolesCkanGroupOrOrg correspondentRoleToCheck) {
+ LOG.debug("Request for checking if " + username + " into group " + groupName + " has role " + correspondentRoleToCheck);
+
+ // checks
+ checkNotNull(username);
+ checkNotNull(groupName);
+ checkNotNull(correspondentRoleToCheck);
+ checkArgument(!username.isEmpty());
+ checkArgument(!groupName.isEmpty());
+
+ // convert ckan username
+ String ckanUsername = CatalogueUtilMethods.fromUsernameToCKanUsername(username);
+
+ // check if this role is already present in ckan for this user within the group
+ String groupNameToCheck = CatalogueUtilMethods.fromGroupTitleToName(groupName);
+
+ try{
+ boolean alreadyPresent = isRoleAlreadySet(ckanUsername, groupNameToCheck, correspondentRoleToCheck, true);
+
+ if(alreadyPresent)
+ return true; // just return
+ else{
+
+ // we need to use the apis to make it
+ String path = "/api/3/action/group_member_create";
+
+ JSONObject obj = new JSONObject();
+ obj.put("id", groupNameToCheck);
+ obj.put("username", ckanUsername);
+ obj.put("role", RolesCkanGroupOrOrg.convertToCkanCapacity(correspondentRoleToCheck));
+
+ LOG.debug("API request for organization membership is going to be " + obj.toJSONString());
+
+ try(CloseableHttpClient httpClient = HttpClientBuilder.create().build();) {
+ HttpPost request = new HttpPost(CKAN_CATALOGUE_URL + path);
+ request.addHeader("Authorization", CKAN_TOKEN_SYS); // sys token
+ StringEntity params = new StringEntity(obj.toJSONString());
+ request.setEntity(params);
+ HttpResponse response = httpClient.execute(request);
+ LOG.debug("Response code is " + response.getStatusLine().getStatusCode() + " and response message is " + response.getStatusLine().getReasonPhrase());
+
+ return response.getStatusLine().getStatusCode() == HttpStatus.SC_OK;
+
+ }catch (Exception ex) {
+ LOG.error("Error while trying to change the role for this user ", ex);
+ }
+ }
+ }catch (Exception ex) {
+ LOG.error("Unable to check if this role was already set, please check your parameters! ", ex);
+ }
+
+ return false;
+ }
+
+ /**
+ * Check if the user has this role into the organization/group with groupOrOrganization name
+ * @param ckanUsername
+ * @param organizationName
+ * @param correspondentRoleToCheck
+ * @return true if he has the role, false otherwise
+ */
+ protected boolean isRoleAlreadySet(String ckanUsername, String groupOrOrganization, RolesCkanGroupOrOrg correspondentRoleToCheck, boolean group) throws Exception{
+
+ // get the users (if you try ckanOrganization.getUsers() it returns null.. maybe a bug TODO)
+ List users;
+
+ if(group)
+ users = ckanCaller.getGroup(groupOrOrganization).getUsers();
+ else
+ users = ckanCaller.getOrganization(groupOrOrganization).getUsers();
+
+ for (CkanUser ckanUser : users) {
+ if(ckanUser.getName().equals(ckanUsername))
+ if(ckanUser.getCapacity().equals(RolesCkanGroupOrOrg.convertToCkanCapacity(correspondentRoleToCheck)))
+ return true;
+ else
+ break;
+ }
+
+ return false;
+ }
+
+
/*
*
*
@@ -802,21 +966,6 @@ public class DataCatalogueImpl implements DataCatalogue {
if(CatalogueUtilMethods.resourceExists(resourceBean.getUrl())){
- /*// in order to avoid errors, the username is always converted
- String ckanUsername = CatalogueUtilMethods.fromUsernameToCKanUsername(resourceBean.getOwner());
-
- CkanResource resource = new CkanResource(CKAN_CATALOGUE_URL, resourceBean.getDatasetId());
- resource.setName(resourceBean.getName());
-
- // escape description
- Source description = new Source(resourceBean.getDescription());
- Segment htmlSeg = new Segment(description, 0, description.length());
- Renderer htmlRend = new Renderer(htmlSeg);
-
- resource.setDescription(htmlRend.toString());
- resource.setUrl(resourceBean.getUrl());
- resource.setOwner(ckanUsername);*/
-
CkanResource resource = CKANConveter.toCkanResource(CKAN_CATALOGUE_URL, resourceBean);
String jsonValueResource = MarshUnmarshCkanObject.toJsonValueResource(resource);
@@ -914,135 +1063,5 @@ public class DataCatalogueImpl implements DataCatalogue {
return toReturn;
}
-// @Override
-// public boolean patchProductCustomFields(String productId, Map> customFieldsToChange,
-// boolean removeOld) {
-// return false;
-// }
-//
-
-// @Override
- public boolean assignDatasetToGroup(String groupNameOrId, String datasetNameOrId) {
-
- return assignDatasetToGroupBody(groupNameOrId, datasetNameOrId, "", false);
-
- }
-
-// @Override
- public boolean assignDatasetToGroup(String groupNameOrId, String datasetNameOrId, boolean addOnParents) {
-
- return assignDatasetToGroupBody(groupNameOrId, datasetNameOrId, "", addOnParents);
-
- }
-
- /**
- * The real body of the assignDatasetToGroup
- * @param groupNameOrId
- * @param datasetNameOrId
- * @param apiKey
- * @param addOnParents
- * @return
- */
- private boolean assignDatasetToGroupBody(String groupNameOrId, String datasetNameOrId, String apiKey, boolean addOnParents) {
-
- return false;
-// // checks
-// checkNotNull(groupNameOrId);
-// checkArgument(!groupNameOrId.isEmpty());
-// checkNotNull(datasetNameOrId);
-// checkArgument(!datasetNameOrId.isEmpty());
-// checkNotNull(apiKey);
-// checkArgument(!apiKey.isEmpty());
-//
-// String groupNameToCheck = CatalogueUtilMethods.fromGroupTitleToName(groupNameOrId);
-//
-// try(CloseableHttpClient httpClient = HttpClientBuilder.create().build();){
-//
-// ExtendCkanClient client = new ExtendCkanClient(CKAN_CATALOGUE_URL, CKAN_TOKEN_SYS);
-//
-// // check the group exists
-// CkanGroup group = client.getGroup(groupNameToCheck);
-//
-// // move to a list
-// List groupNames = new ArrayList();
-// groupNames.add(group.getName());
-// if(group != null && addOnParents){
-// findHierarchyGroups(groupNames, CKAN_TOKEN_SYS);
-// }
-//
-// // we need to use the apis to make it
-// String pathPackageShow = CKAN_CATALOGUE_URL + "/api/3/action/package_show?id=" + datasetNameOrId;
-// HttpGet getRequest = new HttpGet(pathPackageShow);
-// getRequest.addHeader("Authorization", CKAN_TOKEN_SYS);
-// HttpResponse response = httpClient.execute(getRequest);
-//
-// logger.debug("Response is " + response.getStatusLine().getStatusCode() + " and message is " + response.getStatusLine().getReasonPhrase());
-//
-// // read the json dataset and fetch the groups and fetch the groups' names, if any
-// if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
-//
-// // parse the json and convert to java beans
-// String jsonAsString = EntityUtils.toString(response.getEntity());
-// JSONParser parser = new JSONParser();
-// JSONObject json = (JSONObject) parser.parse(jsonAsString);
-// JSONObject resultJson = (JSONObject) json.get("result");
-// JSONArray groupsJson = (JSONArray)resultJson.get("groups");
-// Iterator it = groupsJson.iterator();
-//
-// while (it.hasNext()) {
-// JSONObject object = it.next();
-// try{
-// if(object.containsKey("name"))
-// groupNames.add((String)object.get("name"));
-// }catch(Exception e){
-// logger.error("Error", e);
-// }
-// }
-//
-// // remove duplicates
-// Set groupNamesSet = new HashSet(groupNames);
-//
-// logger.debug("Groups to be added are " + groupNamesSet);
-//
-// // now we patch the dataset with the new group
-// String pathUpdatePatch = CKAN_CATALOGUE_URL + "/api/3/action/package_patch";
-//
-// JSONObject req = new JSONObject();
-// req.put("id", datasetNameOrId);
-//
-// JSONArray groups = new JSONArray();
-// Iterator iteratorNameSet = groupNamesSet.iterator();
-// while (iteratorNameSet.hasNext()) {
-// String groupName = iteratorNameSet.next();
-// JSONObject groupJSON = new JSONObject();
-// groupJSON.put("name", groupName);
-// groups.add(groupJSON);
-// }
-// req.put("groups", groups);
-//
-// logger.debug("Request for patch is going to be " + req.toJSONString());
-//
-// HttpPost request = new HttpPost(pathUpdatePatch);
-// request.addHeader("Authorization", CKAN_TOKEN_SYS);
-// StringEntity params = new StringEntity(req.toJSONString());
-// request.setEntity(params);
-// HttpResponse responsePatch = httpClient.execute(request);
-// logger.debug("Response code is " + responsePatch.getStatusLine().getStatusCode() + " and response message is " + responsePatch.getStatusLine().getReasonPhrase());
-//
-// if(responsePatch.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
-// logger.info("Dataset Added to the group!!");
-// return true;
-// }
-//
-// }
-//
-// }catch(Exception e){
-// logger.error("Unable to make this association", e);
-// }
-//
-// return false;
- }
-
-
}
diff --git a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/utils/CKANConveter.java b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/utils/CKANConveter.java
index 2906ee7..c285789 100644
--- a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/utils/CKANConveter.java
+++ b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/server/utils/CKANConveter.java
@@ -76,6 +76,7 @@ public class CKANConveter {
LOG.debug("Name of the dataset is going to be " + nameToUse + ". Title is going to be " + title);
+ //TODO the name is required by gCat?
dataset.setName(nameToUse);
dataset.setTitle(title);
diff --git a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/shared/Statistics.java b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/shared/Statistics.java
index fee060d..beef067 100644
--- a/src/main/java/org/gcube/datacatalogue/ckanutillibrary/shared/Statistics.java
+++ b/src/main/java/org/gcube/datacatalogue/ckanutillibrary/shared/Statistics.java
@@ -19,6 +19,8 @@ public class Statistics implements Serializable{
private long numOrganizations;
private long numGroups;
private long numItems;
+
+ public Statistics() {}
public long getNumTypes() {
return numTypes;
diff --git a/src/test/java/org/gcube/datacatalogue/ckanutillibrary/test/TestDataCatalogueLib.java b/src/test/java/org/gcube/datacatalogue/ckanutillibrary/test/TestDataCatalogueLib.java
index 60d62bc..4a3a201 100644
--- a/src/test/java/org/gcube/datacatalogue/ckanutillibrary/test/TestDataCatalogueLib.java
+++ b/src/test/java/org/gcube/datacatalogue/ckanutillibrary/test/TestDataCatalogueLib.java
@@ -30,7 +30,7 @@ import eu.trentorise.opendata.jackan.model.CkanUser;
*/
public class TestDataCatalogueLib {
- private static final org.slf4j.Logger logger = LoggerFactory.getLogger(TestDataCatalogueLib.class);
+ private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(TestDataCatalogueLib.class);
private DataCatalogueFactory factory;
private String scope = "/gcube/devsec/devVRE";
@@ -89,12 +89,12 @@ public class TestDataCatalogueLib {
ScopeProvider.instance.set(scope);
String url = "https://dev4.d4science.org/group/devvre/ckan";
String scopeToUse = ApplicationProfileScopePerUrlReader.getScopePerUrl(url);
- logger.debug("Retrieved scope is " + scopeToUse);
+ LOG.debug("Retrieved scope is " + scopeToUse);
ScopeProvider.instance.reset(); // the following sysout should print null
String url2 = "https://dev4.d4science.org/group/devvre/ckan";
String scopeToUse2 = ApplicationProfileScopePerUrlReader.getScopePerUrl(url2);
- logger.debug("Retrieved scope is " + scopeToUse2);
+ LOG.debug("Retrieved scope is " + scopeToUse2);
}
@@ -111,7 +111,7 @@ public class TestDataCatalogueLib {
long init = System.currentTimeMillis();
instance.getUserRoleByGroup(username);
long end = System.currentTimeMillis();
- logger.debug("Time taken " + (end - init));
+ LOG.debug("Time taken " + (end - init));
}
/**
@@ -127,7 +127,7 @@ public class TestDataCatalogueLib {
long init = System.currentTimeMillis();
instance.getUserRoleByOrganization(username);
long end = System.currentTimeMillis();
- logger.debug("Time taken " + (end - init));
+ LOG.debug("Time taken " + (end - init));
}
//@Test
@@ -137,7 +137,7 @@ public class TestDataCatalogueLib {
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
CkanOrganization org = utils.getOrganizationByIdOrName(orgName);
String role = utils.getRoleOfUserInOrganization(testUser, org.getName());
- logger.debug("The user "+testUser+" in the org "+org.getName() + " has the role "+role);
+ LOG.debug("The user "+testUser+" in the org "+org.getName() + " has the role "+role);
}
//@Test
@@ -149,21 +149,51 @@ public class TestDataCatalogueLib {
CkanOrganization org = utils.getOrganizationByIdOrName(orgName);
- logger.debug("The "+CkanOrganization.class.getSimpleName()+" is: "+org.getName());
- logger.debug("LandingPages of "+CkanOrganization.class.getSimpleName()+" for name " + utils.getLandingPages());
+ LOG.debug("The "+CkanOrganization.class.getSimpleName()+" is: "+org.getName());
+ LOG.debug("LandingPages of "+CkanOrganization.class.getSimpleName()+" for name " + utils.getLandingPages());
if(org.getUsers()!=null) {
for (CkanUser user : org.getUsers()) {
- logger.debug("User: "+user.getName());
+ LOG.debug("User: "+user.getName());
}
}
}
+
+ //@Test
+ public void getOrganizationsNamesByUser() throws Exception{
+
+ DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
+
+ List listOrgs = utils.getOrganizationsByUser(testUser);
+
+ LOG.debug("User :"+testUser+" found in the Organization/s:");
+
+ for (CkanOrganization ckanOrganization : listOrgs) {
+ LOG.debug("Org: "+ckanOrganization.getName());
+ }
+
+ }
+
+ //@Test
+ public void getGroupsNamesByUser() throws Exception{
+
+ DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
+
+ List listGroups = utils.getGroupsByUser(testUser);
+
+ LOG.debug("User :"+testUser+" found in the Group/s:");
+
+ for (CkanGroup ckanGroup : listGroups) {
+ LOG.debug("Group: "+ckanGroup.getName());
+ }
+
+ }
//@Test
public void getLandingPages() throws Exception{
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
- logger.debug("Landing pages " + utils.getLandingPages());
+ LOG.debug("Landing pages " + utils.getLandingPages());
}
@@ -185,7 +215,7 @@ public class TestDataCatalogueLib {
}
- @Test
+ //@Test
public void createDataset() throws Exception{
try {
@@ -214,7 +244,7 @@ public class TestDataCatalogueLib {
String orgName = scope.split("/")[3].toLowerCase();
//System.out.println("Org name by VRE: "+orgName);
- logger.debug("Org name by VRE: "+orgName);
+ LOG.debug("Org name by VRE: "+orgName);
int random = new Random().nextInt();
String datasetTitle = "a dataset created by catalogue-util-library "+random;
@@ -238,7 +268,7 @@ public class TestDataCatalogueLib {
setSearchable,
true);
- logger.info(createdDataset);
+ LOG.info(createdDataset);
}catch (Exception e) {
e.printStackTrace();
}
@@ -254,7 +284,7 @@ public class TestDataCatalogueLib {
String groupTitle = "a grop created by catalogue-util-library "+random;
String groupName = groupTitle.replace(" ", "");
CkanGroup ckanGroup = instance.createGroup(groupName, groupTitle, "description");
- logger.info("Created the group: "+ckanGroup);
+ LOG.info("Created the group: "+ckanGroup);
}