/
EndpointProviderTasks.java
119 lines (100 loc) · 5.14 KB
/
EndpointProviderTasks.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package software.amazon.awssdk.codegen.emitters.tasks;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import software.amazon.awssdk.codegen.emitters.GeneratorTask;
import software.amazon.awssdk.codegen.emitters.GeneratorTaskParams;
import software.amazon.awssdk.codegen.emitters.PoetGeneratorTask;
import software.amazon.awssdk.codegen.model.config.customization.CustomizationConfig;
import software.amazon.awssdk.codegen.model.service.ClientContextParam;
import software.amazon.awssdk.codegen.poet.rules.ClientContextParamsClassSpec;
import software.amazon.awssdk.codegen.poet.rules.EndpointAuthSchemeInterceptorClassSpec;
import software.amazon.awssdk.codegen.poet.rules.EndpointParametersClassSpec;
import software.amazon.awssdk.codegen.poet.rules.EndpointProviderInterfaceSpec;
import software.amazon.awssdk.codegen.poet.rules.EndpointProviderSpec;
import software.amazon.awssdk.codegen.poet.rules.EndpointProviderTestSpec;
import software.amazon.awssdk.codegen.poet.rules.EndpointResolverInterceptorSpec;
import software.amazon.awssdk.codegen.poet.rules.EndpointRulesClientTestSpec;
import software.amazon.awssdk.codegen.poet.rules.RequestEndpointInterceptorSpec;
public final class EndpointProviderTasks extends BaseGeneratorTasks {
private final GeneratorTaskParams generatorTaskParams;
public EndpointProviderTasks(GeneratorTaskParams dependencies) {
super(dependencies);
this.generatorTaskParams = dependencies;
}
@Override
protected List<GeneratorTask> createTasks() throws Exception {
List<GeneratorTask> tasks = new ArrayList<>();
tasks.add(generateInterface());
tasks.add(generateParams());
tasks.add(generateDefaultProvider());
tasks.addAll(generateInterceptors());
if (shouldGenerateTests()) {
tasks.add(generateClientTests());
tasks.add(generateProviderTests());
}
if (hasClientContextParams()) {
tasks.add(generateClientContextParams());
}
tasks.add(new RulesEngineRuntimeGeneratorTask(generatorTaskParams));
return tasks;
}
private GeneratorTask generateInterface() {
return new PoetGeneratorTask(endpointRulesDir(), model.getFileHeader(), new EndpointProviderInterfaceSpec(model));
}
private GeneratorTask generateParams() {
return new PoetGeneratorTask(endpointRulesDir(), model.getFileHeader(), new EndpointParametersClassSpec(model));
}
private GeneratorTask generateDefaultProvider() {
return new PoetGeneratorTask(endpointRulesInternalDir(), model.getFileHeader(), new EndpointProviderSpec(model));
}
private Collection<GeneratorTask> generateInterceptors() {
return Arrays.asList(
new PoetGeneratorTask(endpointRulesInternalDir(), model.getFileHeader(), new EndpointResolverInterceptorSpec(model)),
new PoetGeneratorTask(endpointRulesInternalDir(), model.getFileHeader(), new RequestEndpointInterceptorSpec(model)),
new PoetGeneratorTask(endpointRulesInternalDir(), model.getFileHeader(),
new EndpointAuthSchemeInterceptorClassSpec(model)));
}
private GeneratorTask generateClientTests() {
return new PoetGeneratorTask(endpointTestsDir(), model.getFileHeader(), new EndpointRulesClientTestSpec(model));
}
private GeneratorTask generateProviderTests() {
return new PoetGeneratorTask(endpointTestsDir(), model.getFileHeader(), new EndpointProviderTestSpec(model));
}
private GeneratorTask generateClientContextParams() {
return new PoetGeneratorTask(endpointRulesInternalDir(), model.getFileHeader(), new ClientContextParamsClassSpec(model));
}
private String endpointRulesDir() {
return generatorTaskParams.getPathProvider().getEndpointRulesDirectory();
}
private String endpointRulesInternalDir() {
return generatorTaskParams.getPathProvider().getEndpointRulesInternalDirectory();
}
private String endpointTestsDir() {
return generatorTaskParams.getPathProvider().getEndpointRulesTestDirectory();
}
private boolean shouldGenerateTests() {
CustomizationConfig customizationConfig = generatorTaskParams.getModel().getCustomizationConfig();
return !Boolean.TRUE.equals(customizationConfig.isSkipEndpointTestGeneration());
}
private boolean hasClientContextParams() {
Map<String, ClientContextParam> clientContextParams = model.getClientContextParams();
return clientContextParams != null && !clientContextParams.isEmpty();
}
}