package com.restfiddle.controller.rest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.swagger.models.Info;
import io.swagger.models.Operation;
import io.swagger.models.Path;
import io.swagger.models.Swagger;
import io.swagger.parser.SwaggerParser;
import io.swagger.util.Json;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.databind.JsonNode;
import com.restfiddle.entity.Project;
import com.restfiddle.util.TreeNode;
public class ExportController {
Logger logger = LoggerFactory.getLogger(ExportController.class);
@Autowired
private ProjectController projectController;
@Autowired
private NodeController nodeController;
@RequestMapping(value = "/api/export/swagger", method = RequestMethod.POST)
public @ResponseBody
void exportProjectSwagger(@RequestParam("projectId") String projectId) {
rfToSwaggerConverter(projectId);
}
private void rfToSwaggerConverter(String projectId) {
new SwaggerParser().read("http://petstore.swagger.io/v2/swagger.json");
Project project = projectController.findById(null, projectId);
String projectNodeRefId = project.getProjectRef().getId();
TreeNode projectNode = nodeController.getProjectTree(projectNodeRefId);
Swagger swagger = new Swagger();
//TODO : set host and basepath for swagger
//swagger.setHost(host);
//swagger.setBasePath(basePath);
Info info = new Info();
info.setTitle(projectNode.getName());
info.setDescription(projectNode.getDescription());
swagger.setInfo(info);
Map<String, Path> paths = new HashMap<>();
Path path;
String pathKey;
String method;
Operation op;
String operationId;
String summary;
List<TreeNode> children = projectNode.getChildren();
for (int i = 0; i < children.size(); i++) {
TreeNode childNode = children.get(i);
path = new Path();
op = new Operation();
operationId = childNode.getName();
summary = childNode.getDescription();
op.setOperationId(operationId);
op.setSummary(summary);
method = childNode.getMethod().toLowerCase();
path.set(method, op);
//TODO : pathKey is the relative url (for example /workspaces) from the api url
pathKey = null;
paths.put(pathKey, path);
}
swagger.setPaths(paths);
JsonNode jsonNode = Json.mapper().convertValue(swagger, JsonNode.class);
System.out.println(jsonNode.toString());
}
}