From a9c2b559e2501169acd094030526e751d990e943 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Mon, 20 Jul 2026 08:57:29 +0530 Subject: [PATCH] SK-2967 implement client --- .../main/java/com/skyflow/BaseSkyflow.java | 39 ++++++++++--------- .../java/com/skyflow/BaseVaultClient.java | 3 +- .../src/main/java/com/skyflow/ISkyflow.java | 6 +-- .../src/main/java/com/skyflow/Skyflow.java | 22 ++++++++++- v2/src/main/java/com/skyflow/Skyflow.java | 14 ++++++- 5 files changed, 58 insertions(+), 26 deletions(-) diff --git a/common/src/main/java/com/skyflow/BaseSkyflow.java b/common/src/main/java/com/skyflow/BaseSkyflow.java index 7e7554ff..f752fdfd 100644 --- a/common/src/main/java/com/skyflow/BaseSkyflow.java +++ b/common/src/main/java/com/skyflow/BaseSkyflow.java @@ -16,16 +16,17 @@ import java.util.Map; -abstract class BaseSkyflow implements ISkyflow { - protected final BaseSkyflowClientBuilder builder; +abstract class BaseSkyflow implements ISkyflow { + protected final BaseSkyflowClientBuilder builder; - protected BaseSkyflow(BaseSkyflowClientBuilder builder) { + protected BaseSkyflow(BaseSkyflowClientBuilder builder) { this.builder = builder; LogUtil.printInfoLog(InfoLogs.CLIENT_INITIALIZED.getLog()); } protected abstract Self self(); + @Override public Self addVaultConfig(V vaultConfig) throws SkyflowException { this.builder.addVaultConfigTemplate(vaultConfig); return self(); @@ -35,34 +36,35 @@ public V getVaultConfig(String vaultId) { return this.builder.vaultConfigMap.get(vaultId); } + @Override public Self updateVaultConfig(V vaultConfig) throws SkyflowException { this.builder.updateVaultConfigTemplate(vaultConfig); return self(); } + @Override public Self removeVaultConfig(String vaultId) throws SkyflowException { this.builder.removeVaultConfigTemplate(vaultId); return self(); } + @Override public Self updateSkyflowCredentials(Credentials credentials) throws SkyflowException { this.builder.addSkyflowCredentialsTemplate(credentials); return self(); } + @Override public Self setLogLevel(LogLevel logLevel) { this.builder.setLogLevel(logLevel); return self(); } + @Override public LogLevel getLogLevel() { return this.builder.logLevel; } - public VC vault() throws SkyflowException { - return resolveOrThrow(this.builder.vaultClientsMap, null, ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST, ErrorMessage.VaultIdNotInConfigList); - } - protected static T resolveOrThrow(Map map, String key, ErrorLogs errorLog, ErrorMessage errorMessage) throws SkyflowException { T value = key != null ? map.get(key) : map.values().stream().findFirst().orElse(null); @@ -73,36 +75,35 @@ protected static T resolveOrThrow(Map map, String key, return value; } - abstract static class BaseSkyflowClientBuilder { + abstract static class BaseSkyflowClientBuilder { protected final LinkedHashMap vaultConfigMap = new LinkedHashMap<>(); - protected final LinkedHashMap vaultClientsMap = new LinkedHashMap<>(); protected Credentials skyflowCredentials; protected LogLevel logLevel = LogLevel.ERROR; protected BaseSkyflowClientBuilder() { } - public BaseSkyflowClientBuilder addVaultConfig(V vaultConfig) throws SkyflowException { + public BaseSkyflowClientBuilder addVaultConfig(V vaultConfig) throws SkyflowException { addVaultConfigTemplate(vaultConfig); return this; } - public BaseSkyflowClientBuilder updateVaultConfig(V vaultConfig) throws SkyflowException { + public BaseSkyflowClientBuilder updateVaultConfig(V vaultConfig) throws SkyflowException { updateVaultConfigTemplate(vaultConfig); return this; } - public BaseSkyflowClientBuilder removeVaultConfig(String vaultId) throws SkyflowException { + public BaseSkyflowClientBuilder removeVaultConfig(String vaultId) throws SkyflowException { removeVaultConfigTemplate(vaultId); return this; } - public BaseSkyflowClientBuilder addSkyflowCredentials(Credentials credentials) throws SkyflowException { + public BaseSkyflowClientBuilder addSkyflowCredentials(Credentials credentials) throws SkyflowException { addSkyflowCredentialsTemplate(credentials); return this; } - protected BaseSkyflowClientBuilder setLogLevel(LogLevel logLevel) { + protected BaseSkyflowClientBuilder setLogLevel(LogLevel logLevel) { this.logLevel = logLevel == null ? LogLevel.ERROR : logLevel; LogUtil.setupLogger(this.logLevel); LogUtil.printInfoLog(BaseUtils.parameterizedString( @@ -116,7 +117,7 @@ protected final void addVaultConfigTemplate(V vaultConfig) throws SkyflowExcepti validateVaultConfig(vaultConfig); V vaultConfigCopy = cloneVaultConfig(vaultConfig); String vaultId = extractVaultId(vaultConfigCopy); - if (this.vaultClientsMap.containsKey(vaultId)) { + if (this.vaultConfigMap.containsKey(vaultId)) { LogUtil.printErrorLog(BaseUtils.parameterizedString( ErrorLogs.VAULT_CONFIG_EXISTS.getLog(), vaultId )); @@ -131,7 +132,7 @@ protected final void updateVaultConfigTemplate(V vaultConfig) throws SkyflowExce LogUtil.printInfoLog(InfoLogs.VALIDATING_VAULT_CONFIG.getLog()); validateVaultConfig(vaultConfig); String vaultId = extractVaultId(vaultConfig); - if (!this.vaultClientsMap.containsKey(vaultId)) { + if (!this.vaultConfigMap.containsKey(vaultId)) { LogUtil.printErrorLog(BaseUtils.parameterizedString( ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST.getLog(), vaultId )); @@ -143,11 +144,11 @@ protected final void updateVaultConfigTemplate(V vaultConfig) throws SkyflowExce } protected final void removeVaultConfigTemplate(String vaultId) throws SkyflowException { - if (!this.vaultClientsMap.containsKey(vaultId)) { + if (!this.vaultConfigMap.containsKey(vaultId)) { LogUtil.printErrorLog(BaseUtils.parameterizedString(ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST.getLog(), vaultId)); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.VaultIdNotInConfigList.getMessage()); } - this.vaultClientsMap.remove(vaultId); + onVaultConfigRemoved(vaultId); this.vaultConfigMap.remove(vaultId); } @@ -199,6 +200,8 @@ protected final V mergeVaultConfig(V incoming, V existing) { protected abstract void onVaultConfigUpdated(V updatedConfig) throws SkyflowException; + protected abstract void onVaultConfigRemoved(String vaultId) throws SkyflowException; + protected abstract void onCredentialsUpdated(Credentials credentials) throws SkyflowException; } diff --git a/common/src/main/java/com/skyflow/BaseVaultClient.java b/common/src/main/java/com/skyflow/BaseVaultClient.java index 7ca74cf4..fa648611 100644 --- a/common/src/main/java/com/skyflow/BaseVaultClient.java +++ b/common/src/main/java/com/skyflow/BaseVaultClient.java @@ -3,6 +3,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.skyflow.config.BaseCredentials; +import com.skyflow.config.BaseVaultConfig; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; @@ -24,7 +25,7 @@ import java.util.concurrent.TimeUnit; import java.util.function.Supplier; -class BaseVaultClient { +class BaseVaultClient { protected V vaultConfig; protected OkHttpClient sharedHttpClient; protected String currentVaultURL; diff --git a/common/src/main/java/com/skyflow/ISkyflow.java b/common/src/main/java/com/skyflow/ISkyflow.java index 55879a6c..ac5fd747 100644 --- a/common/src/main/java/com/skyflow/ISkyflow.java +++ b/common/src/main/java/com/skyflow/ISkyflow.java @@ -1,9 +1,11 @@ package com.skyflow; +import com.skyflow.config.BaseCredentials; +import com.skyflow.config.BaseVaultConfig; import com.skyflow.enums.LogLevel; import com.skyflow.errors.SkyflowException; -public interface ISkyflow { +public interface ISkyflow { Self addVaultConfig(V vaultConfig) throws SkyflowException; Self updateVaultConfig(V vaultConfig) throws SkyflowException; @@ -15,6 +17,4 @@ public interface ISkyflow { Self setLogLevel(LogLevel logLevel); LogLevel getLogLevel(); - - VC vault() throws SkyflowException; } diff --git a/flowvault/src/main/java/com/skyflow/Skyflow.java b/flowvault/src/main/java/com/skyflow/Skyflow.java index bd3c451f..61a95f9a 100644 --- a/flowvault/src/main/java/com/skyflow/Skyflow.java +++ b/flowvault/src/main/java/com/skyflow/Skyflow.java @@ -3,7 +3,9 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.enums.LogLevel; +import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; +import com.skyflow.logs.ErrorLogs; import com.skyflow.logs.InfoLogs; import com.skyflow.utils.Constants; import com.skyflow.utils.SdkVersion; @@ -12,10 +14,15 @@ import com.skyflow.utils.validations.Validations; import com.skyflow.vault.controller.VaultController; -public final class Skyflow extends BaseSkyflow { +import java.util.LinkedHashMap; + +public final class Skyflow extends BaseSkyflow { + + private final SkyflowClientBuilder builder; private Skyflow(SkyflowClientBuilder builder) { super(builder); + this.builder = builder; } @Override @@ -33,7 +40,13 @@ public VaultConfig getVaultConfig() { return (VaultConfig) array[0]; } - public static final class SkyflowClientBuilder extends BaseSkyflowClientBuilder { + public VaultController vault() throws SkyflowException { + return resolveOrThrow(this.builder.vaultClientsMap, null, ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST, ErrorMessage.VaultIdNotInConfigList); + } + + public static final class SkyflowClientBuilder extends BaseSkyflowClientBuilder { + private final LinkedHashMap vaultClientsMap = new LinkedHashMap<>(); + @Override protected void validateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { Validations.validateVaultConfiguration(vaultConfig); @@ -50,6 +63,11 @@ protected void onVaultConfigUpdated(VaultConfig updatedConfig) throws SkyflowExc this.vaultClientsMap.put(updatedConfig.getVaultId(), new VaultController(updatedConfig, this.skyflowCredentials)); } + @Override + protected void onVaultConfigRemoved(String vaultId) throws SkyflowException { + this.vaultClientsMap.remove(vaultId); + } + @Override protected void onCredentialsUpdated(Credentials credentials) throws SkyflowException { for (VaultController vault : this.vaultClientsMap.values()) { diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index b8a056de..16614481 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -18,7 +18,7 @@ import java.util.LinkedHashMap; -public final class Skyflow extends BaseSkyflow { +public final class Skyflow extends BaseSkyflow { private final SkyflowClientBuilder builder; private Skyflow(SkyflowClientBuilder builder) { @@ -61,6 +61,10 @@ public Skyflow updateLogLevel(LogLevel logLevel) { return setLogLevel(logLevel); } + public VaultController vault() throws SkyflowException { + return resolveOrThrow(this.builder.vaultClientsMap, null, ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST, ErrorMessage.VaultIdNotInConfigList); + } + public VaultController vault(String vaultId) throws SkyflowException { return resolveOrThrow(this.builder.vaultClientsMap, vaultId, ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST, ErrorMessage.VaultIdNotInConfigList); } @@ -81,7 +85,8 @@ public DetectController detect(String vaultId) throws SkyflowException { return resolveOrThrow(this.builder.detectClientsMap, vaultId, ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST, ErrorMessage.VaultIdNotInConfigList); } - public static final class SkyflowClientBuilder extends BaseSkyflowClientBuilder { + public static final class SkyflowClientBuilder extends BaseSkyflowClientBuilder { + private final LinkedHashMap vaultClientsMap = new LinkedHashMap<>(); private final LinkedHashMap connectionsMap = new LinkedHashMap<>(); private final LinkedHashMap detectClientsMap = new LinkedHashMap<>(); private final LinkedHashMap connectionConfigMap = new LinkedHashMap<>(); @@ -104,6 +109,11 @@ protected void onVaultConfigUpdated(VaultConfig updatedConfig) throws SkyflowExc this.vaultClientsMap.get(updatedConfig.getVaultId()).updateVaultConfig(); } + @Override + protected void onVaultConfigRemoved(String vaultId) throws SkyflowException { + this.vaultClientsMap.remove(vaultId); + } + @Override protected void onCredentialsUpdated(Credentials credentials) throws SkyflowException { for (VaultController vault : this.vaultClientsMap.values()) {