Skip to content

Commit 2f79e7c

Browse files
committed
Gutting ParamManager
1 parent 058fb13 commit 2f79e7c

File tree

7 files changed

+86
-53
lines changed

7 files changed

+86
-53
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package software.amazon.lambda.powertools.parameters.appconfig;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
import software.amazon.lambda.powertools.parameters.BaseProvider;
8+
import software.amazon.lambda.powertools.parameters.transform.Transformer;
9+
10+
@Retention(RetentionPolicy.RUNTIME)
11+
@Target(ElementType.FIELD)
12+
public @interface AppConfigParam {
13+
String key();
14+
15+
String environment();
16+
17+
String application();
18+
19+
Class<? extends BaseProvider> provider();
20+
21+
Class<? extends Transformer> transformer() default Transformer.class;
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright 2023 Amazon.com, Inc. or its affiliates.
3+
* Licensed under the Apache License, Version 2.0 (the
4+
* "License"); you may not use this file except in compliance
5+
* with the License. You may obtain a copy of the License at
6+
* http://www.apache.org/licenses/LICENSE-2.0
7+
* Unless required by applicable law or agreed to in writing, software
8+
* distributed under the License is distributed on an "AS IS" BASIS,
9+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
* See the License for the specific language governing permissions and
11+
* limitations under the License.
12+
*
13+
*/
14+
15+
package software.amazon.lambda.powertools.parameters.appconfig;
16+
17+
import org.aspectj.lang.ProceedingJoinPoint;
18+
import org.aspectj.lang.annotation.Around;
19+
import org.aspectj.lang.annotation.Aspect;
20+
import org.aspectj.lang.annotation.Pointcut;
21+
import org.aspectj.lang.reflect.FieldSignature;
22+
import software.amazon.lambda.powertools.parameters.BaseProvider;
23+
import software.amazon.lambda.powertools.parameters.Param;
24+
import software.amazon.lambda.powertools.parameters.ParamManager;
25+
26+
@Aspect
27+
public class AppConfigParametersAspect {
28+
29+
@Pointcut("get(* *) && @annotation(appConfigParamAnnotation)")
30+
public void getParam(AppConfigParam appConfigParamAnnotation) {
31+
}
32+
33+
@Around("getParam(appConfigParamAnnotation)")
34+
public Object injectParam(final ProceedingJoinPoint joinPoint, final AppConfigParam appConfigParamAnnotation) {
35+
AppConfigProvider provider = AppConfigProvider.builder()
36+
.withEnvironment(appConfigParamAnnotation.environment())
37+
.withApplication(appConfigParamAnnotation.application())
38+
.build();
39+
40+
if (appConfigParamAnnotation.transformer().isInterface()) {
41+
// No transformation
42+
return provider.get(appConfigParamAnnotation.key());
43+
} else {
44+
FieldSignature s = (FieldSignature) joinPoint.getSignature();
45+
if (String.class.isAssignableFrom(s.getFieldType())) {
46+
// Basic transformation
47+
return provider
48+
.withTransformation(appConfigParamAnnotation.transformer())
49+
.get(appConfigParamAnnotation.key());
50+
} else {
51+
// Complex transformation
52+
return provider
53+
.withTransformation(appConfigParamAnnotation.transformer())
54+
.get(appConfigParamAnnotation.key(), s.getFieldType());
55+
}
56+
}
57+
}
58+
59+
}

powertools-parameters/powertools-parameters-secrets/src/main/java/software/amazon/lambda/powertools/parameters/secrets/SecretsProvider.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public class SecretsProvider extends BaseProvider {
6868
*
6969
* @param client custom client you would like to use.
7070
*/
71-
SecretsProvider(CacheManager cacheManager, SecretsManagerClient client) {
71+
public SecretsProvider(CacheManager cacheManager, SecretsManagerClient client) {
7272
super(cacheManager);
7373
this.client = client;
7474
}
@@ -80,7 +80,7 @@ public class SecretsProvider extends BaseProvider {
8080
*
8181
* @param cacheManager handles the parameter caching
8282
*/
83-
SecretsProvider(CacheManager cacheManager) {
83+
public SecretsProvider(CacheManager cacheManager) {
8484
this(cacheManager, Builder.createClient());
8585
}
8686

powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/LambdaParametersAspectTest.java

+2-14
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,11 @@
1212
*
1313
*/
1414

15-
import static org.assertj.core.api.Assertions.assertThat;
16-
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
17-
import static org.mockito.Mockito.mockStatic;
18-
import static org.mockito.Mockito.times;
19-
import static org.mockito.Mockito.verify;
20-
import static org.mockito.Mockito.when;
21-
import static org.mockito.MockitoAnnotations.openMocks;
22-
2315
import org.assertj.core.api.Assertions;
2416
import org.junit.jupiter.api.BeforeEach;
2517
import org.junit.jupiter.api.Test;
2618
import org.mockito.Mock;
27-
import org.mockito.MockedStatic;
28-
import org.mockito.Mockito;
2919
import org.mockito.MockitoAnnotations;
30-
import software.amazon.lambda.powertools.parameters.Param;
31-
import software.amazon.lambda.powertools.parameters.ParamManager;
3220
import software.amazon.lambda.powertools.parameters.exception.TransformationException;
3321
import software.amazon.lambda.powertools.parameters.internal.AnotherObject;
3422
import software.amazon.lambda.powertools.parameters.internal.CustomProvider;
@@ -42,8 +30,8 @@ public class LambdaParametersAspectTest {
4230
@Mock
4331
private SSMProvider defaultProvider;
4432

45-
@Param(key = "/default", provider = SSMProvider.class)
46-
private String defaultValue;
33+
// @Param(key = "/default", provider = SSMProvider.class)
34+
// private String defaultValue;
4735

4836
@Param(key = "/simple", provider = CustomProvider.class)
4937
private String param;

powertools-parameters/powertools-parameters-tests/src/test/java/software/amazon/lambda/powertools/parameters/ParamManagerIntegrationTest.java

-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.mockito.ArgumentCaptor;
3333
import org.mockito.Captor;
3434
import org.mockito.Mock;
35-
import software.amazon.awssdk.services.appconfigdata.AppConfigDataClient;
3635
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
3736
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
3837
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
@@ -61,8 +60,6 @@ public class ParamManagerIntegrationTest {
6160
SecretsManagerClient secretsManagerClient;
6261
@Captor
6362
ArgumentCaptor<GetSecretValueRequest> secretsCaptor;
64-
@Mock
65-
private AppConfigDataClient appConfigDataClient;
6663

6764
@BeforeEach
6865
public void setup() throws IllegalAccessException {
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
*
1313
*/
1414

15-
package software.amazon.lambda.powertools.parameters.internal;
15+
package software.amazon.lambda.powertools.parameters;
1616

1717
import org.aspectj.lang.ProceedingJoinPoint;
1818
import org.aspectj.lang.annotation.Around;

powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/ParamManager.java

-33
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414

1515
package software.amazon.lambda.powertools.parameters;
1616

17-
import java.lang.reflect.Constructor;
18-
import java.util.concurrent.ConcurrentHashMap;
1917
import software.amazon.lambda.powertools.parameters.cache.CacheManager;
2018
import software.amazon.lambda.powertools.parameters.transform.TransformationManager;
2119

@@ -28,25 +26,6 @@ public final class ParamManager {
2826
private static final CacheManager cacheManager = new CacheManager();
2927
private static final TransformationManager transformationManager = new TransformationManager();
3028

31-
// NOTE: For testing purposes `providers` cannot be final
32-
private static ConcurrentHashMap<Class<? extends BaseProvider>, BaseProvider> providers = new ConcurrentHashMap<>();
33-
34-
/**
35-
* Get a concrete implementation of {@link BaseProvider}.<br/>
36-
* custom provider by extending {@link BaseProvider} if you need to integrate with a different parameter store.
37-
*
38-
* @return a {@link SecretsProvider}
39-
* @deprecated You should not use this method directly but a typed one (getSecretsProvider, getSsmProvider, getDynamoDbProvider, getAppConfigProvider), will be removed in v2
40-
*/
41-
// TODO in v2: remove public access to this and review how we get providers (it was not designed for DDB and AppConfig in mind initially)
42-
public static <T extends BaseProvider> T getProvider(Class<T> providerClass) {
43-
if (providerClass == null) {
44-
throw new IllegalStateException("providerClass cannot be null.");
45-
}
46-
return (T) providers.computeIfAbsent(providerClass, ParamManager::createProvider);
47-
}
48-
49-
5029
public static CacheManager getCacheManager() {
5130
return cacheManager;
5231
}
@@ -55,17 +34,5 @@ public static TransformationManager getTransformationManager() {
5534
return transformationManager;
5635
}
5736

58-
static <T extends BaseProvider> T createProvider(Class<T> providerClass) {
59-
try {
60-
Constructor<T> constructor = providerClass.getDeclaredConstructor(CacheManager.class);
61-
T provider =
62-
constructor.newInstance(cacheManager); // FIXME: avoid reflection here as we may have issues (#1280)
63-
provider.setTransformationManager(transformationManager);
64-
return provider;
65-
} catch (ReflectiveOperationException e) {
66-
throw new RuntimeException("Unexpected error occurred. Please raise issue at " +
67-
"https://github.com/aws-powertools/powertools-lambda-java/issues", e);
68-
}
69-
}
7037

7138
}

0 commit comments

Comments
 (0)