All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.zlyx.easy.swagger.plugins.EasySwaggerApiListingReader Maven / Gradle / Ivy

There is a newer version: 4.3.11
Show newest version
package com.zlyx.easy.swagger.plugins;

import static java.util.Optional.ofNullable;
import static java.util.stream.Collectors.toCollection;
import static org.springframework.core.annotation.AnnotationUtils.findAnnotation;
import static springfox.documentation.service.Tags.emptyTags;
import static springfox.documentation.swagger.common.SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER;
import static springfox.documentation.swagger.common.SwaggerPluginSupport.pluginDoesApply;

import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import java.util.TreeSet;
import java.util.function.Function;
import java.util.stream.Stream;

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import com.zlyx.easy.swagger.annotations.SpringController;

import io.swagger.annotations.Api;
import springfox.documentation.builders.BuilderDefaults;
import springfox.documentation.service.Tag;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.ApiListingBuilderPlugin;
import springfox.documentation.spi.service.contexts.ApiListingContext;

@Component
@Order(value = SWAGGER_PLUGIN_ORDER + 1)
public class EasySwaggerApiListingReader implements ApiListingBuilderPlugin {
	@Override
	public void apply(ApiListingContext apiListingContext) {
		Optional> controller = apiListingContext.getResourceGroup().getControllerClass();
		if (controller.isPresent()) {
			Optional apiAnnotation = ofNullable(findAnnotation(controller.get(), Api.class));
			Set oasTags = tagsFromOasAnnotations(apiListingContext.getResourceGroup().getGroupName(),
					controller.get());
			String description = apiAnnotation.map(Api::description).map(BuilderDefaults::emptyToNull).orElse(null);

			Set tagSet = new TreeSet<>();
			if (oasTags.isEmpty()) {
				tagSet.addAll(apiAnnotation.map(tags()).orElse(new TreeSet<>()));
				if (tagSet.isEmpty()) {
					tagSet.add(apiListingContext.getResourceGroup().getGroupName());
				}
			}
			apiListingContext.apiListingBuilder().description(description).tagNames(tagSet).tags(oasTags);
		}
	}

	private Set tagsFromOasAnnotations(String groupName, Class controller) {
		HashSet controllerTags = new HashSet<>();
		SpringController springController = findAnnotation(controller, SpringController.class);
		if (springController != null) {
			controllerTags.add(new Tag(groupName, springController.todo()[0]));
		}
		return controllerTags;
	}

	private Function> tags() {
		return input -> Stream.of(input.tags()).filter(emptyTags()).collect(toCollection(TreeSet::new));
	}

	@Override
	public boolean supports(DocumentationType delimiter) {
		return pluginDoesApply(delimiter);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy