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 4719b04..d35f12d 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java @@ -175,31 +175,38 @@ public class CKANPackage extends CKAN { } } - + ArrayNode extrasObjectNode; + boolean found = false; if(objectNode.has(EXTRAS_KEY)) { try { - ArrayNode extrasObjectNode = (ArrayNode) objectNode.get(EXTRAS_KEY); + extrasObjectNode = (ArrayNode) objectNode.get(EXTRAS_KEY); for(JsonNode jsonNode : extrasObjectNode) { String key = jsonNode.get(EXTRAS_KEY_KEY).asText(); if(key.compareTo(SEARCHABLE_KEY)==0) { ObjectNode searchableObjectNode = (ObjectNode) jsonNode; searchableObjectNode.put(EXTRAS_VALUE_KEY, true); extrasObjectNode.add(searchableObjectNode); + found = true; break; } } }catch (Exception e) { throw new BadRequestException("Invalid '"+EXTRAS_KEY+"' field", e); } + }else { - ArrayNode extrasObjectNode = mapper.createArrayNode(); + extrasObjectNode = mapper.createArrayNode(); + } + + if(!found) { ObjectNode searchableObjectNode = mapper.createObjectNode(); searchableObjectNode.put(EXTRAS_KEY_KEY, SEARCHABLE_KEY); searchableObjectNode.put(EXTRAS_VALUE_KEY, true); extrasObjectNode.add(searchableObjectNode); - objectNode.set(EXTRAS_KEY, extrasObjectNode); } + objectNode.set(EXTRAS_KEY, extrasObjectNode); + return objectNode; }