From d7cbc03f977ff52db87a056ce5e2874ef9e43ec8 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Fri, 19 Jun 2020 17:32:21 +0200 Subject: [PATCH] Changing the organization behavior to implement the feature. --- .../gcat/persistence/ckan/CKANPackage.java | 71 ++++++++++--------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java index 3da98c2..51c0a5b 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java @@ -132,6 +132,42 @@ public class CKANPackage extends CKAN { return getOrganizationName(scopeBean); } + protected CKANOrganization checkGotOrganization(String gotOrganization) { + CKANOrganization ckanOrganization = new CKANOrganization(); + ckanOrganization.setName(gotOrganization); + ckanOrganization.read(); + + // TODO Check if the organization exists + // TODO Check if it is allowed to publish in such organization by reading an IS resource + + return ckanOrganization; + } + + protected List getPublishingOrganization(ObjectNode objectNode) { + // owner organization must be specified if the token belongs to a VRE + ScopeBean scopeBean = new ScopeBean(ContextUtility.getCurrentContext()); + + List gotOrganizations = new ArrayList<>(); + if(objectNode.has(OWNER_ORG_KEY)) { + JsonNode jsonNode = objectNode.get(OWNER_ORG_KEY); + if(jsonNode.isArray()) { + ArrayNode arrayNode = (ArrayNode) jsonNode; + for(int i=0; i ckanOrganizations = getPublishingOrganization(objectNode); - String gotOrganization = null; - if(objectNode.has(OWNER_ORG_KEY)) { - gotOrganization = objectNode.get(OWNER_ORG_KEY).asText(); + for(CKANOrganization ckanOrganization : ckanOrganizations) { + ckanUser.addUserToOrganization(ckanOrganization.getName()); } - if(scopeBean.is(Type.VRE)) { - String organizationFromContext = getOrganizationName(scopeBean); - if(gotOrganization != null) { - if(gotOrganization.compareTo(organizationFromContext) != 0) { - CKANOrganization ckanOrganization = new CKANOrganization(); - ckanOrganization.setName(organizationFromContext); - ckanOrganization.read(); - String organizationID = null; - if(ckanOrganization.result.has(ID_KEY)) { - organizationID = ckanOrganization.result.get(ID_KEY).asText(); - } - if(organizationID == null || gotOrganization.compareTo(organizationID) != 0) { - throw new BadRequestException( - "You can only publish in the Organization associated to the current VRE"); - } - } - } else { - gotOrganization = organizationFromContext; - objectNode.put(OWNER_ORG_KEY, organizationFromContext); - } - } else { - if(gotOrganization == null) { - throw new BadRequestException("You must specify an Organization usign " + OWNER_ORG_KEY + " field"); - } - } - - ckanUser.addUserToOrganization(gotOrganization); return objectNode; }