Skip to content

Commit e0dffc5

Browse files
Support for sprite genreation, multi and explode. Support new async/notification flags
1 parent cb3ec75 commit e0dffc5

3 files changed

Lines changed: 102 additions & 8 deletions

File tree

src/com/cloudinary/Transformation.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ public class Transformation {
1818
protected List<Map> transformations;
1919
protected String htmlWidth;
2020
protected String htmlHeight;
21+
22+
public Transformation(Transformation transformation) {
23+
this(dup(transformation.transformations));
24+
}
2125

2226
// Warning: options will destructively updated!
2327
public Transformation(List<Map> transformations) {
@@ -184,4 +188,11 @@ public String getHtmlHeight() {
184188
return htmlHeight;
185189
}
186190

191+
private static List<Map> dup(List<Map> transformations) {
192+
List<Map> result = new ArrayList<Map>();
193+
for (Map params : transformations) {
194+
result.add(new HashMap(params));
195+
}
196+
return result;
197+
}
187198
}

src/com/cloudinary/Uploader.java

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class Uploader {
3131
public Uploader(Cloudinary cloudinary) {
3232
this.cloudinary = cloudinary;
3333
}
34-
static final String[] BOOLEAN_UPLOAD_OPTIONS = new String[] {"backup", "exif", "faces", "colors", "image_metadata"};
34+
static final String[] BOOLEAN_UPLOAD_OPTIONS = new String[] {"backup", "exif", "faces", "colors", "image_metadata", "use_filename", "eager_async"};
3535

3636
public Map<String, String> buildUploadParams(Map options) {
3737
if (options == null) options = Cloudinary.emptyMap();
@@ -54,6 +54,8 @@ public Map<String, String> buildUploadParams(Map options) {
5454
}
5555
params.put("eager", buildEager((List<Transformation>) options.get("eager")));
5656
params.put("headers", buildCustomHeaders(options.get("headers")));
57+
params.put("notification_url", (String) options.get("notification_url"));
58+
params.put("eager_notification_url", (String) options.get("eager_notification_url"));
5759
params.put("tags", StringUtils.join(Cloudinary.asArray(options.get("tags")), ","));
5860
return params;
5961
}
@@ -84,6 +86,62 @@ public Map explicit(String publicId, Map options) throws IOException {
8486
return callApi("explicit", params, options, null);
8587
}
8688

89+
public Map generate_sprite(String tag, Map options) throws IOException {
90+
if (options == null) options = Cloudinary.emptyMap();
91+
Map<String, String> params = new HashMap<String, String>();
92+
Object transParam = options.get("transformation");
93+
Transformation transformation = null;
94+
if (transParam instanceof Transformation) {
95+
transformation = new Transformation((Transformation) transParam);
96+
} else if (transParam instanceof String) {
97+
transformation = new Transformation().rawTransformation((String) transParam);
98+
} else {
99+
transformation = new Transformation();
100+
}
101+
String format = (String) options.get("format");
102+
if (format != null) {
103+
transformation.fetchFormat(format);
104+
}
105+
params.put("transformation", transformation.generate());
106+
params.put("tag", tag);
107+
params.put("notification_url", (String) options.get("notification_url"));
108+
params.put("async", Cloudinary.asBoolean(options.get("async"), false).toString());
109+
return callApi("sprite", params, options, null);
110+
}
111+
112+
public Map multi(String tag, Map options) throws IOException {
113+
if (options == null) options = Cloudinary.emptyMap();
114+
Map<String, String> params = new HashMap<String, String>();
115+
Object transformation = options.get("transformation");
116+
if (transformation != null) {
117+
if (transformation instanceof Transformation) {
118+
transformation = ((Transformation) transformation).generate();
119+
}
120+
params.put("transformation", transformation.toString());
121+
}
122+
params.put("tag", tag);
123+
params.put("notification_url", (String) options.get("notification_url"));
124+
params.put("format", (String) options.get("format"));
125+
params.put("async", Cloudinary.asBoolean(options.get("async"), false).toString());
126+
return callApi("multi", params, options, null);
127+
}
128+
129+
public Map explode(String public_id, Map options) throws IOException {
130+
if (options == null) options = Cloudinary.emptyMap();
131+
Map<String, String> params = new HashMap<String, String>();
132+
Object transformation = options.get("transformation");
133+
if (transformation != null) {
134+
if (transformation instanceof Transformation) {
135+
transformation = ((Transformation) transformation).generate();
136+
}
137+
params.put("transformation", transformation.toString());
138+
}
139+
params.put("public_id", public_id);
140+
params.put("notification_url", (String) options.get("notification_url"));
141+
params.put("format", (String) options.get("format"));
142+
return callApi("explode", params, options, null);
143+
}
144+
87145
// options may include 'exclusive' (boolean) which causes clearing this tag
88146
// from all other resources
89147
public Map addTag(String tag, String[] publicIds, Map options) throws IOException {

tests/com/cloudinary/test/UploaderTest.java

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,37 @@ public void testText() throws IOException {
7575

7676
@Test
7777
public void testImageUploadTag() {
78-
String tag = cloudinary.uploader().imageUploadTag("test-field", Cloudinary.emptyMap(), Cloudinary.asMap("htmlattr", "htmlvalue"));
79-
assertTrue(tag.contains("type='file'"));
80-
assertTrue(tag.contains("data-cloudinary-field='test-field'"));
81-
assertTrue(tag.contains("class='cloudinary-fileupload'"));
82-
assertTrue(tag.contains("htmlattr='htmlvalue'"));
83-
tag = cloudinary.uploader().imageUploadTag("test-field", Cloudinary.emptyMap(), Cloudinary.asMap("class", "myclass"));
84-
assertTrue(tag.contains("class='cloudinary-fileupload myclass'"));
78+
String tag = cloudinary.uploader().imageUploadTag("test-field", Cloudinary.emptyMap(), Cloudinary.asMap("htmlattr", "htmlvalue"));
79+
assertTrue(tag.contains("type='file'"));
80+
assertTrue(tag.contains("data-cloudinary-field='test-field'"));
81+
assertTrue(tag.contains("class='cloudinary-fileupload'"));
82+
assertTrue(tag.contains("htmlattr='htmlvalue'"));
83+
tag = cloudinary.uploader().imageUploadTag("test-field", Cloudinary.emptyMap(), Cloudinary.asMap("class", "myclass"));
84+
assertTrue(tag.contains("class='cloudinary-fileupload myclass'"));
85+
}
86+
87+
@Test
88+
public void testSprite() throws IOException {
89+
cloudinary.uploader().upload("tests/logo.png", Cloudinary.asMap("tags", "sprite_test_tag", "public_id", "sprite_test_tag_1"));
90+
cloudinary.uploader().upload("tests/logo.png", Cloudinary.asMap("tags", "sprite_test_tag", "public_id", "sprite_test_tag_2"));
91+
Map result = cloudinary.uploader().generate_sprite("sprite_test_tag", Cloudinary.emptyMap());
92+
assertEquals(2, ((Map) result.get("image_infos")).size());
93+
result = cloudinary.uploader().generate_sprite("sprite_test_tag", Cloudinary.asMap("transformation", "w_100"));
94+
assertTrue(((String) result.get("css_url")).contains("w_100"));
95+
result = cloudinary.uploader().generate_sprite("sprite_test_tag", Cloudinary.asMap("transformation", new Transformation().width(100), "format", "jpg"));
96+
assertTrue(((String) result.get("css_url")).contains("f_jpg,w_100"));
97+
}
98+
99+
@Test
100+
public void testMulti() throws IOException {
101+
cloudinary.uploader().upload("tests/logo.png", Cloudinary.asMap("tags", "multi_test_tag", "public_id", "multi_test_tag_1"));
102+
cloudinary.uploader().upload("tests/logo.png", Cloudinary.asMap("tags", "multi_test_tag", "public_id", "multi_test_tag_2"));
103+
Map result = cloudinary.uploader().multi("multi_test_tag", Cloudinary.emptyMap());
104+
assertTrue(((String) result.get("url")).endsWith(".gif"));
105+
result = cloudinary.uploader().multi("multi_test_tag", Cloudinary.asMap("transformation", "w_100"));
106+
assertTrue(((String) result.get("url")).contains("w_100"));
107+
result = cloudinary.uploader().multi("multi_test_tag", Cloudinary.asMap("transformation", new Transformation().width(111), "format", "pdf"));
108+
assertTrue(((String) result.get("url")).contains("w_111"));
109+
assertTrue(((String) result.get("url")).endsWith(".pdf"));
85110
}
86111
}

0 commit comments

Comments
 (0)