use of org.ballerinalang.model.tree.ServiceNode in project ballerina by ballerina-lang.
the class SwaggerConverterUtils method generateSwaggerDefinitions.
/**
* This method will generate ballerina string from swagger definition. Since ballerina service definition is super
* set of swagger definition we will take both swagger and ballerina definition and merge swagger changes to
* ballerina definition selectively to prevent data loss
*
* @param ballerinaSource ballerina definition to be process as ballerina definition
* @param serviceName service name
* @return String representation of converted ballerina source
* @throws IOException when error occur while processing input swagger and ballerina definitions.
*/
public static String generateSwaggerDefinitions(String ballerinaSource, String serviceName) throws IOException {
// Get the ballerina model using the ballerina source code.
BFile balFile = new BFile();
balFile.setContent(ballerinaSource);
BLangCompilationUnit topCompilationUnit = SwaggerConverterUtils.getTopLevelNodeFromBallerinaFile(balFile);
String httpAlias = getAlias(topCompilationUnit, Constants.BALLERINA_HTTP_PACKAGE_NAME);
String swaggerAlias = getAlias(topCompilationUnit, Constants.SWAGGER_PACKAGE_NAME);
SwaggerServiceMapper swaggerServiceMapper = new SwaggerServiceMapper(httpAlias, swaggerAlias);
String swaggerSource = StringUtils.EMPTY;
for (TopLevelNode topLevelNode : topCompilationUnit.getTopLevelNodes()) {
if (topLevelNode instanceof BLangService) {
ServiceNode serviceDefinition = (ServiceNode) topLevelNode;
// Generate swagger string for the mentioned service name.
if (StringUtils.isNotBlank(serviceName)) {
if (serviceDefinition.getName().getValue().equals(serviceName)) {
Swagger swaggerDefinition = swaggerServiceMapper.convertServiceToSwagger(serviceDefinition);
swaggerSource = swaggerServiceMapper.generateSwaggerString(swaggerDefinition);
break;
}
} else {
// If no service name mentioned, then generate swagger definition for the first service.
Swagger swaggerDefinition = swaggerServiceMapper.convertServiceToSwagger(serviceDefinition);
swaggerSource = swaggerServiceMapper.generateSwaggerString(swaggerDefinition);
break;
}
}
}
return swaggerSource;
}
use of org.ballerinalang.model.tree.ServiceNode in project ballerina by ballerina-lang.
the class SwaggerConverterUtils method generateOAS3Definitions.
/**
* This method will generate open API 3.X specification for given ballerina service. Since we will need to
* support both swagger 2.0 and OAS 3.0 it was implemented to convert to swagger by default and convert it
* to OAS on demand.
*
* @param ballerinaSource ballerina source to be converted to swagger/OAS definition
* @param serviceName specific service name within ballerina source that need to map OAS
* @return Generated OAS3 string output.
* @throws IOException When error occurs while converting, parsing input source.
*/
public static String generateOAS3Definitions(String ballerinaSource, String serviceName) throws IOException {
// Get the ballerina model using the ballerina source code.
BFile balFile = new BFile();
balFile.setContent(ballerinaSource);
// Create empty swagger object.
Swagger swaggerDefinition = new Swagger();
BLangCompilationUnit topCompilationUnit = SwaggerConverterUtils.getTopLevelNodeFromBallerinaFile(balFile);
String httpAlias = getAlias(topCompilationUnit, Constants.BALLERINA_HTTP_PACKAGE_NAME);
String swaggerAlias = getAlias(topCompilationUnit, Constants.SWAGGER_PACKAGE_NAME);
SwaggerServiceMapper swaggerServiceMapper = new SwaggerServiceMapper(httpAlias, swaggerAlias);
String swaggerSource = StringUtils.EMPTY;
for (TopLevelNode topLevelNode : topCompilationUnit.getTopLevelNodes()) {
if (topLevelNode instanceof BLangService) {
ServiceNode serviceDefinition = (ServiceNode) topLevelNode;
// Generate swagger string for the mentioned service name.
if (StringUtils.isNotBlank(serviceName)) {
if (serviceDefinition.getName().getValue().equals(serviceName)) {
swaggerDefinition = swaggerServiceMapper.convertServiceToSwagger(serviceDefinition);
break;
}
} else {
// If no service name mentioned, then generate swagger definition for the first service.
swaggerDefinition = swaggerServiceMapper.convertServiceToSwagger(serviceDefinition);
break;
}
}
}
swaggerSource = swaggerServiceMapper.generateSwaggerString(swaggerDefinition);
SwaggerConverter converter = new SwaggerConverter();
return Yaml.pretty(converter.readContents(swaggerSource, null, null).getOpenAPI());
}
use of org.ballerinalang.model.tree.ServiceNode in project ballerina by ballerina-lang.
the class BLangPackageBuilder method addServiceBody.
public void addServiceBody(Set<Whitespace> ws) {
ServiceNode serviceNode = serviceNodeStack.peek();
serviceNode.addWS(ws);
blockNodeStack.pop().getStatements().forEach(varDef -> serviceNode.addVariable((VariableDefinitionNode) varDef));
}
use of org.ballerinalang.model.tree.ServiceNode in project ballerina by ballerina-lang.
the class BLangPackageBuilder method addServiceEndpointAttachments.
public void addServiceEndpointAttachments(int size, Set<Whitespace> ws) {
ServiceNode serviceNode = serviceNodeStack.peek();
serviceNode.addWS(ws);
for (int i = 0; i < size; i++) {
BLangNameReference nameReference = nameReferenceStack.pop();
BLangSimpleVarRef varRef = (BLangSimpleVarRef) TreeBuilder.createSimpleVariableReferenceNode();
varRef.pos = nameReference.pos;
varRef.addWS(nameReference.ws);
varRef.pkgAlias = (BLangIdentifier) nameReference.pkgAlias;
varRef.variableName = (BLangIdentifier) nameReference.name;
serviceNode.bindToEndpoint(varRef);
}
}
use of org.ballerinalang.model.tree.ServiceNode in project ballerina by ballerina-lang.
the class SwaggerServiceMapper method parseServiceInfoAnnotationAttachment.
/**
* Parses the 'ServiceInfo' annotation and build the swagger definition for it.
* @param service The ballerina service which has the 'ServiceInfo' annotation attachment.
* @param swagger The swagger definition to be built up.
*/
private void parseServiceInfoAnnotationAttachment(ServiceNode service, Swagger swagger) {
Optional<? extends AnnotationAttachmentNode> swaggerInfoAnnotation = service.getAnnotationAttachments().stream().filter(a -> null != swaggerAlias && this.swaggerAlias.equals(a.getPackageAlias().getValue()) && "ServiceInfo".equals(a.getAnnotationName().getValue())).findFirst();
Info info = new Info().version("1.0.0").title(service.getName().getValue());
if (swaggerInfoAnnotation.isPresent()) {
Map<String, AnnotationAttachmentAttributeValueNode> attributes = this.listToMap(swaggerInfoAnnotation.get());
if (attributes.containsKey("serviceVersion")) {
info.version(this.getStringLiteralValue(attributes.get("serviceVersion")));
}
if (attributes.containsKey("title")) {
info.title(this.getStringLiteralValue(attributes.get("title")));
}
if (attributes.containsKey("description")) {
info.description(this.getStringLiteralValue(attributes.get("description")));
}
if (attributes.containsKey("termsOfService")) {
info.termsOfService(this.getStringLiteralValue(attributes.get("termsOfService")));
}
this.createContactModel(attributes.get("contact"), info);
this.createLicenseModel(attributes.get("license"), info);
this.createExternalDocModel(attributes.get("externalDoc"), swagger);
this.createTagModel(attributes.get("tags"), swagger);
this.createOrganizationModel(attributes.get("organization"), info);
this.createDevelopersModel(attributes.get("developers"), info);
}
swagger.setInfo(info);
}
Aggregations