Skip to content

Commit 922d691

Browse files
authored
Add conditional metadata rules api
1 parent 94825e3 commit 922d691

File tree

6 files changed

+264
-1
lines changed

6 files changed

+264
-1
lines changed

cloudinary-core/src/main/java/com/cloudinary/Api.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.cloudinary.api.exceptions.*;
88
import com.cloudinary.metadata.MetadataField;
99
import com.cloudinary.metadata.MetadataDataSource;
10+
import com.cloudinary.metadata.MetadataRule;
1011
import com.cloudinary.strategies.AbstractApiStrategy;
1112
import com.cloudinary.utils.ObjectUtils;
1213
import com.cloudinary.utils.StringUtils;
@@ -789,6 +790,35 @@ public ApiResponse reorderMetadataFields(String orderBy, String direction, Map o
789790
return callApi(HttpMethod.PUT, uri, map, options);
790791
}
791792

793+
public ApiResponse listMetadataRules(Map options) throws Exception {
794+
if (options == null || options.isEmpty()) options = ObjectUtils.asMap();
795+
final Map params = new HashMap();
796+
List<String> uri = Arrays.asList("metadata_rules");
797+
return callApi(HttpMethod.GET, uri, params, options);
798+
}
799+
800+
public ApiResponse addMetadataRule(MetadataRule rule, Map options) throws Exception {
801+
if (options == null || options.isEmpty()) options = ObjectUtils.asMap();
802+
options.put("content_type", "json");
803+
final Map params = rule.asMap();
804+
List<String> uri = Arrays.asList("metadata_rules");
805+
return callApi(HttpMethod.POST, uri, params, options);
806+
}
807+
808+
public ApiResponse updateMetadataRule(String externalId, MetadataRule rule, Map options) throws Exception {
809+
if (options == null || options.isEmpty()) options = ObjectUtils.asMap();
810+
options.put("content_type", "json");
811+
final Map params = rule.asMap();
812+
List<String> uri = Arrays.asList("metadata_rules", externalId);
813+
return callApi(HttpMethod.PUT, uri, params, options);
814+
}
815+
816+
public ApiResponse deleteMetadataRule(String externalId, Map options) throws Exception {
817+
if (options == null || options.isEmpty()) options = ObjectUtils.asMap();
818+
List<String> uri = Arrays.asList("metadata_rules", externalId);
819+
return callApi(HttpMethod.DELETE, uri, ObjectUtils.emptyMap(), options);
820+
}
821+
792822
public ApiResponse analyze(String inputType, String analysisType, String uri, Map options) throws Exception {
793823
if (options == null || options.isEmpty()) options = ObjectUtils.asMap();
794824
List<String> url = Arrays.asList("analysis", "analyze", inputType);
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.cloudinary.metadata;
2+
3+
import com.cloudinary.utils.ObjectUtils;
4+
5+
import java.util.ArrayList;
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
9+
public class MetadataRule {
10+
String metadataFieldId;
11+
String name;
12+
MetadataRuleCondition condition;
13+
MetadataRuleResult result;
14+
15+
public MetadataRule(String metadataFieldId, String name, MetadataRuleCondition condition, MetadataRuleResult result) {
16+
this.metadataFieldId = metadataFieldId;
17+
this.name = name;
18+
this.condition = condition;
19+
this.result = result;
20+
}
21+
22+
public String getMetadataFieldId() {
23+
return metadataFieldId;
24+
}
25+
26+
public void setMetadataFieldId(String metadataFieldId) {
27+
this.metadataFieldId = metadataFieldId;
28+
}
29+
30+
public String getName() {
31+
return name;
32+
}
33+
34+
public void setName(String name) {
35+
this.name = name;
36+
}
37+
38+
public MetadataRuleCondition getCondition() {
39+
return condition;
40+
}
41+
42+
public void setCondition(MetadataRuleCondition condition) {
43+
this.condition = condition;
44+
}
45+
46+
public MetadataRuleResult getResult() {
47+
return result;
48+
}
49+
50+
public void setResult(MetadataRuleResult result) {
51+
this.result = result;
52+
}
53+
54+
public Map asMap() {
55+
Map map = new HashMap();
56+
map.put("metadata_field_id", getMetadataFieldId());
57+
map.put("name", getName());
58+
if (getCondition() != null) {
59+
map.put("condition", ObjectUtils.toJSON(getCondition().asMap()));
60+
}
61+
if(getResult() != null) {
62+
map.put("result", ObjectUtils.toJSON(getResult().asMap()));
63+
}
64+
return map;
65+
}
66+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.cloudinary.metadata;
2+
import java.util.HashMap;
3+
import java.util.Map;
4+
5+
public class MetadataRuleCondition {
6+
String metadata_field_id;
7+
Boolean populated;
8+
Map<String, String> includes;
9+
String equals;
10+
11+
public MetadataRuleCondition(String metadata_field_id, Boolean populated, Map<String, String> includes, String equals) {
12+
this.metadata_field_id = metadata_field_id;
13+
this.populated = populated;
14+
this.includes = includes;
15+
this.equals = equals;
16+
}
17+
18+
public String getMetadata_field_id() {
19+
return metadata_field_id;
20+
}
21+
22+
public void setMetadata_field_id(String metadata_field_id) {
23+
this.metadata_field_id = metadata_field_id;
24+
}
25+
26+
public Boolean getPopulated() {
27+
return populated;
28+
}
29+
30+
public void setPopulated(Boolean populated) {
31+
this.populated = populated;
32+
}
33+
34+
public Map<String, String> getIncludes() {
35+
return includes;
36+
}
37+
38+
public void setIncludes(Map<String, String> includes) {
39+
this.includes = includes;
40+
}
41+
42+
public String getEquals() {
43+
return equals;
44+
}
45+
46+
public void setEquals(String equals) {
47+
this.equals = equals;
48+
}
49+
50+
public Map asMap() {
51+
Map result = new HashMap(4);
52+
result.put("metadata_field_id", metadata_field_id);
53+
result.put("populated", populated);
54+
result.put("includes", includes);
55+
result.put("equals", equals);
56+
return result;
57+
}
58+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.cloudinary.metadata;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
public class MetadataRuleResult {
7+
Boolean enabled;
8+
String activateValues;
9+
String applyValues;
10+
Boolean setMandatory;
11+
12+
public MetadataRuleResult(Boolean enabled, String activateValues, String applyValues, Boolean setMandatory) {
13+
this.enabled = enabled;
14+
this.activateValues = activateValues;
15+
this.applyValues = applyValues;
16+
this.setMandatory = setMandatory;
17+
}
18+
19+
public Boolean getEnabled() {
20+
return enabled;
21+
}
22+
23+
public void setEnabled(Boolean enabled) {
24+
this.enabled = enabled;
25+
}
26+
27+
public String getActivateValues() {
28+
return activateValues;
29+
}
30+
31+
public void setActivateValues(String activateValues) {
32+
this.activateValues = activateValues;
33+
}
34+
35+
public String getApplyValues() {
36+
return applyValues;
37+
}
38+
39+
public void setApplyValues(String applyValues) {
40+
this.applyValues = applyValues;
41+
}
42+
43+
public Boolean getSetMandatory() {
44+
return setMandatory;
45+
}
46+
47+
public void setSetMandatory(Boolean setMandatory) {
48+
this.setMandatory = setMandatory;
49+
}
50+
public Map asMap() {
51+
Map result = new HashMap(4);
52+
result.put("enable", enabled);
53+
result.put("activate_values", activateValues);
54+
result.put("apply_values", applyValues);
55+
result.put("mandatory", setMandatory);
56+
return result;
57+
}
58+
}

cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractStructuredMetadataTest.java

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.cloudinary.api.exceptions.BadRequest;
77
import com.cloudinary.metadata.*;
88

9+
import com.cloudinary.test.helpers.Feature;
910
import com.cloudinary.utils.ObjectUtils;
1011
import org.hamcrest.Matchers;
1112
import org.junit.*;
@@ -196,7 +197,7 @@ public void testReorderMetadataFieldsByLabel() throws Exception {
196197
AddStringField("some_value");
197198
AddStringField("aaa");
198199
AddStringField("zzz");
199-
200+
200201
ApiResponse result = api.reorderMetadataFields("label", null, Collections.EMPTY_MAP);
201202
assertThat(getField(result, 0), Matchers.containsString("aaa"));
202203

@@ -309,6 +310,55 @@ public void testSetField() throws Exception {
309310
assertNotNull(result);
310311
assertEquals(PUBLIC_ID, ((List) result.get("public_ids")).get(0).toString());
311312
}
313+
314+
@Test
315+
public void testListMetadataRules() throws Exception {
316+
Assume.assumeTrue(MockableTest.shouldTestFeature(Feature.CONDITIONAL_METADATA_RULES));
317+
ApiResponse result = cloudinary.api().listMetadataRules(null);
318+
assertNotNull(result);
319+
}
320+
321+
@Test
322+
public void testAddMetadataRule() throws Exception {
323+
Assume.assumeTrue(MockableTest.shouldTestFeature(Feature.CONDITIONAL_METADATA_RULES));
324+
SetMetadataField field = createSetField("test123");
325+
ApiResponse response = addFieldToAccount(field);
326+
assertNotNull(response);
327+
328+
String externalId = (String) response.get("external_id");
329+
MetadataRule rule = new MetadataRule(externalId, "category-employee", new MetadataRuleCondition("category", false, null, "employee"), new MetadataRuleResult(true, "all", null, null));
330+
ApiResponse result = cloudinary.api().addMetadataRule(rule, ObjectUtils.asMap());
331+
assertNotNull(result);
332+
333+
String name = (String) result.get("name");
334+
assertEquals(name, "category-employee");
335+
}
336+
337+
@Test
338+
public void testUpdateMetadataRule() throws Exception {
339+
Assume.assumeTrue(MockableTest.shouldTestFeature(Feature.CONDITIONAL_METADATA_RULES));
340+
ApiResponse response = cloudinary.api().listMetadataRules(null);
341+
List metadataRules = (List) response.get("metadata_rules");
342+
assertNotNull(metadataRules);
343+
String externalId = (String) ((Map) metadataRules.get(0)).get("external_id");
344+
345+
MetadataRule rule = new MetadataRule(null, "test_name", null, null);
346+
ApiResponse result = cloudinary.api().updateMetadataRule(externalId, rule, ObjectUtils.asMap());
347+
assertNotNull(result);
348+
}
349+
350+
@Test
351+
public void testDeleteMetadataRule() throws Exception {
352+
Assume.assumeTrue(MockableTest.shouldTestFeature(Feature.CONDITIONAL_METADATA_RULES));
353+
ApiResponse response = cloudinary.api().listMetadataRules(null);
354+
List metadataRules = (List) response.get("metadata_rules");
355+
assertNotNull(metadataRules);
356+
String externalId = (String) ((Map) metadataRules.get(0)).get("external_id");
357+
358+
ApiResponse result = cloudinary.api().deleteMetadataRule(externalId, ObjectUtils.emptyMap());
359+
assertNotNull(result);
360+
}
361+
312362
// Metadata test helpers
313363
private SetMetadataField createSetField(String labelPrefix) {
314364
SetMetadataField setField = new SetMetadataField();

cloudinary-test-common/src/main/java/com/cloudinary/test/helpers/Feature.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ public class Feature {
44
public static final String ALL = "all";
55
public static final String DYNAMIC_FOLDERS = "dynamic_folders";
66
public static final String BACKEDUP_ASSETS = "backedup_assets";
7+
public static final String CONDITIONAL_METADATA_RULES = "conditional_metadata_rules";
78
}

0 commit comments

Comments
 (0)