From d93b404b2337e389926490f9841e247e6440f83d Mon Sep 17 00:00:00 2001 From: Hugo Wood Date: Tue, 11 Aug 2015 14:37:00 +0200 Subject: [PATCH] Fix swagger.json supporting file for the node.js server (fixes #652) --- .../languages/NodeJSServerCodegen.java | 54 +++++++++++++++++++ .../main/resources/nodejs/swagger.mustache | 8 +-- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java index 28a0abfb6f7..5d0a7034537 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java @@ -9,11 +9,19 @@ import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; import java.io.File; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig { protected String apiVersion = "1.0.0"; @@ -197,4 +205,50 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig } return objs; } + + @SuppressWarnings("unchecked") + private Map getOperations(Map objs) { + Map apiInfo = (Map) objs.get("apiInfo"); + List> apis = (List>) apiInfo.get("apis"); + Map api = apis.get(0); + return (Map) api.get("operations"); + } + + private List> sortOperationsByPath(List ops) { + Multimap opsByPath = ArrayListMultimap.create(); + + for (CodegenOperation op : ops) { + opsByPath.put(op.path, op); + } + + List> opsByPathList = new ArrayList>(); + for (Entry> entry : opsByPath.asMap().entrySet()) { + Map opsByPathEntry = new HashMap(); + opsByPathList.add(opsByPathEntry); + opsByPathEntry.put("path", entry.getKey()); + opsByPathEntry.put("operation", entry.getValue()); + List operationsForThisPath = Lists.newArrayList(entry.getValue()); + operationsForThisPath.get(operationsForThisPath.size() - 1).hasMore = null; + if (opsByPathList.size() < opsByPath.asMap().size()) { + opsByPathEntry.put("hasMore", "true"); + } + } + + return opsByPathList; + } + + @Override + public Map postProcessSupportingFileData(Map objs) { + Map operations = getOperations(objs); + + if (operations != null) { + @SuppressWarnings("unchecked") + List ops = (List) operations.get("operation"); + + List> opsByPathList = sortOperationsByPath(ops); + operations.put("operationsByPath", opsByPathList); + } + + return super.postProcessSupportingFileData(objs); + } } \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/nodejs/swagger.mustache b/modules/swagger-codegen/src/main/resources/nodejs/swagger.mustache index e4254fd0aa4..59940f08b15 100644 --- a/modules/swagger-codegen/src/main/resources/nodejs/swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/nodejs/swagger.mustache @@ -12,8 +12,9 @@ "paths": { {{#apis}} {{#operations}} - {{#operation}} + {{#operationsByPath}} "{{{path}}}": { + {{#operation}} "{{httpMethod}}": { "summary": "{{summary}}", "description":"{{notes}}", @@ -29,9 +30,10 @@ {{#hasMore}},{{/hasMore}} {{/responses}} } - } + } {{#hasMore}},{{/hasMore}} + {{/operation}} } {{#hasMore}},{{/hasMore}} - {{/operation}} + {{/operationsByPath}} {{#hasMore}},{{/hasMore}} {{/operations}} {{/apis}}