use of io.gravitee.management.service.exceptions.SwaggerDescriptorException in project gravitee-management-rest-api by gravitee-io.
the class SwaggerServiceImpl method prepare.
public NewApiEntity prepare(ImportSwaggerDescriptorEntity swaggerDescriptor) {
Swagger swagger = null;
switch(swaggerDescriptor.getVersion()) {
case VERSION_1_0:
try {
logger.info("Loading an old Swagger descriptor from {}", swaggerDescriptor.getPayload());
// For spec < 2.0, only read by url is possible
swagger = new SwaggerCompatConverter().read(swaggerDescriptor.getPayload());
} catch (IOException ioe) {
logger.error("Can not read old Swagger specification", ioe);
throw new SwaggerDescriptorException();
}
case VERSION_2_0:
if (swaggerDescriptor.getType() == ImportSwaggerDescriptorEntity.Type.INLINE) {
logger.info("Loading an inline Swagger descriptor");
swagger = new SwaggerParser().parse(swaggerDescriptor.getPayload());
} else if (swaggerDescriptor.getType() == ImportSwaggerDescriptorEntity.Type.URL) {
logger.info("Loading a Swagger descriptor from URL: ", swaggerDescriptor.getPayload());
swagger = new SwaggerParser().read(swaggerDescriptor.getPayload());
}
}
if (swagger == null) {
throw new SwaggerDescriptorException();
}
NewApiEntity apiEntity = new NewApiEntity();
apiEntity.setName(swagger.getInfo().getTitle());
apiEntity.setDescription(swagger.getInfo().getDescription());
apiEntity.setVersion(swagger.getInfo().getVersion());
String scheme = (swagger.getSchemes() == null || swagger.getSchemes().isEmpty()) ? defaultScheme : swagger.getSchemes().iterator().next().toValue();
apiEntity.setEndpoint(scheme + "://" + swagger.getHost() + swagger.getBasePath());
apiEntity.setPaths(new ArrayList<>(swagger.getPaths().keySet().stream().map(path -> path.replaceAll("\\{(.[^/]*)\\}", ":$1")).collect(Collectors.toList())));
return apiEntity;
}
Aggregations