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 {
|
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 groupsArrayOriginal = (JSONArray) obj.get(CKANPackage.GROUPS_KEY);
|
||||||
JSONArray tagsArrayOriginal = (JSONArray) obj.get(CKANPackage.TAGS_KEY);
|
JSONArray tagsArrayOriginal = (JSONArray) obj.get(CKANPackage.TAGS_KEY);
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ public class Validator {
|
||||||
while(iterator.hasNext()) {
|
while(iterator.hasNext()) {
|
||||||
JSONObject object = (JSONObject) iterator.next();
|
JSONObject object = (JSONObject) iterator.next();
|
||||||
CustomField cf = new CustomField(object);
|
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;
|
metadataTypeCF = cf;
|
||||||
} else if(cf.getKey().equals(SocialService.ITEM_URL)) {
|
} else if(cf.getKey().equals(SocialService.ITEM_URL)) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -111,7 +111,7 @@ public class Validator {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(metadataTypeCF == null) {
|
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!");
|
+ "' extra field is missing in context where metadata profile(s) are defined!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ public class Validator {
|
||||||
MetadataUtility metadataUtility = MetadataUtility.getInstance();
|
MetadataUtility metadataUtility = MetadataUtility.getInstance();
|
||||||
MetadataFormat profile = metadataUtility.getMetadataFormat(profileName);
|
MetadataFormat profile = metadataUtility.getMetadataFormat(profileName);
|
||||||
if(profile == null) {
|
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
|
+ profileName
|
||||||
+ "') specified as custom field doesn't match any of the profiles defined in this context!");
|
+ "') specified as custom field doesn't match any of the profiles defined in this context!");
|
||||||
} else {
|
} else {
|
||||||
|
@ -207,15 +207,15 @@ public class Validator {
|
||||||
// convert back to json
|
// convert back to json
|
||||||
for(CustomField customField : validatedCustomFields) {
|
for(CustomField customField : validatedCustomFields) {
|
||||||
JSONObject jsonObj = new JSONObject();
|
JSONObject jsonObj = new JSONObject();
|
||||||
jsonObj.put(CKANPackage.EXTRA_TYPES_KEY_KEY, customField.getQualifiedKey());
|
jsonObj.put(CKANPackage.EXTRAS_KEY_KEY, customField.getQualifiedKey());
|
||||||
jsonObj.put(CKANPackage.EXTRA_TYPES_VALUE_KEY, customField.getValue());
|
jsonObj.put(CKANPackage.EXTRAS_VALUE_KEY, customField.getValue());
|
||||||
extrasArrayUpdated.add(jsonObj);
|
extrasArrayUpdated.add(jsonObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add metadata type field as last element
|
// add metadata type field as last element
|
||||||
JSONObject metadataTypeJSON = new JSONObject();
|
JSONObject metadataTypeJSON = new JSONObject();
|
||||||
metadataTypeJSON.put(CKANPackage.EXTRA_TYPES_KEY_KEY, metadataTypeCF.getKey());
|
metadataTypeJSON.put(CKANPackage.EXTRAS_KEY_KEY, metadataTypeCF.getKey());
|
||||||
metadataTypeJSON.put(CKANPackage.EXTRA_TYPES_VALUE_KEY, metadataTypeCF.getValue());
|
metadataTypeJSON.put(CKANPackage.EXTRAS_VALUE_KEY, metadataTypeCF.getValue());
|
||||||
extrasArrayUpdated.add(metadataTypeJSON);
|
extrasArrayUpdated.add(metadataTypeJSON);
|
||||||
|
|
||||||
// create groups
|
// create groups
|
||||||
|
@ -230,7 +230,7 @@ public class Validator {
|
||||||
|
|
||||||
obj.put(CKANPackage.TAGS_KEY, tagsArrayOriginal);
|
obj.put(CKANPackage.TAGS_KEY, tagsArrayOriginal);
|
||||||
obj.put(CKANPackage.GROUPS_KEY, groupsArrayOriginal);
|
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 RESOURCES_KEY = "resources";
|
||||||
protected static final String TITLE_KEY = "title";
|
protected static final String TITLE_KEY = "title";
|
||||||
|
|
||||||
public static final String EXTRA_TYPES_KEY = "extras";
|
public static final String EXTRAS_KEY = "extras";
|
||||||
public static final String EXTRA_TYPES_KEY_KEY = "key";
|
public static final String EXTRAS_KEY_KEY = "key";
|
||||||
public static final String EXTRA_TYPES_KEY_VALUE_SYSTEM_TYPE = "system:type";
|
public static final String EXTRAS_KEY_VALUE_SYSTEM_TYPE = "system:type";
|
||||||
public static final String EXTRA_TYPES_VALUE_KEY = "value";
|
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 GROUPS_KEY = "groups";
|
||||||
public static final String TAGS_KEY = "tags";
|
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;
|
return objectNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,10 +102,10 @@ public class CKANPackageTest extends ContextTest {
|
||||||
resourceNode.put(CKANResource.URL_KEY, "https://goo.gl/J8AwQW");
|
resourceNode.put(CKANResource.URL_KEY, "https://goo.gl/J8AwQW");
|
||||||
resourceArrayNode.add(resourceNode);
|
resourceArrayNode.add(resourceNode);
|
||||||
|
|
||||||
ArrayNode extraArrayNode = itemObjectNode.putArray(CKANPackage.EXTRA_TYPES_KEY);
|
ArrayNode extraArrayNode = itemObjectNode.putArray(CKANPackage.EXTRAS_KEY);
|
||||||
ObjectNode extraNode = mapper.createObjectNode();
|
ObjectNode extraNode = mapper.createObjectNode();
|
||||||
extraNode.put(CKANPackage.EXTRA_TYPES_KEY_KEY, CKANPackage.EXTRA_TYPES_KEY_VALUE_SYSTEM_TYPE);
|
extraNode.put(CKANPackage.EXTRAS_KEY_KEY, CKANPackage.EXTRAS_KEY_VALUE_SYSTEM_TYPE);
|
||||||
extraNode.put(CKANPackage.EXTRA_TYPES_VALUE_KEY, EXTRAS_TYPE_VALUE_VALUE);
|
extraNode.put(CKANPackage.EXTRAS_VALUE_KEY, EXTRAS_TYPE_VALUE_VALUE);
|
||||||
extraArrayNode.add(extraNode);
|
extraArrayNode.add(extraNode);
|
||||||
|
|
||||||
CKANPackage ckanPackage = new CKANPackage();
|
CKANPackage ckanPackage = new CKANPackage();
|
||||||
|
|
Loading…
Reference in New Issue