You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gcat/src/main/java/org/gcube/gcat/persistence/ckan/CKANOrganization.java

107 lines
4.6 KiB
Java

package org.gcube.gcat.persistence.ckan;
import java.util.Map;
import java.util.Set;
import org.gcube.common.scope.impl.ScopeBean;
import org.gcube.datacatalogue.ckanutillibrary.shared.RolesCkanGroupOrOrg;
import org.gcube.gcat.utils.ContextUtility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import eu.trentorise.opendata.jackan.model.CkanOrganization;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class CKANOrganization extends CKAN {
private static Logger logger = LoggerFactory.getLogger(CKANOrganization.class);
// CKAN Connector sanitize the Organization name as following
//organizationName.replaceAll(" ", "_").replace(".", "_").toLowerCase()
// see http://docs.ckan.org/en/latest/api/#ckan.logic.action.get.organization_list
public static final String ORGANIZATION_LIST = CKAN.CKAN_API_PATH + "organization_list";
// see http://docs.ckan.org/en/latest/api/#ckan.logic.action.create.organization_create
public static final String ORGANIZATION_CREATE = CKAN.CKAN_API_PATH + "organization_create";
// see http://docs.ckan.org/en/latest/api/#ckan.logic.action.get.organization_show
public static final String ORGANIZATION_SHOW = CKAN.CKAN_API_PATH + "organization_show";
// see http://docs.ckan.org/en/latest/api/#ckan.logic.action.update.organization_update
public static final String ORGANIZATION_UPDATE = CKAN.CKAN_API_PATH + "organization_update";
// see http://docs.ckan.org/en/latest/api/#ckan.logic.action.patch.organization_patch
public static final String ORGANIZATION_PATCH = CKAN.CKAN_API_PATH + "organization_patch";
// see http://docs.ckan.org/en/latest/api/#ckan.logic.action.delete.organization_delete
public static final String ORGANIZATION_DELETE = CKAN.CKAN_API_PATH + "organization_delete";
// see http://docs.ckan.org/en/latest/api/#ckan.logic.action.delete.organization_purge
public static final String ORGANIZATION_PURGE = CKAN.CKAN_API_PATH + "organization_purge";
// see https://docs.ckan.org/en/latest/api/#ckan.logic.action.create.organization_member_create
public static final String ORGANIZATION_MEMBER_CREATE = CKAN.CKAN_API_PATH + "organization_member_create";
// https://docs.ckan.org/en/latest/api/index.html#ckan.logic.action.get.organization_list_for_user
public static final String ORGANIZATION_LIST_FOR_USER = CKAN.CKAN_API_PATH + "organization_list_for_user";
protected static final String USERNAME_KEY = "username";
protected static final String ROLE_KEY = "role";
public CKANOrganization() {
super();
LIST = ORGANIZATION_LIST;
CREATE = ORGANIZATION_CREATE;
READ = ORGANIZATION_SHOW;
UPDATE = ORGANIZATION_UPDATE;
PATCH = ORGANIZATION_PATCH;
DELETE = ORGANIZATION_DELETE;
PURGE = ORGANIZATION_PURGE;
}
protected static final String ORGANIZATION_PERMISSION_KEY = "permission";
protected static final String ORGANIZATION_PERMISSION_VALUE_READ = "read";
public String getUserRole(String gCubeUsername) {
Map<String,Map<CkanOrganization,RolesCkanGroupOrOrg>> rolesPerOrganization = dataCatalogue
.getUserRoleByOrganization(gCubeUsername, CKANUtility.getApiKey(gCubeUsername));
if(rolesPerOrganization.containsKey(name)) {
Map<CkanOrganization,RolesCkanGroupOrOrg> map = rolesPerOrganization.get(name);
Set<CkanOrganization> ckanOrganizations = map.keySet();
for(CkanOrganization ckanOrganization : ckanOrganizations) {
return map.get(ckanOrganization).name().toLowerCase();
}
}
return null;
}
public void addUserToOrganisation(String gCubeUsername, String role, boolean force) {
String ckanUsername = CKANUtility.getCKANUsername(gCubeUsername);
String userRole = getUserRole(gCubeUsername);
if((userRole==null || force)) {
if(userRole!=null && userRole.toLowerCase().compareTo(role.toLowerCase())==0) {
logger.debug("User {} is already member of Organisation {} with role {}", ckanUsername, name, userRole);
return;
}
ObjectNode objectNode = mapper.createObjectNode();
objectNode.put(ID_KEY, name);
objectNode.put(USERNAME_KEY, ckanUsername);
objectNode.put(ROLE_KEY, role);
sendPostRequest(ORGANIZATION_MEMBER_CREATE, getAsString(objectNode));
logger.debug("User {} successfully added to Organisation {} with role {}", ckanUsername, name, role);
}else {
logger.debug("User {} is already member of Organisation {} with role {}", ckanUsername, name, userRole);
}
}
public static String getCKANOrganizationName() {
String context = ContextUtility.getCurrentContext();
return getCKANOrganizationName(context);
}
public static String getCKANOrganizationName(String context) {
ScopeBean scopeBean = new ScopeBean(context);
return scopeBean.name().toLowerCase();
}
}