41 lines
1.6 KiB
Java
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();
|
|
}
|
|
|
|
|
|
}
|