use of io.swagger.v3.oas.annotations.tags.Tags in project swagger-core by swagger-api.
the class SpecFilter method filter.
public OpenAPI filter(OpenAPI openAPI, OpenAPISpecFilter filter, Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) {
OpenAPI filteredOpenAPI = filterOpenAPI(filter, openAPI, params, cookies, headers);
if (filteredOpenAPI == null) {
return filteredOpenAPI;
}
OpenAPI clone = new OpenAPI();
clone.info(filteredOpenAPI.getInfo());
clone.openapi(filteredOpenAPI.getOpenapi());
clone.setExtensions(filteredOpenAPI.getExtensions());
clone.setExternalDocs(filteredOpenAPI.getExternalDocs());
clone.setSecurity(filteredOpenAPI.getSecurity());
clone.setServers(filteredOpenAPI.getServers());
clone.tags(filteredOpenAPI.getTags() == null ? null : new ArrayList<>(openAPI.getTags()));
final Set<String> allowedTags = new HashSet<>();
final Set<String> filteredTags = new HashSet<>();
Paths clonedPaths = new Paths();
if (filteredOpenAPI.getPaths() != null) {
for (String resourcePath : filteredOpenAPI.getPaths().keySet()) {
PathItem pathItem = filteredOpenAPI.getPaths().get(resourcePath);
PathItem filteredPathItem = filterPathItem(filter, pathItem, resourcePath, params, cookies, headers);
if (filteredPathItem != null) {
PathItem clonedPathItem = new PathItem();
clonedPathItem.set$ref(filteredPathItem.get$ref());
clonedPathItem.setDescription(filteredPathItem.getDescription());
clonedPathItem.setSummary(filteredPathItem.getSummary());
clonedPathItem.setExtensions(filteredPathItem.getExtensions());
clonedPathItem.setParameters(filteredPathItem.getParameters());
clonedPathItem.setServers(filteredPathItem.getServers());
Map<PathItem.HttpMethod, Operation> ops = filteredPathItem.readOperationsMap();
for (Map.Entry<PathItem.HttpMethod, Operation> entry : ops.entrySet()) {
PathItem.HttpMethod key = entry.getKey();
Operation op = entry.getValue();
List<String> opTagsBeforeFilter = null;
if (op.getTags() != null) {
opTagsBeforeFilter = new ArrayList<>(op.getTags());
} else {
opTagsBeforeFilter = new ArrayList<>();
}
op = filterOperation(filter, op, resourcePath, key.toString(), params, cookies, headers);
clonedPathItem.operation(key, op);
if (op == null) {
filteredTags.addAll(opTagsBeforeFilter);
} else {
if (op.getTags() != null) {
opTagsBeforeFilter.removeAll(op.getTags());
allowedTags.addAll(op.getTags());
}
filteredTags.addAll(opTagsBeforeFilter);
}
}
if (!clonedPathItem.readOperations().isEmpty()) {
clonedPaths.addPathItem(resourcePath, clonedPathItem);
}
}
}
clone.paths(clonedPaths);
}
filteredTags.removeAll(allowedTags);
final List<Tag> tags = clone.getTags();
if (tags != null && !filteredTags.isEmpty()) {
for (Iterator<Tag> it = tags.iterator(); it.hasNext(); ) {
if (filteredTags.contains(it.next().getName())) {
it.remove();
}
}
if (clone.getTags().isEmpty()) {
clone.setTags(null);
}
}
if (filteredOpenAPI.getComponents() != null) {
clone.components(new Components());
clone.getComponents().setSchemas(filterComponentsSchema(filter, filteredOpenAPI.getComponents().getSchemas(), params, cookies, headers));
clone.getComponents().setSecuritySchemes(filteredOpenAPI.getComponents().getSecuritySchemes());
clone.getComponents().setCallbacks(filteredOpenAPI.getComponents().getCallbacks());
clone.getComponents().setExamples(filteredOpenAPI.getComponents().getExamples());
clone.getComponents().setExtensions(filteredOpenAPI.getComponents().getExtensions());
clone.getComponents().setHeaders(filteredOpenAPI.getComponents().getHeaders());
clone.getComponents().setLinks(filteredOpenAPI.getComponents().getLinks());
clone.getComponents().setParameters(filteredOpenAPI.getComponents().getParameters());
clone.getComponents().setRequestBodies(filteredOpenAPI.getComponents().getRequestBodies());
clone.getComponents().setResponses(filteredOpenAPI.getComponents().getResponses());
}
if (filter.isRemovingUnreferencedDefinitions()) {
clone = removeBrokenReferenceDefinitions(clone);
}
return clone;
}
use of io.swagger.v3.oas.annotations.tags.Tags in project swagger-core by swagger-api.
the class PetData method findPetByTags.
public List<Pet> findPetByTags(String tags) {
String[] tagList = tags.split(",");
List<Pet> result = new ArrayList<Pet>();
for (Pet pet : pets) {
if (null != pet.getTags()) {
for (Tag tag : pet.getTags()) {
for (String tagListString : tagList) {
if (tagListString.equals(tag.getName())) {
result.add(pet);
}
}
}
}
}
return result;
}
use of io.swagger.v3.oas.annotations.tags.Tags in project swagger-core by swagger-api.
the class PetData method findPetByTags.
public List<Pet> findPetByTags(String tags) {
String[] tagList = tags.split(",");
List<Pet> result = new ArrayList<Pet>();
for (Pet pet : pets) {
if (null != pet.getTags()) {
for (Tag tag : pet.getTags()) {
for (String tagListString : tagList) {
if (tagListString.equals(tag.getName())) {
result.add(pet);
}
}
}
}
}
return result;
}
use of io.swagger.v3.oas.annotations.tags.Tags in project swagger-core by swagger-api.
the class PetData method createPet.
static Pet createPet(long id, Category cat, String name, String[] urls, String[] tags, String status) {
Pet pet = new Pet();
pet.setId(id);
pet.setCategory(cat);
pet.setName(name);
if (null != urls) {
List<String> urlObjs = new ArrayList<String>();
for (String urlString : urls) {
urlObjs.add(urlString);
}
pet.setPhotoUrls(urlObjs);
}
List<Tag> tagObjs = new ArrayList<Tag>();
int i = 0;
if (null != tags) {
for (String tagString : tags) {
i = i + 1;
Tag tag = new Tag();
tag.setId(i);
tag.setName(tagString);
tagObjs.add(tag);
}
}
pet.setTags(tagObjs);
pet.setStatus(status);
return pet;
}
use of io.swagger.v3.oas.annotations.tags.Tags in project gravitee-management-rest-api by gravitee-io.
the class OAIToAPIConverter method visit.
@Override
public SwaggerApiEntity visit(OpenAPI oai) {
final SwaggerApiEntity apiEntity = new SwaggerApiEntity();
// Name
apiEntity.setName(oai.getInfo().getTitle());
// Description
apiEntity.setDescription(oai.getInfo().getDescription() == null ? "Description of " + apiEntity.getName() : oai.getInfo().getDescription());
// Version
apiEntity.setVersion(oai.getInfo().getVersion());
fill(apiEntity, oai);
// Use X-Gravitee to add information in API
XGraviteeIODefinition xGraviteeIODefinition = null;
if (oai.getExtensions() != null && oai.getExtensions().get(X_GRAVITEEIO_DEFINITION_VENDOR_EXTENSION) != null) {
xGraviteeIODefinition = new ObjectMapper().convertValue(oai.getExtensions().get(X_GRAVITEEIO_DEFINITION_VENDOR_EXTENSION), XGraviteeIODefinition.class);
}
// Proxy
Proxy proxy = new Proxy();
String defaultEndpoint = null;
// Proxy - Endpoints
if (!oai.getServers().isEmpty()) {
List<String> evaluatedServerUrl = mapServersToEndpoint(oai.getServers());
EndpointGroup defaultGroup = new EndpointGroup();
defaultGroup.setName("default-group");
if (evaluatedServerUrl == null) {
defaultGroup.setEndpoints(singleton(new HttpEndpoint("default", defaultEndpoint)));
} else if (evaluatedServerUrl.size() == 1) {
defaultEndpoint = evaluatedServerUrl.get(0);
defaultGroup.setEndpoints(singleton(new HttpEndpoint("default", defaultEndpoint)));
} else {
defaultEndpoint = evaluatedServerUrl.get(0);
defaultGroup.setEndpoints(new HashSet<>());
for (int i = 0; i < evaluatedServerUrl.size(); i++) {
defaultGroup.getEndpoints().add(new HttpEndpoint("server" + (i + 1), evaluatedServerUrl.get(i)));
}
}
proxy.setGroups(singleton(defaultGroup));
apiEntity.setProxy(proxy);
}
// Proxy - Context Path / Virtual Host
if (xGraviteeIODefinition != null && xGraviteeIODefinition.getVirtualHosts() != null) {
proxy.setVirtualHosts(xGraviteeIODefinition.getVirtualHosts().stream().map(vHost -> new VirtualHost(vHost.getHost(), vHost.getPath(), (vHost.getOverrideEntrypoint() != null ? vHost.getOverrideEntrypoint() : false))).collect(Collectors.toList()));
} else {
String contextPath = null;
if (defaultEndpoint != null) {
contextPath = URI.create(defaultEndpoint).getPath();
}
if (contextPath == null || contextPath.equals("/")) {
contextPath = apiEntity.getName().replaceAll("\\s+", "").toLowerCase();
}
proxy.setVirtualHosts(singletonList(new VirtualHost(contextPath)));
}
apiEntity.setProxy(proxy);
// Add xGraviteeIODefinition config
if (xGraviteeIODefinition != null) {
// Categories
if (xGraviteeIODefinition.getCategories() != null && !xGraviteeIODefinition.getCategories().isEmpty()) {
apiEntity.setCategories(new HashSet<>(xGraviteeIODefinition.getCategories()));
}
// Groups
if (xGraviteeIODefinition.getGroups() != null && !xGraviteeIODefinition.getGroups().isEmpty()) {
// Groups in schema are group name. Replace them by id
Set<String> groupIdsToImport = xGraviteeIODefinition.getGroups().stream().flatMap(group -> groupService.findByName(group).stream()).map(GroupEntity::getId).collect(Collectors.toSet());
apiEntity.setGroups(groupIdsToImport);
}
// Labels
if (xGraviteeIODefinition.getLabels() != null && !xGraviteeIODefinition.getLabels().isEmpty()) {
apiEntity.setLabels(xGraviteeIODefinition.getLabels());
}
// Metadata
if (xGraviteeIODefinition.getMetadata() != null && !xGraviteeIODefinition.getMetadata().isEmpty()) {
final List<ApiMetadataEntity> apiMetadataEntities = xGraviteeIODefinition.getMetadata().stream().map(metadata -> {
ApiMetadataEntity apiMetadata = new ApiMetadataEntity();
apiMetadata.setKey(IdGenerator.generate(metadata.getName()));
apiMetadata.setName(metadata.getName());
apiMetadata.setValue(metadata.getValue());
apiMetadata.setFormat(metadata.getFormat() != null ? MetadataFormat.valueOf(metadata.getFormat().name()) : MetadataFormat.STRING);
return apiMetadata;
}).collect(Collectors.toList());
apiEntity.setMetadata(apiMetadataEntities);
}
// Picture
if (xGraviteeIODefinition.getPicture() != null && !StringUtils.isEmpty(xGraviteeIODefinition.getPicture())) {
if (xGraviteeIODefinition.getPicture().matches(PICTURE_REGEX)) {
apiEntity.setPicture(xGraviteeIODefinition.getPicture());
}
}
// Properties
if (xGraviteeIODefinition.getProperties() != null && !xGraviteeIODefinition.getProperties().isEmpty()) {
Properties properties = new Properties();
properties.setProperties(xGraviteeIODefinition.getProperties().stream().map(prop -> new Property(prop.getKey(), prop.getValue())).collect(Collectors.toList()));
apiEntity.setProperties(properties);
}
// Tags
if (xGraviteeIODefinition.getTags() != null && !xGraviteeIODefinition.getTags().isEmpty()) {
final Map<String, String> tagMap = tagService.findByReference(GraviteeContext.getCurrentOrganization(), TagReferenceType.ORGANIZATION).stream().collect(toMap(TagEntity::getId, TagEntity::getName));
final Set<String> tagIdToAdd = xGraviteeIODefinition.getTags().stream().map(tag -> findTagIdByName(tagMap, tag)).filter(Objects::nonNull).collect(Collectors.toSet());
if (tagIdToAdd != null && !tagIdToAdd.isEmpty()) {
apiEntity.setTags(tagIdToAdd);
}
}
// Visibility
if (xGraviteeIODefinition.getVisibility() != null) {
apiEntity.setVisibility(Visibility.valueOf(xGraviteeIODefinition.getVisibility().name()));
}
}
return apiEntity;
}
Aggregations