Add support for swagger tag ordering (deprecated moved to end) (#2178)

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
This commit is contained in:
Avgustin Marinov
2025-01-09 12:38:13 +02:00
committed by GitHub
parent d2799f4bbc
commit 67c15b722a
3 changed files with 46 additions and 2 deletions

View File

@@ -9,8 +9,14 @@
*/
package org.eclipse.hawkbit.rest;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.tags.Tag;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -24,6 +30,9 @@ public class OpenApiConfiguration {
public static final String HAWKBIT_SERVER_SWAGGER_ENABLED = "hawkbit.server.swagger.enabled";
public static final String X_HAWKBIT = "x-hawkbit";
public static final String ORDER = "order";
private static final String API_TITLE = "hawkBit REST APIs";
private static final String API_VERSION = "v1";
private static final String DESCRIPTION = """
@@ -34,4 +43,34 @@ public class OpenApiConfiguration {
public OpenAPI openApi() {
return new OpenAPI().info(new Info().title(API_TITLE).version(API_VERSION).description(DESCRIPTION));
}
public static List<Tag> sort(final List<Tag> tags) {
tags.sort(TAG_COMPARATOR);
return tags;
}
private static final Comparator<Tag> TAG_COMPARATOR = new Comparator<>() {
@Override
public int compare(final Tag o1, final Tag o2) {
final int o1Order = order(o1);
final int o2Order = order(o2);
if (o1Order == o2Order) {
return o1.getName().compareTo(o2.getName());
} else {
return Integer.compare(o1Order, o2Order);
}
}
private static int order(final Tag tag) {
return Optional.ofNullable(tag.getExtensions())
.map(extensions -> extensions.get(X_HAWKBIT))
.filter(extension -> Map.class.isAssignableFrom(extension.getClass()))
.map(Map.class::cast)
.map(propertiesMap -> propertiesMap.get(ORDER))
.map(String.class::cast)
.map(Integer::parseInt)
.orElse(0);
}
};
}