Changing the organization behavior to implement the feature.
This commit is contained in:
parent
cb963dd702
commit
d7cbc03f97
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue