Changing the organization behavior to implement the feature.

This commit is contained in:
Luca Frosini 2020-06-19 17:32:21 +02:00
parent cb963dd702
commit d7cbc03f97
1 changed files with 39 additions and 32 deletions

View File

@ -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<CKANOrganization> getPublishingOrganization(ObjectNode objectNode) {
// owner organization must be specified if the token belongs to a VRE
ScopeBean scopeBean = new ScopeBean(ContextUtility.getCurrentContext());
List<CKANOrganization> 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<arrayNode.size(); i++) {
String gotOrganizationName = arrayNode.get(i).asText();
gotOrganizations.add(checkGotOrganization(gotOrganizationName));
}
}
}
if(gotOrganizations.size() == 0) {
String organizationFromContext = getOrganizationName(scopeBean);
CKANOrganization ckanOrganization = checkGotOrganization(organizationFromContext);
gotOrganizations.add(ckanOrganization);
}
return gotOrganizations;
}
public ObjectNode checkBaseInformation(String json) throws Exception {
ObjectNode objectNode = (ObjectNode) mapper.readTree(json);
@ -183,41 +219,12 @@ public class CKANPackage extends CKAN {
objectNode.put(AUTHOR_KEY, ckanUser.getName());
objectNode.put(AUTHOR_EMAIL_KEY, ckanUser.getPortalUser().getEMail());
// owner organization must be specified if the token belongs to a VRE
ScopeBean scopeBean = new ScopeBean(ContextUtility.getCurrentContext());
List<CKANOrganization> 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;
}