Skip to content

Commit 8ca56a9

Browse files
committed
implement config priorities
1 parent 2768e05 commit 8ca56a9

File tree

4 files changed

+52
-10
lines changed

4 files changed

+52
-10
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/Codegen.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.swagger.codegen.v3;
22

33
import java.util.ArrayList;
4+
import java.util.Collections;
45
import java.util.HashMap;
56
import java.util.List;
67
import java.util.Map;
@@ -122,11 +123,20 @@ public static void main(String[] args) {
122123

123124
public static List<CodegenConfig> getExtensions() {
124125
ServiceLoader<CodegenConfig> loader = ServiceLoader.load(CodegenConfig.class);
125-
List<CodegenConfig> output = new ArrayList<CodegenConfig>();
126-
for (CodegenConfig aLoader : loader) {
127-
output.add(aLoader);
126+
Map<String, CodegenConfig> output = new HashMap<>();
127+
128+
for (CodegenConfig config : loader) {
129+
if (output.get(config.getName()) == null) {
130+
output.put(config.getName(), config);
131+
} else if (config.isPrivileged() && !output.get(config.getName()).isPrivileged()) {
132+
output.put(config.getName(), config);
133+
} else if (output.get(config.getName()).isPrivileged() && !config.isPrivileged()) {
134+
// skip
135+
} else if (config.getPriority() > output.get(config.getName()).getPriority()) {
136+
output.put(config.getName(), config);
137+
}
128138
}
129-
return output;
139+
return new ArrayList<>(output.values());
130140
}
131141

132142
static void usage(Options options) {

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/CodegenConfig.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,4 +255,16 @@ public interface CodegenConfig {
255255
default boolean checkAliasModel() {
256256
return false;
257257
}
258+
259+
default boolean isPrivileged() {
260+
return false;
261+
}
262+
263+
default int getPriority() {
264+
return Integer.MIN_VALUE;
265+
}
266+
267+
default String getCodeName() {
268+
return getName();
269+
}
258270
}

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/CodegenConfigLoader.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,25 @@ public static CodegenConfig forName(String name) {
1515
ServiceLoader<CodegenConfig> loader = load(CodegenConfig.class);
1616

1717
StringBuilder availableConfigs = new StringBuilder();
18-
18+
CodegenConfig current = null;
1919
for (CodegenConfig config : loader) {
20+
2021
if (config.getName().equals(name)) {
21-
return config;
22+
if (current == null) {
23+
current = config;
24+
} else if (config.isPrivileged() && !current.isPrivileged()) {
25+
current = config;
26+
} else if (current.isPrivileged() && !config.isPrivileged()) {
27+
// skip
28+
} else if (config.getPriority() > current.getPriority()) {
29+
current = config;
30+
}
2231
}
23-
2432
availableConfigs.append(config.getName()).append("\n");
2533
}
34+
if (current != null) {
35+
return current;
36+
}
2637

2738
// else try to load directly
2839
try {

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/MetaGenerator.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,20 @@ public static void main(String[] args) {
3838

3939
public static List<CodegenConfig> getExtensions() {
4040
ServiceLoader<CodegenConfig> loader = ServiceLoader.load(CodegenConfig.class);
41-
List<CodegenConfig> output = new ArrayList<CodegenConfig>();
41+
Map<String, CodegenConfig> output = new HashMap<>();
42+
4243
for (CodegenConfig config : loader) {
43-
output.add(config);
44+
if (output.get(config.getName()) == null) {
45+
output.put(config.getName(), config);
46+
} else if (config.isPrivileged() && !output.get(config.getName()).isPrivileged()) {
47+
output.put(config.getName(), config);
48+
} else if (output.get(config.getName()).isPrivileged() && !config.isPrivileged()) {
49+
// skip
50+
} else if (config.getPriority() > output.get(config.getName()).getPriority()) {
51+
output.put(config.getName(), config);
52+
}
4453
}
45-
return output;
54+
return new ArrayList<>(output.values());
4655
}
4756

4857
static void usage(Options options) {

0 commit comments

Comments
 (0)