Refs #13306: gCat MUST enforce extra field "searchable" in published Items
Task-Url: https://support.d4science.org/issues/13306 git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-publishing/gcat@177044 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
e1e7a413ba
commit
6f2e32337f
|
@ -78,7 +78,7 @@ public class Validator {
|
|||
*/
|
||||
public static void validateAgainstProfile(JSONObject obj) throws Exception {
|
||||
|
||||
JSONArray extrasArrayOriginal = (JSONArray) obj.get(CKANPackage.EXTRA_TYPES_KEY);
|
||||
JSONArray extrasArrayOriginal = (JSONArray) obj.get(CKANPackage.EXTRAS_KEY);
|
||||
JSONArray groupsArrayOriginal = (JSONArray) obj.get(CKANPackage.GROUPS_KEY);
|
||||
JSONArray tagsArrayOriginal = (JSONArray) obj.get(CKANPackage.TAGS_KEY);
|
||||
|
||||
|
@ -101,7 +101,7 @@ public class Validator {
|
|||
while(iterator.hasNext()) {
|
||||
JSONObject object = (JSONObject) iterator.next();
|
||||
CustomField cf = new CustomField(object);
|
||||
if(cf.getKey().equals(CKANPackage.EXTRA_TYPES_KEY_VALUE_SYSTEM_TYPE)) {
|
||||
if(cf.getKey().equals(CKANPackage.EXTRAS_KEY_VALUE_SYSTEM_TYPE)) {
|
||||
metadataTypeCF = cf;
|
||||
} else if(cf.getKey().equals(SocialService.ITEM_URL)) {
|
||||
continue;
|
||||
|
@ -111,7 +111,7 @@ public class Validator {
|
|||
}
|
||||
|
||||
if(metadataTypeCF == null) {
|
||||
throw new BadRequestException("'" + CKANPackage.EXTRA_TYPES_KEY_VALUE_SYSTEM_TYPE
|
||||
throw new BadRequestException("'" + CKANPackage.EXTRAS_KEY_VALUE_SYSTEM_TYPE
|
||||
+ "' extra field is missing in context where metadata profile(s) are defined!");
|
||||
}
|
||||
|
||||
|
@ -120,7 +120,7 @@ public class Validator {
|
|||
MetadataUtility metadataUtility = MetadataUtility.getInstance();
|
||||
MetadataFormat profile = metadataUtility.getMetadataFormat(profileName);
|
||||
if(profile == null) {
|
||||
throw new BadRequestException("'" + CKANPackage.EXTRA_TYPES_KEY_VALUE_SYSTEM_TYPE + "' extra field's value ('"
|
||||
throw new BadRequestException("'" + CKANPackage.EXTRAS_KEY_VALUE_SYSTEM_TYPE + "' extra field's value ('"
|
||||
+ profileName
|
||||
+ "') specified as custom field doesn't match any of the profiles defined in this context!");
|
||||
} else {
|
||||
|
@ -207,15 +207,15 @@ public class Validator {
|
|||
// convert back to json
|
||||
for(CustomField customField : validatedCustomFields) {
|
||||
JSONObject jsonObj = new JSONObject();
|
||||
jsonObj.put(CKANPackage.EXTRA_TYPES_KEY_KEY, customField.getQualifiedKey());
|
||||
jsonObj.put(CKANPackage.EXTRA_TYPES_VALUE_KEY, customField.getValue());
|
||||
jsonObj.put(CKANPackage.EXTRAS_KEY_KEY, customField.getQualifiedKey());
|
||||
jsonObj.put(CKANPackage.EXTRAS_VALUE_KEY, customField.getValue());
|
||||
extrasArrayUpdated.add(jsonObj);
|
||||
}
|
||||
|
||||
// add metadata type field as last element
|
||||
JSONObject metadataTypeJSON = new JSONObject();
|
||||
metadataTypeJSON.put(CKANPackage.EXTRA_TYPES_KEY_KEY, metadataTypeCF.getKey());
|
||||
metadataTypeJSON.put(CKANPackage.EXTRA_TYPES_VALUE_KEY, metadataTypeCF.getValue());
|
||||
metadataTypeJSON.put(CKANPackage.EXTRAS_KEY_KEY, metadataTypeCF.getKey());
|
||||
metadataTypeJSON.put(CKANPackage.EXTRAS_VALUE_KEY, metadataTypeCF.getValue());
|
||||
extrasArrayUpdated.add(metadataTypeJSON);
|
||||
|
||||
// create groups
|
||||
|
@ -230,7 +230,7 @@ public class Validator {
|
|||
|
||||
obj.put(CKANPackage.TAGS_KEY, tagsArrayOriginal);
|
||||
obj.put(CKANPackage.GROUPS_KEY, groupsArrayOriginal);
|
||||
obj.put(CKANPackage.EXTRA_TYPES_KEY, extrasArrayUpdated);
|
||||
obj.put(CKANPackage.EXTRAS_KEY, extrasArrayUpdated);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -62,10 +62,12 @@ public class CKANPackage extends CKAN {
|
|||
protected static final String RESOURCES_KEY = "resources";
|
||||
protected static final String TITLE_KEY = "title";
|
||||
|
||||
public static final String EXTRA_TYPES_KEY = "extras";
|
||||
public static final String EXTRA_TYPES_KEY_KEY = "key";
|
||||
public static final String EXTRA_TYPES_KEY_VALUE_SYSTEM_TYPE = "system:type";
|
||||
public static final String EXTRA_TYPES_VALUE_KEY = "value";
|
||||
public static final String EXTRAS_KEY = "extras";
|
||||
public static final String EXTRAS_KEY_KEY = "key";
|
||||
public static final String EXTRAS_KEY_VALUE_SYSTEM_TYPE = "system:type";
|
||||
public static final String EXTRAS_VALUE_KEY = "value";
|
||||
|
||||
public static final String SEARCHABLE_KEY = "searchable";
|
||||
|
||||
public static final String GROUPS_KEY = "groups";
|
||||
public static final String TAGS_KEY = "tags";
|
||||
|
@ -146,6 +148,30 @@ public class CKANPackage extends CKAN {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
if(objectNode.has(EXTRAS_KEY)) {
|
||||
try {
|
||||
ArrayNode 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);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}catch (Exception e) {
|
||||
throw new BadRequestException("Invalid '"+EXTRAS_KEY+"' field", e);
|
||||
}
|
||||
}else {
|
||||
ArrayNode extrasObjectNode = mapper.createArrayNode();
|
||||
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);
|
||||
}
|
||||
|
||||
return objectNode;
|
||||
}
|
||||
|
||||
|
|
|
@ -102,10 +102,10 @@ public class CKANPackageTest extends ContextTest {
|
|||
resourceNode.put(CKANResource.URL_KEY, "https://goo.gl/J8AwQW");
|
||||
resourceArrayNode.add(resourceNode);
|
||||
|
||||
ArrayNode extraArrayNode = itemObjectNode.putArray(CKANPackage.EXTRA_TYPES_KEY);
|
||||
ArrayNode extraArrayNode = itemObjectNode.putArray(CKANPackage.EXTRAS_KEY);
|
||||
ObjectNode extraNode = mapper.createObjectNode();
|
||||
extraNode.put(CKANPackage.EXTRA_TYPES_KEY_KEY, CKANPackage.EXTRA_TYPES_KEY_VALUE_SYSTEM_TYPE);
|
||||
extraNode.put(CKANPackage.EXTRA_TYPES_VALUE_KEY, EXTRAS_TYPE_VALUE_VALUE);
|
||||
extraNode.put(CKANPackage.EXTRAS_KEY_KEY, CKANPackage.EXTRAS_KEY_VALUE_SYSTEM_TYPE);
|
||||
extraNode.put(CKANPackage.EXTRAS_VALUE_KEY, EXTRAS_TYPE_VALUE_VALUE);
|
||||
extraArrayNode.add(extraNode);
|
||||
|
||||
CKANPackage ckanPackage = new CKANPackage();
|
||||
|
|
Loading…
Reference in New Issue