From 1ce683233826f144f3301235b123d1f354e66a41 Mon Sep 17 00:00:00 2001 From: Campbell Date: Wed, 15 Jan 2025 21:24:57 +1100 Subject: [PATCH 1/2] Allow users of the SDK to pprovide their own copy of the apache HTTP client --- .../main/java/com/cloudinary/Cloudinary.java | 77 +++++-------------- .../legacy/LegacyCloudinaryLoader.java | 60 +++++++++++++++ .../cloudinary/strategies/StrategyLoader.java | 5 +- .../java/com/cloudinary/AuthTokenTest.java | 5 +- .../cloudinary/analytics/AnalyticsTest.java | 3 +- .../com/cloudinary/test/CloudinaryTest.java | 5 +- .../cloudinary/transformation/LayerTest.java | 3 +- .../com/cloudinary/http5/ApiStrategy.java | 17 ++-- .../cloudinary/http5/CloudinaryClient.java | 31 ++++++++ .../cloudinary/http5/UploaderStrategy.java | 14 +++- .../main/java/com/cloudinary/Singleton.java | 4 +- .../test/AbstractAccountApiTest.java | 5 +- .../com/cloudinary/test/AbstractApiTest.java | 7 +- .../cloudinary/test/AbstractContextTest.java | 9 ++- .../test/AbstractFoldersApiTest.java | 3 +- .../cloudinary/test/AbstractSearchTest.java | 9 ++- .../AbstractStreamingProfilesApiTest.java | 7 +- .../test/AbstractStructuredMetadataTest.java | 7 +- .../cloudinary/test/AbstractUploaderTest.java | 9 ++- 19 files changed, 181 insertions(+), 99 deletions(-) create mode 100644 cloudinary-core/src/main/java/com/cloudinary/legacy/LegacyCloudinaryLoader.java create mode 100644 cloudinary-http5/src/main/java/com/cloudinary/http5/CloudinaryClient.java diff --git a/cloudinary-core/src/main/java/com/cloudinary/Cloudinary.java b/cloudinary-core/src/main/java/com/cloudinary/Cloudinary.java index 9bdbe122..bbdceef9 100644 --- a/cloudinary-core/src/main/java/com/cloudinary/Cloudinary.java +++ b/cloudinary-core/src/main/java/com/cloudinary/Cloudinary.java @@ -4,7 +4,6 @@ import com.cloudinary.api.signing.NotificationRequestSignatureVerifier; import com.cloudinary.strategies.AbstractApiStrategy; import com.cloudinary.strategies.AbstractUploaderStrategy; -import com.cloudinary.strategies.StrategyLoader; import com.cloudinary.utils.Analytics; import com.cloudinary.utils.ObjectUtils; import com.cloudinary.utils.StringUtils; @@ -18,15 +17,7 @@ import static com.cloudinary.Util.buildMultiParams; @SuppressWarnings({"rawtypes", "unchecked"}) -public class Cloudinary { - - private static List UPLOAD_STRATEGIES = new ArrayList(Arrays.asList( - "com.cloudinary.android.UploaderStrategy", - "com.cloudinary.http5.UploaderStrategy")); - public static List API_STRATEGIES = new ArrayList(Arrays.asList( - "com.cloudinary.android.ApiStrategy", - "com.cloudinary.http5.ApiStrategy")); - +public abstract class Cloudinary { public final static String CF_SHARED_CDN = "d3jpl91pxevbkh.cloudfront.net"; public final static String OLD_AKAMAI_SHARED_CDN = "cloudinary-a.akamaihd.net"; public final static String AKAMAI_SHARED_CDN = "res.cloudinary.com"; @@ -37,8 +28,8 @@ public class Cloudinary { public final static String USER_AGENT_JAVA_VERSION = "(Java " + System.getProperty("java.version") + ")"; public final Configuration config; - private AbstractUploaderStrategy uploaderStrategy; - private AbstractApiStrategy apiStrategy; + private final AbstractUploaderStrategy uploaderStrategy; + private final AbstractApiStrategy apiStrategy; private String userAgent = USER_AGENT_PREFIX+"/"+ VERSION + " "+USER_AGENT_JAVA_VERSION; public Analytics analytics = new Analytics(); public Uploader uploader() { @@ -57,51 +48,10 @@ public SearchFolders searchFolders() { return new SearchFolders(this); } - public static void registerUploaderStrategy(String className) { - if (!UPLOAD_STRATEGIES.contains(className)) { - UPLOAD_STRATEGIES.add(className); - } - - } - - public static void registerAPIStrategy(String className) { - if (!API_STRATEGIES.contains(className)) { - API_STRATEGIES.add(className); - } - } - - private void loadStrategies() { - if (!this.config.loadStrategies) return; - uploaderStrategy = StrategyLoader.find(UPLOAD_STRATEGIES); - - if (uploaderStrategy == null) { - throw new UnknownError("Can't find Cloudinary platform adapter [" + StringUtils.join(UPLOAD_STRATEGIES, ",") + "]"); - } - - apiStrategy = StrategyLoader.find(API_STRATEGIES); - if (apiStrategy == null) { - throw new UnknownError("Can't find Cloudinary platform adapter [" + StringUtils.join(API_STRATEGIES, ",") + "]"); - } - } - - public Cloudinary(Map config) { - this.config = new Configuration(config); - loadStrategies(); - } - - public Cloudinary(String cloudinaryUrl) { - this.config = Configuration.from(cloudinaryUrl); - loadStrategies(); - } - - public Cloudinary() { - String cloudinaryUrl = System.getProperty("CLOUDINARY_URL", System.getenv("CLOUDINARY_URL")); - if (cloudinaryUrl != null) { - this.config = Configuration.from(cloudinaryUrl); - } else { - this.config = new Configuration(); - } - loadStrategies(); + public Cloudinary(Configuration config, AbstractUploaderStrategy uploaderStrategy, AbstractApiStrategy apiStrategy) { + this.config = config; + this.apiStrategy = apiStrategy; + this.uploaderStrategy = uploaderStrategy; } public Url url() { @@ -395,4 +345,17 @@ private String buildUrl(String base, Map params) throws Unsuppor } return urlBuilder.toString(); } + + /** + * Attempts to load a cloudinary config from a URL present in the Environment Property "CLOUDINARY_URL". + * If no property is set in this JVM then a default config is returned. + */ + protected static Configuration loadDefaultConfig() { + String cloudinaryUrl = System.getProperty("CLOUDINARY_URL", System.getenv("CLOUDINARY_URL")); + if (cloudinaryUrl != null) { + return Configuration.from(cloudinaryUrl); + } else { + return new Configuration(); + } + } } diff --git a/cloudinary-core/src/main/java/com/cloudinary/legacy/LegacyCloudinaryLoader.java b/cloudinary-core/src/main/java/com/cloudinary/legacy/LegacyCloudinaryLoader.java new file mode 100644 index 00000000..b1000713 --- /dev/null +++ b/cloudinary-core/src/main/java/com/cloudinary/legacy/LegacyCloudinaryLoader.java @@ -0,0 +1,60 @@ +package com.cloudinary.legacy; + +import com.cloudinary.Cloudinary; +import com.cloudinary.Configuration; +import com.cloudinary.strategies.AbstractApiStrategy; +import com.cloudinary.strategies.AbstractUploaderStrategy; +import com.cloudinary.strategies.StrategyLoader; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * Allows for construction of the abstract Cloudinary class using the legacy method of loading classes dynamically + * using reflection. This is needed to support the cloudinary-taglib library. + * + * @since some version number + *

+ * Replaced by {@link com.cloudinary.http5.CloudinaryClient} + * @deprecated this method of instantiation is deprecated and not recommended for new projects. + */ +@Deprecated +public class LegacyCloudinaryLoader extends Cloudinary { + private static final List UPLOAD_STRATEGIES = new ArrayList<>(Arrays.asList( + "com.cloudinary.android.UploaderStrategy", + "com.cloudinary.http5.UploaderStrategy")); + public static final List API_STRATEGIES = new ArrayList<>(Arrays.asList( + "com.cloudinary.android.ApiStrategy", + "com.cloudinary.http5.ApiStrategy")); + + + public LegacyCloudinaryLoader() { + super(loadDefaultConfig(), getUploaderStrategy(loadDefaultConfig()), getApiStrategy(loadDefaultConfig())); + } + + public LegacyCloudinaryLoader(Map configuration) { + super(new Configuration(configuration), getUploaderStrategy(new Configuration(configuration)), getApiStrategy(new Configuration(configuration))); + } + + public LegacyCloudinaryLoader(String url) { + super(Configuration.from(url), getUploaderStrategy(Configuration.from(url)), getApiStrategy(Configuration.from(url))); + } + + private static AbstractApiStrategy getApiStrategy(Configuration configuration) { + if (!configuration.loadStrategies) { + return null; + } + + return StrategyLoader.find(API_STRATEGIES); + } + + private static AbstractUploaderStrategy getUploaderStrategy(Configuration configuration) { + if (!configuration.loadStrategies) { + return null; + } + + return StrategyLoader.find(UPLOAD_STRATEGIES); + } +} \ No newline at end of file diff --git a/cloudinary-core/src/main/java/com/cloudinary/strategies/StrategyLoader.java b/cloudinary-core/src/main/java/com/cloudinary/strategies/StrategyLoader.java index 66d37b83..5345a5d2 100644 --- a/cloudinary-core/src/main/java/com/cloudinary/strategies/StrategyLoader.java +++ b/cloudinary-core/src/main/java/com/cloudinary/strategies/StrategyLoader.java @@ -1,5 +1,7 @@ package com.cloudinary.strategies; +import com.cloudinary.utils.StringUtils; + import java.util.List; public class StrategyLoader { @@ -22,8 +24,7 @@ public static T find(List strategies) { return strategy; } } - return null; - + throw new UnknownError("Can't find Cloudinary platform adapter [" + StringUtils.join(strategies, ",") + "]"); } public boolean exists(List strategies) { diff --git a/cloudinary-core/src/test/java/com/cloudinary/AuthTokenTest.java b/cloudinary-core/src/test/java/com/cloudinary/AuthTokenTest.java index 49fd8d35..a3110557 100644 --- a/cloudinary-core/src/test/java/com/cloudinary/AuthTokenTest.java +++ b/cloudinary-core/src/test/java/com/cloudinary/AuthTokenTest.java @@ -1,5 +1,6 @@ package com.cloudinary; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.utils.ObjectUtils; import org.hamcrest.CoreMatchers; @@ -30,7 +31,7 @@ public class AuthTokenTest { @Before public void setUp() { System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - this.cloudinary = new Cloudinary("cloudinary://a:b@test123?load_strategies=false&analytics=false"); + this.cloudinary = new LegacyCloudinaryLoader("cloudinary://a:b@test123?load_strategies=false&analytics=false"); final AuthToken authToken = new AuthToken(KEY).duration(300); authToken.startTime(11111111); // start time is set for test purposes cloudinary.config.authToken = authToken; @@ -99,7 +100,7 @@ public void testAuthenticatedUrl() { @Test public void testConfiguration() { - cloudinary = new Cloudinary("cloudinary://a:b@test123?load_strategies=false&auth_token[key]=aabbcc112233&auth_token[duration]=200"); + cloudinary = new LegacyCloudinaryLoader("cloudinary://a:b@test123?load_strategies=false&auth_token[key]=aabbcc112233&auth_token[duration]=200"); assertEquals(cloudinary.config.authToken, new AuthToken("aabbcc112233").duration(200)); } diff --git a/cloudinary-core/src/test/java/com/cloudinary/analytics/AnalyticsTest.java b/cloudinary-core/src/test/java/com/cloudinary/analytics/AnalyticsTest.java index e87143c6..f0e425e3 100644 --- a/cloudinary-core/src/test/java/com/cloudinary/analytics/AnalyticsTest.java +++ b/cloudinary-core/src/test/java/com/cloudinary/analytics/AnalyticsTest.java @@ -2,6 +2,7 @@ import com.cloudinary.AuthToken; import com.cloudinary.Cloudinary; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.utils.Analytics; import org.junit.*; import org.junit.rules.TestName; @@ -20,7 +21,7 @@ public class AnalyticsTest { @Before public void setUp() { System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - this.cloudinary = new Cloudinary("cloudinary://a:b@test123?load_strategies=false"); + this.cloudinary = new LegacyCloudinaryLoader("cloudinary://a:b@test123?load_strategies=false"); } @Test diff --git a/cloudinary-core/src/test/java/com/cloudinary/test/CloudinaryTest.java b/cloudinary-core/src/test/java/com/cloudinary/test/CloudinaryTest.java index b43a2bc8..8fee1910 100644 --- a/cloudinary-core/src/test/java/com/cloudinary/test/CloudinaryTest.java +++ b/cloudinary-core/src/test/java/com/cloudinary/test/CloudinaryTest.java @@ -1,6 +1,7 @@ package com.cloudinary.test; import com.cloudinary.*; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.transformation.*; import com.cloudinary.utils.ObjectUtils; import junitparams.JUnitParamsRunner; @@ -45,7 +46,7 @@ public class CloudinaryTest { @Before public void setUp() { System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - this.cloudinary = new Cloudinary("cloudinary://a:b@test123?load_strategies=false&analytics=false"); + this.cloudinary = new LegacyCloudinaryLoader("cloudinary://a:b@test123?load_strategies=false&analytics=false"); } @Test @@ -726,7 +727,7 @@ public void testDownloadSprite() throws Exception{ @Test public void testDownloadMulti() throws Exception{ - cloudinary = new Cloudinary("cloudinary://571927874334573:yABWqlfSV2d5pRW4ujHJYA7SD34@nitzanj?load_strategies=false"); + cloudinary = new LegacyCloudinaryLoader("cloudinary://571927874334573:yABWqlfSV2d5pRW4ujHJYA7SD34@nitzanj?load_strategies=false"); final String multiTestTag = "multi_test_tag"; final String url1 = "https://res.cloudinary.com/demo/image/upload/sample"; diff --git a/cloudinary-core/src/test/java/com/cloudinary/transformation/LayerTest.java b/cloudinary-core/src/test/java/com/cloudinary/transformation/LayerTest.java index ca230f52..e1cf3378 100644 --- a/cloudinary-core/src/test/java/com/cloudinary/transformation/LayerTest.java +++ b/cloudinary-core/src/test/java/com/cloudinary/transformation/LayerTest.java @@ -2,6 +2,7 @@ import com.cloudinary.Cloudinary; import com.cloudinary.Transformation; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -19,7 +20,7 @@ public class LayerTest { @Before public void setUp() { - this.cloudinary = new Cloudinary("cloudinary://a:b@test123?load_strategies=false&analytics=false"); + this.cloudinary = new LegacyCloudinaryLoader("cloudinary://a:b@test123?load_strategies=false&analytics=false"); } @After diff --git a/cloudinary-http5/src/main/java/com/cloudinary/http5/ApiStrategy.java b/cloudinary-http5/src/main/java/com/cloudinary/http5/ApiStrategy.java index 40171489..463a8238 100644 --- a/cloudinary-http5/src/main/java/com/cloudinary/http5/ApiStrategy.java +++ b/cloudinary-http5/src/main/java/com/cloudinary/http5/ApiStrategy.java @@ -9,6 +9,7 @@ import com.cloudinary.utils.ObjectUtils; import org.apache.hc.client5.http.classic.methods.*; import org.apache.hc.client5.http.entity.UrlEncodedFormEntity; +import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; import org.apache.hc.client5.http.impl.classic.HttpClients; @@ -34,17 +35,23 @@ public class ApiStrategy extends AbstractApiStrategy { private static final String APACHE_HTTP_CLIENT_VERSION = System.getProperty("apache.http.client.version", "5.3.1"); - private CloseableHttpClient client; - - @Override - public void init(Api api) { - super.init(api); + private final CloseableHttpClient client; + public ApiStrategy() { this.client = HttpClients.custom() .setUserAgent(this.api.cloudinary.getUserAgent() + " ApacheHttpClient/" + APACHE_HTTP_CLIENT_VERSION) .build(); } + public ApiStrategy(CloseableHttpClient client) { + this.client = client; + } + + @Override + public void init(Api api) { + super.init(api); + } + @SuppressWarnings({"rawtypes", "unchecked"}) public ApiResponse callApi(Api.HttpMethod method, String apiUrl, Map params, Map options, String autorizationHeader) throws Exception { HttpUriRequestBase request = prepareRequest(method, apiUrl, params, options); diff --git a/cloudinary-http5/src/main/java/com/cloudinary/http5/CloudinaryClient.java b/cloudinary-http5/src/main/java/com/cloudinary/http5/CloudinaryClient.java new file mode 100644 index 00000000..f61be996 --- /dev/null +++ b/cloudinary-http5/src/main/java/com/cloudinary/http5/CloudinaryClient.java @@ -0,0 +1,31 @@ +package com.cloudinary.http5; + +import com.cloudinary.Cloudinary; +import com.cloudinary.Configuration; +import com.cloudinary.strategies.AbstractApiStrategy; +import com.cloudinary.strategies.AbstractUploaderStrategy; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; + +import java.util.Map; + +public class CloudinaryClient extends Cloudinary { + public CloudinaryClient() { + super(loadDefaultConfig(), new UploaderStrategy(), new ApiStrategy()); + } + + public CloudinaryClient(Configuration config, AbstractUploaderStrategy uploaderStrategy, AbstractApiStrategy apiStrategy) { + super(config, uploaderStrategy, apiStrategy); + } + + public CloudinaryClient(Map config) { + super(new Configuration(config), new UploaderStrategy(), new ApiStrategy()); + } + + public CloudinaryClient(String url) { + super(Configuration.from(url), new UploaderStrategy(), new ApiStrategy()); + } + + public CloudinaryClient(Configuration configuration, CloseableHttpClient httpClient) { + super(configuration, new UploaderStrategy(httpClient), new ApiStrategy(httpClient)); + } +} diff --git a/cloudinary-http5/src/main/java/com/cloudinary/http5/UploaderStrategy.java b/cloudinary-http5/src/main/java/com/cloudinary/http5/UploaderStrategy.java index 5f87cbd8..3dce106c 100644 --- a/cloudinary-http5/src/main/java/com/cloudinary/http5/UploaderStrategy.java +++ b/cloudinary-http5/src/main/java/com/cloudinary/http5/UploaderStrategy.java @@ -29,17 +29,23 @@ public class UploaderStrategy extends AbstractUploaderStrategy { private static final String APACHE_HTTP_CLIENT_VERSION = System.getProperty("apache.http.client.version", "5.3.1"); - private CloseableHttpClient client; + private final CloseableHttpClient client; - @Override - public void init(Uploader uploader) { - super.init(uploader); + public UploaderStrategy(CloseableHttpClient client) { + this.client = client; + } + public UploaderStrategy() { this.client = HttpClients.custom() .setUserAgent(cloudinary().getUserAgent() + " ApacheHttpClient/" + APACHE_HTTP_CLIENT_VERSION) .build(); } + @Override + public void init(Uploader uploader) { + super.init(uploader); + } + @SuppressWarnings({"rawtypes", "unchecked"}) @Override public Map callApi(String action, Map params, Map options, Object file, ProgressCallback progressCallback) throws IOException { diff --git a/cloudinary-taglib/src/main/java/com/cloudinary/Singleton.java b/cloudinary-taglib/src/main/java/com/cloudinary/Singleton.java index 5c11458f..495f7615 100644 --- a/cloudinary-taglib/src/main/java/com/cloudinary/Singleton.java +++ b/cloudinary-taglib/src/main/java/com/cloudinary/Singleton.java @@ -1,5 +1,7 @@ package com.cloudinary; +import com.cloudinary.legacy.LegacyCloudinaryLoader; + /** * This class contains a singleton in a generic way. This class is used by the tags to * retrieve the Cloudinary configuration. @@ -24,7 +26,7 @@ public static void deregisterCloudinary() { } private static class DefaultCloudinaryHolder { - public static final Cloudinary INSTANCE = new Cloudinary(); + public static final Cloudinary INSTANCE = new LegacyCloudinaryLoader(); } public static Cloudinary getCloudinary() { diff --git a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractAccountApiTest.java b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractAccountApiTest.java index 7852f96b..1593d0ef 100644 --- a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractAccountApiTest.java +++ b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractAccountApiTest.java @@ -3,6 +3,7 @@ import com.cloudinary.Cloudinary; import com.cloudinary.api.ApiResponse; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.provisioning.Account; import com.cloudinary.utils.ObjectUtils; import org.junit.*; @@ -37,14 +38,14 @@ public static void setUpClass() { public void setUp() throws Exception { assumeCloudinaryAccountURLExist(); System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - this.account = new Account(new Cloudinary()); + this.account = new Account(new LegacyCloudinaryLoader()); } @AfterClass public static void tearDownClass() { assumeCloudinaryAccountURLExist(); System.out.println("Start TearDownClass"); - Account account = new Account(new Cloudinary()); + Account account = new Account(new LegacyCloudinaryLoader()); for (String createdSubAccountId : createdSubAccountIds) { try { account.deleteSubAccount(createdSubAccountId, null); diff --git a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractApiTest.java b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractApiTest.java index e5ae3703..b661ab52 100644 --- a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractApiTest.java +++ b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractApiTest.java @@ -4,6 +4,7 @@ import com.cloudinary.api.ApiResponse; import com.cloudinary.api.exceptions.BadRequest; import com.cloudinary.api.exceptions.NotFound; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.test.helpers.Feature; import com.cloudinary.test.rules.RetryRule; import com.cloudinary.transformation.TextLayer; @@ -62,7 +63,7 @@ abstract public class AbstractApiTest extends MockableTest { @BeforeClass public static void setUpClass() throws IOException { - Cloudinary cloudinary = new Cloudinary(); + Cloudinary cloudinary = new LegacyCloudinaryLoader(); if (cloudinary.config.apiSecret == null) { System.err.println("Please setup environment for Upload test to run"); return; @@ -99,7 +100,7 @@ public static void setUpClass() throws IOException { @AfterClass public static void tearDownClass() { - Api api = new Cloudinary().api(); + Api api = new LegacyCloudinaryLoader().api(); try { api.deleteResourcesByTag(API_TAG, ObjectUtils.emptyMap()); } catch (Exception ignored) { @@ -149,7 +150,7 @@ public static void tearDownClass() { @Before public void setUp() { System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - this.cloudinary = new Cloudinary(); + this.cloudinary = new LegacyCloudinaryLoader(); assumeNotNull(cloudinary.config.apiSecret); this.api = cloudinary.api(); diff --git a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractContextTest.java b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractContextTest.java index e785b5c0..80bb2a26 100644 --- a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractContextTest.java +++ b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractContextTest.java @@ -3,6 +3,7 @@ import com.cloudinary.Cloudinary; import com.cloudinary.Transformation; import com.cloudinary.Uploader; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.utils.ObjectUtils; import org.junit.*; import org.junit.rules.TestName; @@ -27,14 +28,14 @@ abstract public class AbstractContextTest extends MockableTest { @BeforeClass public static void setUpClass() throws Exception { - Cloudinary cloudinary = new Cloudinary(); + Cloudinary cloudinary = new LegacyCloudinaryLoader(); if (cloudinary.config.apiSecret == null) { System.err.println("Please setup environment for Upload test to run"); } } private static Map uploadResource(String publicId) throws IOException { - return new Cloudinary().uploader().upload(SRC_TEST_IMAGE, + return new LegacyCloudinaryLoader().uploader().upload(SRC_TEST_IMAGE, asMap( "public_id", publicId, "tags", new String[]{SDK_TEST_TAG, CONTEXT_TAG}, "context", CONTEXT, @@ -43,7 +44,7 @@ private static Map uploadResource(String publicId) throws IOException { @AfterClass public static void tearDownClass() { - Cloudinary cloudinary = new Cloudinary(); + Cloudinary cloudinary = new LegacyCloudinaryLoader(); try { cloudinary.api().deleteResourcesByTag(CONTEXT_TAG, ObjectUtils.emptyMap()); } catch (Exception ignored) { @@ -56,7 +57,7 @@ public static void tearDownClass() { @Before public void setUp() throws Exception { System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - cloudinary = new Cloudinary(); + cloudinary = new LegacyCloudinaryLoader(); uploader = cloudinary.uploader(); assumeNotNull(cloudinary.config.apiSecret); diff --git a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractFoldersApiTest.java b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractFoldersApiTest.java index a0478bad..adb3387f 100644 --- a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractFoldersApiTest.java +++ b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractFoldersApiTest.java @@ -3,6 +3,7 @@ import com.cloudinary.Api; import com.cloudinary.Cloudinary; import com.cloudinary.api.ApiResponse; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.utils.ObjectUtils; import org.junit.Before; import org.junit.Rule; @@ -24,7 +25,7 @@ abstract public class AbstractFoldersApiTest extends MockableTest { @Before public void setUp() { System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - this.cloudinary = new Cloudinary(); + this.cloudinary = new LegacyCloudinaryLoader(); assumeNotNull(cloudinary.config.apiSecret); this.api = cloudinary.api(); } diff --git a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractSearchTest.java b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractSearchTest.java index e6bf5d6e..e4f10cf3 100644 --- a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractSearchTest.java +++ b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractSearchTest.java @@ -2,6 +2,7 @@ import com.cloudinary.Cloudinary; import com.cloudinary.Search; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.utils.ObjectUtils; import org.junit.*; import org.junit.rules.TestName; @@ -28,7 +29,7 @@ abstract public class AbstractSearchTest extends MockableTest { @BeforeClass public static void setUpClass() throws Exception { - Cloudinary cloudinary = new Cloudinary(); + Cloudinary cloudinary = new LegacyCloudinaryLoader(); Map options = ObjectUtils.asMap("public_id", SEARCH_TEST, "tags", UPLOAD_TAGS, "context", "stage=in_review"); cloudinary.api().deleteResourcesByTag(SEARCH_TAG, null); cloudinary.uploader().upload(SRC_TEST_IMAGE, options); @@ -45,7 +46,7 @@ public static void setUpClass() throws Exception { @AfterClass public static void tearDownClass() throws Exception { - Cloudinary cloudinary = new Cloudinary(); + Cloudinary cloudinary = new LegacyCloudinaryLoader(); cloudinary.api().deleteResourcesByTag(SEARCH_TAG, null); try { cloudinary.api().deleteFolder(SEARCH_FOLDER, null); @@ -57,7 +58,7 @@ public static void tearDownClass() throws Exception { @Before public void setUp() { System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - this.cloudinary = new Cloudinary(); + this.cloudinary = new LegacyCloudinaryLoader(); assumeNotNull(cloudinary.config.apiSecret); } @@ -160,7 +161,7 @@ public void shouldPaginateResourcesLimitedByTagAndOrderdByAscendingPublicId() th @Test public void testShouldBuildSearchUrl() throws Exception { String nextCursor = "db27cfb02b3f69cb39049969c23ca430c6d33d5a3a7c3ad1d870c54e1a54ee0faa5acdd9f6d288666986001711759d10"; - Cloudinary cloudinaryToSearch = new Cloudinary("cloudinary://key:secret@test123"); + Cloudinary cloudinaryToSearch = new LegacyCloudinaryLoader("cloudinary://key:secret@test123"); cloudinaryToSearch.config.secure = true; Search search = cloudinaryToSearch.search().expression("resource_type:image AND tags=kitten AND uploaded_at>1d AND bytes>1m").sortBy("public_id", "desc").maxResults(30); diff --git a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractStreamingProfilesApiTest.java b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractStreamingProfilesApiTest.java index 6a917208..01c8028c 100644 --- a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractStreamingProfilesApiTest.java +++ b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractStreamingProfilesApiTest.java @@ -6,6 +6,7 @@ import com.cloudinary.api.ApiResponse; import com.cloudinary.api.exceptions.AlreadyExists; import com.cloudinary.api.exceptions.NotFound; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.utils.ObjectUtils; import org.hamcrest.Matcher; import org.hamcrest.Matchers; @@ -32,7 +33,7 @@ abstract public class AbstractStreamingProfilesApiTest extends MockableTest { @BeforeClass public static void setUpClass() throws IOException { - Cloudinary cloudinary = new Cloudinary(); + Cloudinary cloudinary = new LegacyCloudinaryLoader(); if (cloudinary.config.apiSecret == null) { System.err.println("Please setup environment for Upload test to run"); } @@ -44,7 +45,7 @@ public static void setUpClass() throws IOException { @Before public void setUp() { System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - this.cloudinary = new Cloudinary(); + this.cloudinary = new LegacyCloudinaryLoader(); assumeNotNull(cloudinary.config.apiSecret); this.api = cloudinary.api(); } @@ -125,7 +126,7 @@ public void testUpdate() throws Exception { @AfterClass public static void tearDownClass() throws Exception { - Api api = new Cloudinary().api(); + Api api = new LegacyCloudinaryLoader().api(); try { api.deleteStreamingProfile(CREATE_PROFILE_NAME); } catch (NotFound ignored) { diff --git a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractStructuredMetadataTest.java b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractStructuredMetadataTest.java index 241ac47d..71022cfa 100644 --- a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractStructuredMetadataTest.java +++ b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractStructuredMetadataTest.java @@ -4,6 +4,7 @@ import com.cloudinary.Cloudinary; import com.cloudinary.api.ApiResponse; import com.cloudinary.api.exceptions.BadRequest; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.metadata.*; import com.cloudinary.test.helpers.Feature; @@ -28,7 +29,7 @@ public abstract class AbstractStructuredMetadataTest extends MockableTest { @BeforeClass public static void setUpClass() throws IOException { - Cloudinary cloudinary = new Cloudinary(); + Cloudinary cloudinary = new LegacyCloudinaryLoader(); if (cloudinary.config.apiSecret == null) { System.err.println("Please setup environment for Upload test to run"); } @@ -39,7 +40,7 @@ public static void setUpClass() throws IOException { @AfterClass public static void tearDownClass() throws Exception { - Api api = new Cloudinary().api(); + Api api = new LegacyCloudinaryLoader().api(); for (String externalId : metadataFieldExternalIds) { try { @@ -55,7 +56,7 @@ public static void tearDownClass() throws Exception { @Before public void setUp() { System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - this.cloudinary = new Cloudinary(); + this.cloudinary = new LegacyCloudinaryLoader(); assumeNotNull(cloudinary.config.apiSecret); this.api = cloudinary.api(); } diff --git a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractUploaderTest.java b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractUploaderTest.java index 5de797fa..770c0f3f 100644 --- a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractUploaderTest.java +++ b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractUploaderTest.java @@ -1,6 +1,7 @@ package com.cloudinary.test; import com.cloudinary.*; +import com.cloudinary.legacy.LegacyCloudinaryLoader; import com.cloudinary.metadata.StringMetadataField; import com.cloudinary.test.rules.RetryRule; import com.cloudinary.utils.ObjectUtils; @@ -38,7 +39,7 @@ abstract public class AbstractUploaderTest extends MockableTest { @BeforeClass public static void setUpClass() throws IOException { - Cloudinary cloudinary = new Cloudinary(); + Cloudinary cloudinary = new LegacyCloudinaryLoader(); cloudinary.config.analytics = false; if (cloudinary.config.apiSecret == null) { System.err.println("Please setup environment for Upload test to run"); @@ -55,7 +56,7 @@ public static void setUpClass() throws IOException { @AfterClass public static void tearDownClass() { - Api api = new Cloudinary().api(); + Api api = new LegacyCloudinaryLoader().api(); try { api.deleteResourcesByTag(UPLOADER_TAG, ObjectUtils.emptyMap()); } catch (Exception ignored) { @@ -87,7 +88,7 @@ public static void tearDownClass() { @Before public void setUp() { System.out.println("Running " + this.getClass().getName() + "." + currentTest.getMethodName()); - this.cloudinary = new Cloudinary(); + this.cloudinary = new LegacyCloudinaryLoader(); this.cloudinary.config.analytics = false; assumeNotNull(cloudinary.config.apiSecret); } @@ -116,7 +117,7 @@ public void testDeleteByToken() throws Exception { Map baseConfig = cloudinary.config.asMap(); baseConfig.remove("api_key"); baseConfig.remove("api_secret"); - res = new Cloudinary(baseConfig).uploader().deleteByToken(token); + res = new LegacyCloudinaryLoader(baseConfig).uploader().deleteByToken(token); assertNotNull(res); assertEquals("ok", res.get("result")); } From fcd3c85f7982a436b406a2593bcfde80c1e96c07 Mon Sep 17 00:00:00 2001 From: Campbell Date: Wed, 15 Jan 2025 21:34:51 +1100 Subject: [PATCH 2/2] . --- .../main/java/com/cloudinary/legacy/LegacyCloudinaryLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudinary-core/src/main/java/com/cloudinary/legacy/LegacyCloudinaryLoader.java b/cloudinary-core/src/main/java/com/cloudinary/legacy/LegacyCloudinaryLoader.java index b1000713..a9e5a576 100644 --- a/cloudinary-core/src/main/java/com/cloudinary/legacy/LegacyCloudinaryLoader.java +++ b/cloudinary-core/src/main/java/com/cloudinary/legacy/LegacyCloudinaryLoader.java @@ -57,4 +57,4 @@ private static AbstractUploaderStrategy getUploaderStrategy(Configuration config return StrategyLoader.find(UPLOAD_STRATEGIES); } -} \ No newline at end of file +}