Files
openapi-merger/src/main/java/com/krusoe/openapimerge/validate/UniqueOperationIdValidator.java
T
2026-05-17 21:24:07 +02:00

41 lines
1.6 KiB
Java

package com.krusoe.openapimerge.validate;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import org.openapitools.codegen.validation.GenericValidator;
import org.openapitools.codegen.validation.Severity;
import org.openapitools.codegen.validation.ValidationResult;
import org.openapitools.codegen.validation.ValidationRule;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class UniqueOperationIdValidator extends GenericValidator<PathItem> {
private static Set<String> uniqueOperationIds = new HashSet<>();
public UniqueOperationIdValidator() {
super(List.of(ValidationRule.create(Severity.ERROR,
"OperationId should be unique across the whole file, all paths and methods", "OperationId is not unique", UniqueOperationIdValidator::testForUniqueness)));
}
static ValidationRule.Result testForUniqueness(Object item) {
if (item instanceof PathItem) {
ValidationResult result = new ValidationResult();
for (Operation operation : ((PathItem) item).readOperations()) {
if (uniqueOperationIds.contains(operation.getOperationId())) {
return new ValidationRule.Fail("Operation is not unique. OperationId: %s Path: %s".formatted(operation.getOperationId(), ((PathItem) item).get$ref()));
} else {
uniqueOperationIds.add(operation.getOperationId());
}
}
return new ValidationRule.Pass();
}
throw new IllegalArgumentException();
}
}