Skip to content

Commit 62f2328

Browse files
committed
Add plugins registration result handling
Plugins now receive registration results via onPluginsReady, and PluginMetadata requires a version. Creates RegistrationCompleteResult to track plugin registration success or failure. Updates tests and interfaces to support these changes.
1 parent c434e49 commit 62f2328

File tree

5 files changed

+52
-5
lines changed

5 files changed

+52
-5
lines changed

launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientPluginsTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,13 @@ public PluginMetadata getMetadata() {
151151
@NonNull
152152
@Override
153153
public String getName() {
154-
return "mock-plugin";
154+
return "mock-plugin-name";
155+
}
156+
157+
@NonNull
158+
@Override
159+
public String getVersion() {
160+
return "mock-plugin-version";
155161
}
156162
};
157163
}

launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/LDClient.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,23 @@
1111
import com.launchdarkly.sdk.EvaluationReason;
1212
import com.launchdarkly.sdk.LDContext;
1313
import com.launchdarkly.sdk.LDValue;
14+
import com.launchdarkly.sdk.android.DataModel.Flag;
1415
import com.launchdarkly.sdk.android.env.EnvironmentReporterBuilder;
1516
import com.launchdarkly.sdk.android.env.IEnvironmentReporter;
1617
import com.launchdarkly.sdk.android.integrations.EnvironmentMetadata;
1718
import com.launchdarkly.sdk.android.integrations.Hook;
1819
import com.launchdarkly.sdk.android.integrations.IdentifySeriesResult;
1920
import com.launchdarkly.sdk.android.integrations.Plugin;
21+
import com.launchdarkly.sdk.android.integrations.RegistrationCompleteResult;
2022
import com.launchdarkly.sdk.android.integrations.SdkMetadata;
2123
import com.launchdarkly.sdk.android.subsystems.ApplicationInfo;
2224
import com.launchdarkly.sdk.android.subsystems.Callback;
23-
import com.launchdarkly.sdk.android.DataModel.Flag;
2425
import com.launchdarkly.sdk.android.subsystems.EventProcessor;
2526
import com.launchdarkly.sdk.android.subsystems.PersistentDataStore;
2627

2728
import java.io.Closeable;
2829
import java.io.IOException;
30+
import java.util.ArrayList;
2931
import java.util.Collections;
3032
import java.util.HashMap;
3133
import java.util.List;
@@ -198,7 +200,7 @@ public static Future<LDClient> init(@NonNull Application application,
198200
resultFuture.setException(e);
199201
return resultFuture;
200202
}
201-
};
203+
}
202204
primaryClient = createdPrimaryClient;
203205
// this indirect way of setting primaryClient is simply to make it easier to reference
204206
// it within an inner class below, since it is "effectively final"
@@ -223,9 +225,23 @@ public static Future<LDClient> init(@NonNull Application application,
223225
}
224226
}
225227

228+
List<RegistrationCompleteResult.Failure.PluginFailure> pluginFailures = new ArrayList<>();
226229
for (Plugin plugin : instance.plugins) {
227230
try {
228231
plugin.register(instance, metadata);
232+
} catch (Exception e) {
233+
pluginFailures.add(new RegistrationCompleteResult.Failure.PluginFailure(plugin.getMetadata().getName(), e.getMessage(), e));
234+
logger.error("Exception thrown registering plugin " + plugin.getMetadata().getName() + ".");
235+
}
236+
}
237+
238+
RegistrationCompleteResult pluginsRegistrationResult = pluginFailures.isEmpty()
239+
? RegistrationCompleteResult.success()
240+
: RegistrationCompleteResult.failure(pluginFailures);
241+
242+
for (Plugin plugin : instance.plugins) {
243+
try {
244+
plugin.onPluginsReady(pluginsRegistrationResult, metadata);
229245
} catch (Exception e) {
230246
logger.error("Exception thrown registering plugin " + plugin.getMetadata().getName() + ".");
231247
}

launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/integrations/Plugin.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public abstract class Plugin {
2626
* the SDK is configured with multiple environments. Use the metadata to distinguish
2727
* environments.
2828
*
29-
* @param client for the plugin to use
29+
* @param client for the plugin to use
3030
* @param metadata metadata about the environment where the plugin is running.
3131
*/
3232
public abstract void register(LDClient client, EnvironmentMetadata metadata);
@@ -40,11 +40,15 @@ public abstract class Plugin {
4040
* environments.
4141
*
4242
* @param metadata metadata about the environment where the plugin is running.
43-
* @return
43+
* @return a non-null, possibly empty, list of {@link Hook} instances
4444
*/
4545
@NonNull
4646
public List<Hook> getHooks(EnvironmentMetadata metadata) {
4747
// default impl
4848
return Collections.emptyList();
4949
}
50+
51+
public void onPluginsReady(RegistrationCompleteResult result, EnvironmentMetadata metadata) {
52+
// default: do nothing
53+
}
5054
}

launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/integrations/PluginMetadata.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@ public abstract class PluginMetadata {
66

77
@NonNull
88
public abstract String getName();
9+
10+
@NonNull
11+
public abstract String getVersion();
912
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.launchdarkly.sdk.android.integrations
2+
3+
import com.launchdarkly.sdk.android.integrations.RegistrationCompleteResult.Failure.PluginFailure
4+
5+
sealed class RegistrationCompleteResult {
6+
object Success : RegistrationCompleteResult()
7+
data class Failure(val failures: List<PluginFailure>) : RegistrationCompleteResult() {
8+
data class PluginFailure(val pluginName: String, val message: String?, val cause: Throwable?)
9+
}
10+
11+
companion object {
12+
@JvmStatic
13+
fun success() = Success
14+
15+
@JvmStatic
16+
fun failure(failures: List<PluginFailure>) = Failure(failures)
17+
}
18+
}

0 commit comments

Comments
 (0)