Skip to content

Commit 4e865ba

Browse files
committed
KOGITO-6685 Changed CircuitBreakerConfigurationParser to static and dependent on org.eclipse.microprofile.config.Config
Signed-off-by: Helber Belmiro <[email protected]>
1 parent 9bb5767 commit 4e865ba

File tree

4 files changed

+98
-64
lines changed

4 files changed

+98
-64
lines changed
Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,55 @@
11
package io.quarkiverse.openapi.generator.deployment.circuitbreaker;
22

3-
import java.util.Collection;
43
import java.util.List;
54
import java.util.Map;
6-
import java.util.Set;
75
import java.util.function.Function;
8-
import java.util.function.UnaryOperator;
96
import java.util.stream.Collectors;
7+
import java.util.stream.StreamSupport;
108

11-
public final class CircuitBreakerConfigurationParser {
9+
import org.eclipse.microprofile.config.Config;
1210

13-
private final UnaryOperator<String> nameToValuePropertyMapper;
11+
public final class CircuitBreakerConfigurationParser {
1412

15-
public CircuitBreakerConfigurationParser(UnaryOperator<String> nameToValuePropertyMapper) {
16-
this.nameToValuePropertyMapper = nameToValuePropertyMapper;
13+
private CircuitBreakerConfigurationParser() {
1714
}
1815

1916
/**
20-
* Parses the properties and returns a map of class names and their methods that should be configured with circuit breaker.
17+
* Parses the {@link Config} and returns a {@link Map} of class names and their methods that should be configured with
18+
* circuit breaker.
2119
*
22-
* @return a map of class names and their methods that should be configured with circuit breaker
20+
* @return a {@link Map} of class names and their methods that should be configured with circuit breaker
2321
*/
24-
public Map<String, List<String>> parse(Collection<String> propertyNames) {
25-
List<String> filteredPropertyNames = filterPropertyNames(propertyNames).stream()
26-
.filter(property -> nameToValuePropertyMapper.apply(property).equals("true"))
22+
public static Map<String, List<String>> parse(Config config) {
23+
List<String> filteredPropertyNames = filterPropertyNames(config.getPropertyNames()).stream()
24+
.filter(property -> config.getOptionalValue(property, Boolean.class).orElse(false))
2725
.collect(Collectors.toList());
2826

29-
Set<String> classNames = filteredPropertyNames.stream()
30-
.map(this::getClassName)
31-
.collect(Collectors.toSet());
32-
33-
return classNames.stream().collect(Collectors.toUnmodifiableMap(
34-
Function.identity(),
35-
className -> getMethodNames(className, filteredPropertyNames)));
27+
return filteredPropertyNames.stream()
28+
.map(CircuitBreakerConfigurationParser::getClassName)
29+
.distinct()
30+
.collect(Collectors.toUnmodifiableMap(
31+
Function.identity(),
32+
className -> getMethodNames(className, filteredPropertyNames)));
3633
}
3734

38-
private List<String> getMethodNames(String className, List<String> propertyNames) {
35+
private static List<String> getMethodNames(String className, List<String> propertyNames) {
3936
return propertyNames.stream()
4037
.filter(propertyName -> propertyName.startsWith(className + "/"))
41-
.map(this::getMethodName)
38+
.map(CircuitBreakerConfigurationParser::getMethodName)
4239
.collect(Collectors.toUnmodifiableList());
4340
}
4441

45-
private String getClassName(String propertyName) {
42+
private static String getClassName(String propertyName) {
4643
return propertyName.substring(0, propertyName.indexOf("/"));
4744
}
4845

49-
private String getMethodName(String propertyName) {
46+
private static String getMethodName(String propertyName) {
5047
return propertyName.substring(propertyName.indexOf("/") + 1, propertyName.indexOf("/CircuitBreaker/"));
5148
}
5249

53-
private List<String> filterPropertyNames(Collection<String> propertyNames) {
54-
return propertyNames.stream()
55-
.filter(propertyName -> propertyName
56-
.matches(".+/.+/CircuitBreaker/enabled"))
50+
private static List<String> filterPropertyNames(Iterable<String> propertyNames) {
51+
return StreamSupport.stream(propertyNames.spliterator(), false)
52+
.filter(propertyName -> propertyName.matches(".+/.+/CircuitBreaker/enabled"))
5753
.collect(Collectors.toList());
5854
}
5955
}

deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import java.nio.file.Files;
77
import java.nio.file.Path;
88
import java.util.List;
9-
import java.util.Map;
10-
import java.util.function.UnaryOperator;
119
import java.util.stream.Collectors;
1210
import java.util.stream.Stream;
1311
import java.util.stream.StreamSupport;
@@ -47,12 +45,10 @@ public boolean trigger(CodeGenContext context) throws CodeGenException {
4745
.map(Path::toString)
4846
.filter(s -> s.endsWith(this.inputExtension()))
4947
.map(Path::of).forEach(openApiFilePath -> {
50-
final Map<String, List<String>> circuitBreakerConfiguration = getCircuitBreakerConfiguration(
51-
context);
52-
5348
final OpenApiClientGeneratorWrapper generator = new OpenApiClientGeneratorWrapper(
5449
openApiFilePath.normalize(), outDir)
55-
.withCircuitBreakerConfiguration(circuitBreakerConfiguration);
50+
.withCircuitBreakerConfiguration(CircuitBreakerConfigurationParser.parse(
51+
context.config()));
5652

5753
context.config()
5854
.getOptionalValue(getResolvedBasePackageProperty(openApiFilePath), String.class)
@@ -67,17 +63,4 @@ public boolean trigger(CodeGenContext context) throws CodeGenException {
6763
}
6864
return false;
6965
}
70-
71-
private Map<String, List<String>> getCircuitBreakerConfiguration(CodeGenContext context) {
72-
UnaryOperator<String> nameToValuePropertyMapper = propertyName -> context.config().getValue(propertyName,
73-
String.class);
74-
75-
return new CircuitBreakerConfigurationParser(nameToValuePropertyMapper)
76-
.parse(getConfigPropertyNames(context));
77-
}
78-
79-
private static List<String> getConfigPropertyNames(CodeGenContext context) {
80-
return StreamSupport.stream(context.config().getPropertyNames().spliterator(), false)
81-
.collect(Collectors.toUnmodifiableList());
82-
}
8366
}

deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/circuitbreaker/CircuitBreakerConfigurationParserTest.java

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22

33
import static org.assertj.core.api.Assertions.assertThat;
44

5-
import java.io.IOException;
65
import java.util.List;
76
import java.util.Map;
8-
import java.util.Properties;
97

8+
import org.eclipse.microprofile.config.Config;
9+
import org.eclipse.microprofile.config.spi.ConfigProviderResolver;
1010
import org.junit.jupiter.api.Test;
1111

1212
class CircuitBreakerConfigurationParserTest {
1313

1414
@Test
15-
void parse() throws IOException {
16-
Map<String, List<String>> circuitBreakerConfiguration = loadConfiguration("/circuitbreaker/application.properties");
15+
void parse() {
16+
Config config = mockConfig("/circuitbreaker/application.properties");
17+
18+
Map<String, List<String>> circuitBreakerConfiguration = CircuitBreakerConfigurationParser.parse(config);
1719

1820
assertThat(circuitBreakerConfiguration.get("org.acme.CountryResource"))
1921
.containsExactlyInAnyOrder("getCountries", "getByCapital");
@@ -22,27 +24,29 @@ void parse() throws IOException {
2224
.containsOnly("get");
2325
}
2426

25-
private Map<String, List<String>> loadConfiguration(String propertiesFile) throws IOException {
26-
Properties properties = new Properties();
27-
properties.load(CircuitBreakerConfigurationParserTest.class.getResourceAsStream(propertiesFile));
28-
29-
return new CircuitBreakerConfigurationParser(properties::getProperty)
30-
.parse(properties.stringPropertyNames());
31-
}
32-
3327
@Test
34-
void circuitBreakerDisabledShouldReturnEmptyConfig() throws IOException {
35-
Map<String, List<String>> circuitBreakerConfiguration = loadConfiguration(
36-
"/circuitbreaker/circuit_breaker_disabled_application.properties");
28+
void circuitBreakerDisabledShouldReturnEmptyConfig() {
29+
Config config = mockConfig("/circuitbreaker/circuit_breaker_disabled_application.properties");
30+
31+
Map<String, List<String>> circuitBreakerConfiguration = CircuitBreakerConfigurationParser.parse(config);
3732

3833
assertThat(circuitBreakerConfiguration).isEmpty();
3934
}
4035

4136
@Test
42-
void missingCircuitBreakerEnabledConfigShouldReturnEmptyConfig() throws IOException {
43-
Map<String, List<String>> circuitBreakerConfiguration = loadConfiguration(
44-
"/circuitbreaker/missing_circuit_breaker_enabled_application.properties");
37+
void missingCircuitBreakerEnabledConfigShouldReturnEmptyConfig() {
38+
Config config = mockConfig("/circuitbreaker/missing_circuit_breaker_enabled_application.properties");
39+
40+
Map<String, List<String>> circuitBreakerConfiguration = CircuitBreakerConfigurationParser.parse(config);
4541

4642
assertThat(circuitBreakerConfiguration).isEmpty();
4743
}
44+
45+
private static Config mockConfig(String propertiesFile) {
46+
return ConfigProviderResolver
47+
.instance()
48+
.getBuilder()
49+
.withSources(new FileConfigSource(propertiesFile))
50+
.build();
51+
}
4852
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.quarkiverse.openapi.generator.deployment.circuitbreaker;
2+
3+
import java.io.IOException;
4+
import java.io.UncheckedIOException;
5+
import java.util.Map;
6+
import java.util.Properties;
7+
import java.util.Set;
8+
import java.util.stream.Collectors;
9+
10+
import org.eclipse.microprofile.config.spi.ConfigSource;
11+
12+
final class FileConfigSource implements ConfigSource {
13+
14+
private final String fileName;
15+
16+
private final Map<String, String> properties;
17+
18+
FileConfigSource(String fileName) {
19+
this.fileName = fileName;
20+
21+
Properties properties = new Properties();
22+
try {
23+
properties.load(FileConfigSource.class.getResourceAsStream(fileName));
24+
} catch (IOException e) {
25+
throw new UncheckedIOException(e);
26+
}
27+
28+
this.properties = properties.entrySet().stream()
29+
.collect(Collectors.toUnmodifiableMap(e -> e.getKey().toString(), e -> e.getValue().toString()));
30+
}
31+
32+
@Override
33+
public Map<String, String> getProperties() {
34+
return properties;
35+
}
36+
37+
@Override
38+
public Set<String> getPropertyNames() {
39+
return properties.keySet();
40+
}
41+
42+
@Override
43+
public String getValue(String s) {
44+
return properties.get(s);
45+
}
46+
47+
@Override
48+
public String getName() {
49+
return fileName;
50+
}
51+
}

0 commit comments

Comments
 (0)