diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..953de0b --- /dev/null +++ b/.classpath @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/.project b/.project new file mode 100644 index 0000000..467251e --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + blueprint-converter + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..ec4300d --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..b5eb42b --- /dev/null +++ b/pom.xml @@ -0,0 +1,44 @@ + + 4.0.0 + + de.taimos + standalone-parent + 1-SNAPSHOT + + org.restdoc.blueprint + blueprint-converter + 0.1-SNAPSHOT + RestDoc to Blueprint converter + + org.restdoc.blueprint.converter.Starter + + + scm:git:git@github.com:taimos/velocity-cli.git + scm:git:git@github.com:taimos/velocity-cli.git + scm:git:git@github.com:taimos/velocity-cli.git + HEAD + + + + org.apache.velocity + velocity + 1.7 + + + org.apache.velocity + velocity-tools + 2.0 + + + de.taimos + httputils + 1.7 + + + org.restdoc + restdoc-api + 1.4 + + + \ No newline at end of file diff --git a/src/main/java/.gitkeep b/src/main/java/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/org/restdoc/blueprint/converter/Starter.java b/src/main/java/org/restdoc/blueprint/converter/Starter.java new file mode 100644 index 0000000..4c84ee5 --- /dev/null +++ b/src/main/java/org/restdoc/blueprint/converter/Starter.java @@ -0,0 +1,66 @@ +package org.restdoc.blueprint.converter; + +import java.io.FileWriter; +import java.io.IOException; + +import org.apache.commons.lang.CharEncoding; +import org.apache.http.HttpResponse; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.apache.velocity.runtime.RuntimeConstants; +import org.apache.velocity.tools.generic.DateTool; +import org.apache.velocity.tools.generic.MathTool; +import org.restdoc.api.RestDoc; +import org.restdoc.api.util.RestDocParser; + +import de.taimos.httputils.WS; + +/** + * Copyright 2014 Hoegernet
+ *
+ * + * @author Thorsten Hoeger + * + */ +public class Starter { + + public static void main(String[] args) throws IOException { + if (args.length != 1) { + System.err.println("usage: restdoc2blueprint "); + } + String url = args[0]; + + RestDoc doc = Starter.fetchDoc(url); + + Velocity.setProperty(RuntimeConstants.RESOURCE_LOADER, "class"); + Velocity.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + Velocity.init(); + VelocityContext context = new VelocityContext(); + context.put("mathTool", new MathTool()); + context.put("dateTool", new DateTool()); + context.put("rd", doc); + + Template template = Velocity.getTemplate("velocity/blueprint.vm", CharEncoding.UTF_8); + + // try (OutputStreamWriter out = new OutputStreamWriter(System.out, CharEncoding.UTF_8);) { + // template.merge(context, out); + // } catch (IOException e) { + // e.printStackTrace(); + // } + try (FileWriter out = new FileWriter("blueprint.md");) { + template.merge(context, out); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static RestDoc fetchDoc(String url) throws IOException { + HttpResponse res = WS.url(url).options(); + if (WS.isStatusOK(res)) { + String string = WS.getResponseAsString(res); + return RestDocParser.parseString(string); + } + throw new IOException("invalid HTTP code: " + WS.getStatus(res)); + } +} diff --git a/src/main/resources/.gitkeep b/src/main/resources/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/velocity/blueprint.vm b/src/main/resources/velocity/blueprint.vm new file mode 100644 index 0000000..f66e608 --- /dev/null +++ b/src/main/resources/velocity/blueprint.vm @@ -0,0 +1,35 @@ +#set( $H = '#' ) + +#foreach($resource in ${rd.resources}) +$H #if (${resource.id}) ${resource.id} [${resource.path}]#else ${resource.path} #end + +$!{resource.description} + +Parameter: +#foreach($param in ${resource.params.entrySet()}) +${param.key} - ${param.value.description} #if(${param.value.validations.size()} > 0)(#foreach($validation in ${param.value.validations})$validation#end)#end + +#end + +#foreach($method in ${resource.methods.entrySet()}) +$H$H #if (${method.value.description}) ${method.value.description} [$method.key]#else ${method.key} #end + +Header: +#foreach($header in ${method.value.headers.entrySet()}) +${header.key} #if(${header.required}) (required)#end: ${header.description} + +#end + +Body: +#foreach($accept in ${method.value.accepts}) +- ${accept.schema} (${accept.type}) + +#end + +#foreach($status in ${method.value.statusCodes.entrySet()}) ++ Response ${status.key} +#end + +#end ##method + +#end ##resource diff --git a/src/test/java/.gitkeep b/src/test/java/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/.gitkeep b/src/test/resources/.gitkeep new file mode 100644 index 0000000..e69de29