1313 */
1414package software .amazon .lambda .powertools .parameters ;
1515
16+ import org .apache .commons .logging .Log ;
17+ import org .apache .commons .logging .LogFactory ;
1618import software .amazon .awssdk .services .secretsmanager .SecretsManagerClient ;
1719import software .amazon .awssdk .services .ssm .SsmClient ;
1820import software .amazon .lambda .powertools .parameters .cache .CacheManager ;
19- import software .amazon .lambda .powertools .parameters .exception .ProviderException ;
2021import software .amazon .lambda .powertools .parameters .transform .TransformationManager ;
2122
2223import java .lang .reflect .Constructor ;
2930 */
3031public final class ParamManager {
3132
33+ private static final Log LOG = LogFactory .getLog (ParamManager .class );
34+
3235 private static final CacheManager cacheManager = new CacheManager ();
3336 private static final TransformationManager transformationManager = new TransformationManager ();
3437
@@ -42,20 +45,9 @@ public final class ParamManager {
4245 */
4346 public static <T extends BaseProvider > T getProvider (Class <T > providerClass ) {
4447 if (providerClass == null ) {
45- throw new IllegalStateException ("You cannot provide a null provider class." );
46- }
47- try {
48-
49- if (!providers .containsKey (providerClass )) {
50- Constructor <T > constructor = providerClass .getDeclaredConstructor (CacheManager .class );
51- T provider = constructor .newInstance (cacheManager );
52- provider .setTransformationManager (transformationManager );
53- providers .putIfAbsent (providerClass , provider );
54- }
55- return (T ) providers .get (providerClass );
56- } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e ) {
57- throw new ProviderException (e );
48+ throw new IllegalStateException ("providerClass cannot be null." );
5849 }
50+ return (T ) providers .computeIfAbsent (providerClass , (k ) -> createProvider (k ));
5951 }
6052
6153 /**
@@ -82,14 +74,11 @@ public static SSMProvider getSsmProvider() {
8274 * @return a {@link SecretsProvider}
8375 */
8476 public static SecretsProvider getSecretsProvider (SecretsManagerClient client ) {
85- if (!providers .containsKey (SecretsProvider .class )) {
86- providers .putIfAbsent (SecretsProvider .class , SecretsProvider .builder ()
87- .withClient (client )
88- .withCacheManager (cacheManager )
89- .withTransformationManager (transformationManager )
90- .build ());
91- }
92- return (SecretsProvider ) providers .get (SecretsProvider .class );
77+ return (SecretsProvider ) providers .computeIfAbsent (SecretsProvider .class , (k ) -> SecretsProvider .builder ()
78+ .withClient (client )
79+ .withCacheManager (cacheManager )
80+ .withTransformationManager (transformationManager )
81+ .build ());
9382 }
9483
9584 /**
@@ -98,14 +87,11 @@ public static SecretsProvider getSecretsProvider(SecretsManagerClient client) {
9887 * @return a {@link SSMProvider}
9988 */
10089 public static SSMProvider getSsmProvider (SsmClient client ) {
101- if (!providers .containsKey (SSMProvider .class )) {
102- providers .putIfAbsent (SSMProvider .class , SSMProvider .builder ()
103- .withClient (client )
104- .withCacheManager (cacheManager )
105- .withTransformationManager (transformationManager )
106- .build ());
107- }
108- return (SSMProvider ) providers .get (SSMProvider .class );
90+ return (SSMProvider ) providers .computeIfAbsent (SSMProvider .class , (k ) -> SSMProvider .builder ()
91+ .withClient (client )
92+ .withCacheManager (cacheManager )
93+ .withTransformationManager (transformationManager )
94+ .build ());
10995 }
11096
11197 public static CacheManager getCacheManager () {
@@ -115,4 +101,18 @@ public static CacheManager getCacheManager() {
115101 public static TransformationManager getTransformationManager () {
116102 return transformationManager ;
117103 }
104+
105+ private static <T extends BaseProvider > T createProvider (Class <T > providerClass ) {
106+ try {
107+ Constructor <T > constructor = providerClass .getDeclaredConstructor (CacheManager .class );
108+ T provider = constructor .newInstance (cacheManager );
109+ provider .setTransformationManager (transformationManager );
110+ return provider ;
111+ } catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e ) {
112+ LOG .error ("Failed creating provider instance" , e );
113+ throw new RuntimeException ("Unexpected error occurred. Please raise issue at " +
114+ "https://github.com/awslabs/aws-lambda-powertools-java/issues" , e );
115+ }
116+ }
117+
118118}
0 commit comments