Skip to content

Commit 948205e

Browse files
mimihalescuFlorin Mihalache
authored and
Florin Mihalache
committed
Feat: Ignore marked resources (#4)
* feat: add filters to skip the generation of marked models and apis * feat: accept more than one skipTag using globalSettings Signed-off-by: Florin Mihalache <[email protected]>
1 parent c0991b5 commit 948205e

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ public class CodegenOperation {
5353
public List<Map<String, String>> examples;
5454
public List<Map<String, String>> requestBodyExamples;
5555
public ExternalDocumentation externalDocs;
56+
57+
public Map<String, Object> getVendorExtensions() {
58+
return vendorExtensions;
59+
}
60+
5661
public Map<String, Object> vendorExtensions = new HashMap<String, Object>();
5762
public String nickname; // legacy support
5863
public String operationIdOriginal; // for plug-in

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import java.time.ZonedDateTime;
6464
import java.util.*;
6565
import java.util.function.Function;
66+
import java.util.function.Predicate;
6667
import java.util.stream.Collectors;
6768

6869
import static org.apache.commons.lang3.StringUtils.removeStart;
@@ -88,6 +89,7 @@ public class DefaultGenerator implements Generator {
8889
private String basePath;
8990
private String basePathWithoutHost;
9091
private String contextPath;
92+
private List<String> skipTags = new ArrayList<>();
9193
private Map<String, String> generatorPropertyDefaults = new HashMap<>();
9294
protected TemplateProcessor templateProcessor = null;
9395

@@ -101,6 +103,11 @@ public DefaultGenerator() {
101103
public DefaultGenerator(Boolean dryRun) {
102104
this.dryRun = Boolean.TRUE.equals(dryRun);
103105
LOGGER.info("Generating with dryRun={}", this.dryRun);
106+
String skipTagsProperty = GlobalSettings.getProperty("skipTags");
107+
if(skipTagsProperty != null) {
108+
skipTags = Arrays.asList(skipTagsProperty.split(","));
109+
}
110+
LOGGER.info("Generating with skipTags={}", skipTags);
104111
}
105112

106113
@SuppressWarnings("deprecation")
@@ -527,6 +534,10 @@ void generateModels(List<File> files, List<Object> allModels, List<String> unuse
527534
// for PythonClientCodegen, all aliases are generated as models
528535
continue; // Don't create user-defined classes for aliases
529536
}
537+
if(hasAnySkipTag(skipTags, m)) {
538+
LOGGER.info("Skipped generating model {}", m.name);
539+
continue;
540+
}
530541
}
531542
allModels.add(modelTemplate);
532543
}
@@ -551,6 +562,20 @@ void generateModels(List<File> files, List<Object> allModels, List<String> unuse
551562

552563
}
553564

565+
private boolean hasAnySkipTag(List<String> skipTags, CodegenModel m) {
566+
Map<String, Object> vendorExtensions = m.vendorExtensions;
567+
return skipTags.stream().anyMatch(hasSkipTag(vendorExtensions));
568+
}
569+
570+
private boolean hasAnySkipTag(List<String> skipTags, CodegenOperation op) {
571+
Map<String, Object> vendorExtensions = op.vendorExtensions;
572+
return skipTags.stream().anyMatch(hasSkipTag(vendorExtensions));
573+
}
574+
575+
private Predicate<String> hasSkipTag(Map<String, Object> vendorExtensions) {
576+
return skipTag -> vendorExtensions.containsKey(skipTag) && (boolean) vendorExtensions.get(skipTag);
577+
}
578+
554579
@SuppressWarnings("unchecked")
555580
void generateApis(List<File> files, List<Object> allOperations, List<Object> allModels) {
556581
if (!generateApis) {
@@ -577,6 +602,11 @@ void generateApis(List<File> files, List<Object> allOperations, List<Object> all
577602
try {
578603
List<CodegenOperation> ops = paths.get(tag);
579604
ops.sort((one, another) -> ObjectUtils.compare(one.operationId, another.operationId));
605+
ops.removeIf(op -> hasInProgressExtension(tag, op));
606+
if(ops.isEmpty()) {
607+
LOGGER.info("The {} client will not be generated", tag);
608+
continue;
609+
}
580610
Map<String, Object> operation = processOperations(config, tag, ops, allModels);
581611
URL url = URLPathUtils.getServerURL(openAPI, config.serverVariableOverrides());
582612
operation.put("basePath", basePath);
@@ -683,6 +713,13 @@ void generateApis(List<File> files, List<Object> allOperations, List<Object> all
683713
}
684714

685715
}
716+
private boolean hasInProgressExtension(String tag, CodegenOperation op) {
717+
if (hasAnySkipTag(skipTags, op)) {
718+
LOGGER.info("Operation {} of {} will not be generated", op.operationId, tag);
719+
return true;
720+
}
721+
return false;
722+
}
686723

687724
private void generateSupportingFiles(List<File> files, Map<String, Object> bundle) {
688725
if (!generateSupportingFiles) {

0 commit comments

Comments
 (0)