diff --git a/samples/server-generator/scalatra/ScalatraServerGenerator.scala b/samples/server-generator/scalatra/ScalatraServerGenerator.scala new file mode 100644 index 00000000000..4f11646f44c --- /dev/null +++ b/samples/server-generator/scalatra/ScalatraServerGenerator.scala @@ -0,0 +1,75 @@ +/** + * Copyright 2012 Wordnik, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import com.wordnik.swagger.codegen.BasicScalaGenerator + +import com.wordnik.swagger.core._ + +import scala.collection.mutable.{ HashMap, ListBuffer } + +object ScalatraServerGenerator extends BasicScalaGenerator { + def main(args: Array[String]) = generateClient(args) + + override def templateDir = "samples/server-generator/scalatra/templates" + + val outputFolder = "samples/server-generator/scalatra/output" + + // where to write generated code + override def destinationDir = outputFolder + "/src/main/scala" + + override def modelPackage = Some("com.wordnik.client.model") + + // template used for apis + apiTemplateFiles ++= Map("api.mustache" -> ".scala") + + modelTemplateFiles ++= Map("model.mustache" -> ".scala") + + override def apiPackage = Some("apis") + + // supporting classes + override def supportingFiles = List( + ("README.mustache", outputFolder, "README.md"), + ("build.sbt", outputFolder, "build.sbt"), + ("JsonUtil.scala", destinationDir, "JsonUtil.scala"), + ("project/build.properties", outputFolder, "project/build.properties"), + ("project/plugins.sbt", outputFolder, "project/plugins.sbt")) + + def processApiMap(m: Map[String, AnyRef]): Map[String, AnyRef] = { + val mutable = scala.collection.mutable.Map() ++ m + + mutable.map(k => { + k._1 match { + // the scalatra templates like lower-case httpMethods + case e: String if (e == "httpMethod") => mutable += "httpMethod" -> k._2.toString.toLowerCase + // convert path into ruby-ish syntax (i.e. /pet.{format}/{petId} => /:petId + case e: String if (e == "path") => { + val path = { + val arr = k._2.toString.split("/") + if (arr.length >= 2) + "/" + arr.slice(2, arr.length).mkString("", "/", "") + else + k._2.toString + } + // rip out the root path + + mutable += "path" -> path.replaceAll("\\{", ":").replaceAll("\\}", "") + } + case _ => + } + }) + mutable.toMap + } +} diff --git a/samples/server-generator/scalatra/output/README.md b/samples/server-generator/scalatra/output/README.md new file mode 100644 index 00000000000..45d023e4da6 --- /dev/null +++ b/samples/server-generator/scalatra/output/README.md @@ -0,0 +1,10 @@ +# Swagger generated server + +## Overview +This server was generated by the [swagger-codegen](https://github.com/wordnik/swagger-codegen) project. By using the +[swagger-spec](https://github.com/wordnik/swagger-core/wiki) from a remote server, you can easily generate a server stub. This +is an example of building a swagger-enabled scalatra server. + +This example uses the [scalatra](http://scalatra.org/) framework. To see how to make this your own, look here: + +[README](https://github.com/wordnik/swagger-codegen/tree/master/samples/server-generator/scalatra) diff --git a/samples/server-generator/scalatra/output/build.sbt b/samples/server-generator/scalatra/output/build.sbt new file mode 100644 index 00000000000..3f44be6372b --- /dev/null +++ b/samples/server-generator/scalatra/output/build.sbt @@ -0,0 +1,31 @@ +organization := "com.wordnik" + +name := "swagger-scalatra-server" + +version := "0.1.0-SNAPSHOT" + +scalaVersion := "2.9.1" + +scalaSource in Compile <<= baseDirectory.identity + +seq(webSettings :_*) + +libraryDependencies ++= Seq( + "com.fasterxml.jackson.module" % "jackson-module-scala" % "2.0.0" % "compile;container;test;runtime", + "org.scalatra" % "scalatra" % "2.1.0.M2", + "org.scalatra" % "scalatra-scalate" % "2.1.0.M2", + "org.scalatra" % "scalatra-specs2" % "2.1.0.M2" % "test", + "org.scalatra" % "scalatra-swagger" % "2.1.0.M2", + "com.wordnik" %% "swagger-core" % "1.1.0", + "ch.qos.logback" % "logback-classic" % "1.0.0" % "runtime", + "org.eclipse.jetty" % "jetty-server" % "8.1.3.v20120416" % "compile;container;test;runtime", + "org.eclipse.jetty" % "jetty-servlet" % "8.1.3.v20120416" % "compile;container;test;runtime", + "org.eclipse.jetty" % "jetty-webapp" % "8.1.3.v20120416" % "compile;container;test;runtime", + "javax.servlet" % "javax.servlet-api" % "3.0.1" % "provided;container;test;runtime" +) + +resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" + +ivyXML := + + \ No newline at end of file diff --git a/samples/server-generator/scalatra/output/project/build.properties b/samples/server-generator/scalatra/output/project/build.properties new file mode 100644 index 00000000000..d4287112c6a --- /dev/null +++ b/samples/server-generator/scalatra/output/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.11.3 diff --git a/samples/server-generator/scalatra/output/project/plugins.sbt b/samples/server-generator/scalatra/output/project/plugins.sbt new file mode 100644 index 00000000000..e724c6c54d2 --- /dev/null +++ b/samples/server-generator/scalatra/output/project/plugins.sbt @@ -0,0 +1 @@ +libraryDependencies <+= sbtVersion(v => "com.github.siasia" %% "xsbt-web-plugin" % (v+"-0.2.11.1")) diff --git a/samples/server-generator/scalatra/output/project/project/target/config-classes/$6b785b3ab2a645ef6fe1$$anonfun$$sbtdef$1.class b/samples/server-generator/scalatra/output/project/project/target/config-classes/$6b785b3ab2a645ef6fe1$$anonfun$$sbtdef$1.class new file mode 100644 index 00000000000..bddf98babf1 Binary files /dev/null and b/samples/server-generator/scalatra/output/project/project/target/config-classes/$6b785b3ab2a645ef6fe1$$anonfun$$sbtdef$1.class differ diff --git a/samples/server-generator/scalatra/output/project/project/target/config-classes/$6b785b3ab2a645ef6fe1$.class b/samples/server-generator/scalatra/output/project/project/target/config-classes/$6b785b3ab2a645ef6fe1$.class new file mode 100644 index 00000000000..5bb639c21e4 Binary files /dev/null and b/samples/server-generator/scalatra/output/project/project/target/config-classes/$6b785b3ab2a645ef6fe1$.class differ diff --git a/samples/server-generator/scalatra/output/project/project/target/config-classes/$6b785b3ab2a645ef6fe1.class b/samples/server-generator/scalatra/output/project/project/target/config-classes/$6b785b3ab2a645ef6fe1.class new file mode 100644 index 00000000000..56c402fe468 Binary files /dev/null and b/samples/server-generator/scalatra/output/project/project/target/config-classes/$6b785b3ab2a645ef6fe1.class differ diff --git a/samples/server-generator/scalatra/output/src/main/scala/JsonUtil.scala b/samples/server-generator/scalatra/output/src/main/scala/JsonUtil.scala new file mode 100644 index 00000000000..691a82f563b --- /dev/null +++ b/samples/server-generator/scalatra/output/src/main/scala/JsonUtil.scala @@ -0,0 +1,12 @@ +package json + +import com.fasterxml.jackson.module.scala.DefaultScalaModule +import com.fasterxml.jackson.core.JsonGenerator.Feature +import com.fasterxml.jackson.databind._ + +object JsonUtil { + val mapper = new ObjectMapper() + mapper.registerModule(new DefaultScalaModule()) + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) +} \ No newline at end of file diff --git a/samples/server-generator/scalatra/output/src/main/scala/apis/PetApi.scala b/samples/server-generator/scalatra/output/src/main/scala/apis/PetApi.scala new file mode 100644 index 00000000000..707f3c42675 --- /dev/null +++ b/samples/server-generator/scalatra/output/src/main/scala/apis/PetApi.scala @@ -0,0 +1,100 @@ +package apis + +import json.JsonUtil +import com.wordnik.swagger.core.ApiPropertiesReader +import com.wordnik.client.model.Pet +import org.scalatra.ScalatraServlet +import org.scalatra.swagger._ + +import scala.collection.JavaConverters._ + +class PetApi (implicit val swagger: Swagger) extends ScalatraServlet with SwaggerBase with SwaggerSupport { + protected def buildFullUrl(path: String) = "http://petstore.swagger.wordnik.com/api/%s" format path + +// val data = new PetData + val m = JsonUtil.mapper + +// models = Map(swaggerToModel(classOf[Pet])) + + get("/:petId", + summary("Find pet by ID"), + nickname("getPetById"), + responseClass("Pet"), + endpoint("{NOT SURE}"), + notes("Returns a pet based on ID"), + parameters( + // it's a path param + Parameter("petId", "ID of pet that needs to be fetched", + dataType = DataType.String, + paramType = ParamType.Path) + + )) { + } + + post("/", + summary("Add a new pet to the store"), + nickname("addPet"), + responseClass("void"), + endpoint("{NOT SURE}"), + notes(""), + parameters( + // it's a body param + Parameter("body", "Pet object that needs to be added to the store", + dataType = DataType("Pet"), + paramType = ParamType.Body) + + )) { + } + + put("/", + summary("Update an existing pet"), + nickname("updatePet"), + responseClass("void"), + endpoint("{NOT SURE}"), + notes(""), + parameters( + // it's a body param + Parameter("body", "Pet object that needs to be updated in the store", + dataType = DataType("Pet"), + paramType = ParamType.Body) + + )) { + } + + get("/findByStatus", + summary("Finds Pets by status"), + nickname("findPetsByStatus"), + responseClass("List[Pet]"), + endpoint("{NOT SURE}"), + notes("Multiple status values can be provided with comma seperated strings"), + parameters( + // it's a query param + Parameter("status", "Status values that need to be considered for filter", + paramType = ParamType.Query, + required = true, + allowMultiple = true, + allowableValues = "LIST[available,pending,sold]",defaultValue = Some("available"), + dataType = DataType("String")) + + )) { + } + + get("/findByTags", + summary("Finds Pets by tags"), + nickname("findPetsByTags"), + responseClass("List[Pet]"), + endpoint("{NOT SURE}"), + notes("Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing."), + parameters( + // it's a query param + Parameter("tags", "Tags to filter by", + paramType = ParamType.Query, + required = true, + allowMultiple = true, + defaultValue = None, + dataType = DataType("String")) + + )) { + } + + } diff --git a/samples/server-generator/scalatra/output/src/main/scala/apis/StoreApi.scala b/samples/server-generator/scalatra/output/src/main/scala/apis/StoreApi.scala new file mode 100644 index 00000000000..3b49da24296 --- /dev/null +++ b/samples/server-generator/scalatra/output/src/main/scala/apis/StoreApi.scala @@ -0,0 +1,64 @@ +package apis + +import json.JsonUtil +import com.wordnik.swagger.core.ApiPropertiesReader +import com.wordnik.client.model.Order +import org.scalatra.ScalatraServlet +import org.scalatra.swagger._ + +import scala.collection.JavaConverters._ + +class StoreApi (implicit val swagger: Swagger) extends ScalatraServlet with SwaggerBase with SwaggerSupport { + protected def buildFullUrl(path: String) = "http://petstore.swagger.wordnik.com/api/%s" format path + +// val data = new PetData + val m = JsonUtil.mapper + +// models = Map(swaggerToModel(classOf[Pet])) + + get("/order/:orderId", + summary("Find purchase order by ID"), + nickname("getOrderById"), + responseClass("Order"), + endpoint("{NOT SURE}"), + notes("For valid response try integer IDs with value <= 5. Anything above 5 or nonintegers will generate API errors"), + parameters( + // it's a path param + Parameter("orderId", "ID of pet that needs to be fetched", + dataType = DataType.String, + paramType = ParamType.Path) + + )) { + } + + delete("/order/:orderId", + summary("Delete purchase order by ID"), + nickname("deleteOrder"), + responseClass("void"), + endpoint("{NOT SURE}"), + notes("For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors"), + parameters( + // it's a path param + Parameter("orderId", "ID of the order that needs to be deleted", + dataType = DataType.String, + paramType = ParamType.Path) + + )) { + } + + post("/order", + summary("Place an order for a pet"), + nickname("placeOrder"), + responseClass("void"), + endpoint("{NOT SURE}"), + notes(""), + parameters( + // it's a body param + Parameter("body", "order placed for purchasing the pet", + dataType = DataType("Order"), + paramType = ParamType.Body) + + )) { + } + + } diff --git a/samples/server-generator/scalatra/output/src/main/scala/apis/UserApi.scala b/samples/server-generator/scalatra/output/src/main/scala/apis/UserApi.scala new file mode 100644 index 00000000000..21aefb59873 --- /dev/null +++ b/samples/server-generator/scalatra/output/src/main/scala/apis/UserApi.scala @@ -0,0 +1,154 @@ +package apis + +import json.JsonUtil +import com.wordnik.swagger.core.ApiPropertiesReader +import com.wordnik.client.model.User +import org.scalatra.ScalatraServlet +import org.scalatra.swagger._ + +import scala.collection.JavaConverters._ + +class UserApi (implicit val swagger: Swagger) extends ScalatraServlet with SwaggerBase with SwaggerSupport { + protected def buildFullUrl(path: String) = "http://petstore.swagger.wordnik.com/api/%s" format path + +// val data = new PetData + val m = JsonUtil.mapper + +// models = Map(swaggerToModel(classOf[Pet])) + + post("/createWithArray", + summary("Creates list of users with given input array"), + nickname("createUsersWithArrayInput"), + responseClass("void"), + endpoint("{NOT SURE}"), + notes(""), + parameters( + // it's a body param + Parameter("body", "List of user object", + dataType = DataType("Array[User]"), + paramType = ParamType.Body) + + )) { + } + + post("/", + summary("Create user"), + nickname("createUser"), + responseClass("void"), + endpoint("{NOT SURE}"), + notes("This can only be done by the logged in user."), + parameters( + // it's a body param + Parameter("body", "Created user object", + dataType = DataType("User"), + paramType = ParamType.Body) + + )) { + } + + post("/createWithList", + summary("Creates list of users with given list input"), + nickname("createUsersWithListInput"), + responseClass("void"), + endpoint("{NOT SURE}"), + notes(""), + parameters( + // it's a body param + Parameter("body", "List of user object", + dataType = DataType("List[User]"), + paramType = ParamType.Body) + + )) { + } + + put("/:username", + summary("Updated user"), + nickname("updateUser"), + responseClass("void"), + endpoint("{NOT SURE}"), + notes("This can only be done by the logged in user."), + parameters( + // it's a path param + Parameter("username", "name that need to be deleted", + dataType = DataType.String, + paramType = ParamType.Path) + // it's a body param + Parameter("username", "name that need to be deleted", + dataType = DataType("String"), + paramType = ParamType.Body) + , + // it's a body param + Parameter("body", "Updated user object", + dataType = DataType("User"), + paramType = ParamType.Body) + + )) { + } + + delete("/:username", + summary("Delete user"), + nickname("deleteUser"), + responseClass("void"), + endpoint("{NOT SURE}"), + notes("This can only be done by the logged in user."), + parameters( + // it's a path param + Parameter("username", "The name that needs to be deleted", + dataType = DataType.String, + paramType = ParamType.Path) + + )) { + } + + get("/:username", + summary("Get user by user name"), + nickname("getUserByName"), + responseClass("User"), + endpoint("{NOT SURE}"), + notes(""), + parameters( + // it's a path param + Parameter("username", "The name that needs to be fetched. Use user1 for testing.", + dataType = DataType.String, + paramType = ParamType.Path) + + )) { + } + + get("/login", + summary("Logs user into the system"), + nickname("loginUser"), + responseClass("String"), + endpoint("{NOT SURE}"), + notes(""), + parameters( + // it's a query param + Parameter("username", "The user name for login", + paramType = ParamType.Query, + required = true, + allowMultiple = false, + defaultValue = None, + dataType = DataType("String")) + , + // it's a query param + Parameter("password", "The password for login in clear text", + paramType = ParamType.Query, + required = true, + allowMultiple = false, + defaultValue = None, + dataType = DataType("String")) + + )) { + } + + get("/logout", + summary("Logs out current logged in user session"), + nickname("logoutUser"), + responseClass("void"), + endpoint("{NOT SURE}"), + notes(""), + parameters( + )) { + } + + } diff --git a/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Category.scala b/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Category.scala new file mode 100644 index 00000000000..d228211db04 --- /dev/null +++ b/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Category.scala @@ -0,0 +1,8 @@ +package com.wordnik.client.model + +import scala.reflect.BeanProperty + +case class Category ( + var id: Long, + var name: String) + diff --git a/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Order.scala b/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Order.scala new file mode 100644 index 00000000000..9019549a926 --- /dev/null +++ b/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Order.scala @@ -0,0 +1,13 @@ +package com.wordnik.client.model + +import java.util.Date +import scala.reflect.BeanProperty + +case class Order ( + var id: Long, + var petId: Long, + /* Order Status */ + var status: String, + var quantity: Int, + var shipDate: Date) + diff --git a/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Pet.scala b/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Pet.scala new file mode 100644 index 00000000000..ae192c948df --- /dev/null +++ b/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Pet.scala @@ -0,0 +1,15 @@ +package com.wordnik.client.model + +import com.wordnik.client.model.Category +import com.wordnik.client.model.Tag +import scala.reflect.BeanProperty + +case class Pet ( + var id: Long, + var tags: java.util.List[Tag], + var category: Category, + /* pet status in the store */ + var status: String, + var name: String, + var photoUrls: java.util.List[String]) + diff --git a/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Tag.scala b/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Tag.scala new file mode 100644 index 00000000000..f999be7ebf6 --- /dev/null +++ b/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/Tag.scala @@ -0,0 +1,8 @@ +package com.wordnik.client.model + +import scala.reflect.BeanProperty + +case class Tag ( + var id: Long, + var name: String) + diff --git a/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/User.scala b/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/User.scala new file mode 100644 index 00000000000..6e905256bff --- /dev/null +++ b/samples/server-generator/scalatra/output/src/main/scala/com/wordnik/client/model/User.scala @@ -0,0 +1,15 @@ +package com.wordnik.client.model + +import scala.reflect.BeanProperty + +case class User ( + var id: Long, + var lastName: String, + var username: String, + var phone: String, + var email: String, + /* User Status */ + var userStatus: Int, + var firstName: String, + var password: String) + diff --git a/samples/server-generator/scalatra/templates/JsonUtil.scala b/samples/server-generator/scalatra/templates/JsonUtil.scala new file mode 100644 index 00000000000..691a82f563b --- /dev/null +++ b/samples/server-generator/scalatra/templates/JsonUtil.scala @@ -0,0 +1,12 @@ +package json + +import com.fasterxml.jackson.module.scala.DefaultScalaModule +import com.fasterxml.jackson.core.JsonGenerator.Feature +import com.fasterxml.jackson.databind._ + +object JsonUtil { + val mapper = new ObjectMapper() + mapper.registerModule(new DefaultScalaModule()) + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) +} \ No newline at end of file diff --git a/samples/server-generator/scalatra/templates/README.mustache b/samples/server-generator/scalatra/templates/README.mustache new file mode 100644 index 00000000000..f8a560b776f --- /dev/null +++ b/samples/server-generator/scalatra/templates/README.mustache @@ -0,0 +1,10 @@ +# Swagger generated server + +## Overview +This server was generated by the [swagger-codegen](https://github.com/wordnik/swagger-codegen) project. By using the +[swagger-spec](https://github.com/wordnik/swagger-core/wiki) from a remote server, you can easily generate a server stub. This +is an example of building a swagger-enabled scalatra server. + +This example uses the [scalatra](http://scalatra.org/) framework. To see how to make this your own, look here: + +[README](https://github.com/wordnik/swagger-codegen/tree/master/samples/server-generator/scalatra) \ No newline at end of file diff --git a/samples/server-generator/scalatra/templates/api.mustache b/samples/server-generator/scalatra/templates/api.mustache new file mode 100644 index 00000000000..9c9e8ba9529 --- /dev/null +++ b/samples/server-generator/scalatra/templates/api.mustache @@ -0,0 +1,65 @@ +package {{package}} + +import json.JsonUtil +import com.wordnik.swagger.core.ApiPropertiesReader +{{#imports}}import {{import}} +{{/imports}} +import org.scalatra.ScalatraServlet +import org.scalatra.swagger._ + +import scala.collection.JavaConverters._ + +class {{name}} (implicit val swagger: Swagger) extends ScalatraServlet with SwaggerBase with SwaggerSupport { + protected def buildFullUrl(path: String) = "{{basePath}}/%s" format path + +// val data = new PetData + val m = JsonUtil.mapper + +// models = Map(swaggerToModel(classOf[Pet])) + + {{#operations}} + {{#operation}} + {{httpMethod}}("{{path}}", + summary("{{{summary}}}"), + nickname("{{nickname}}"), + responseClass("{{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}void{{/returnType}}"), + endpoint("{NOT SURE}"), + notes("{{{notes}}}"), + parameters( + {{#allParams}} + {{#queryParam}} + // it's a query param + Parameter("{{paramName}}", "{{{description}}}", + paramType = ParamType.Query, + required = {{required}}, + allowMultiple = {{allowMultiple}}, + {{#allowableValues}}allowableValues = "{{{allowableValues}}}",{{/allowableValues}} + defaultValue = {{#defaultValue}}Some({{{defaultValue}}}){{/defaultValue}}{{^defaultValue}}None{{/defaultValue}}, + dataType = DataType("{{dataType}}")) + {{/queryParam}} + {{#pathParam}} + // it's a path param + Parameter("{{paramName}}", "{{{description}}}", + dataType = DataType.String, + paramType = ParamType.Path) + {{/pathParam}} + {{#headerParam}} + // it's a header param + Parameter("{{paramName}}", "{{{description}}}", + dataType = DataType("{{dataType}}"), + paramType = ParamType.Header) + {{/headerParam}} + {{#bodyParam}} + // it's a body param + Parameter("{{paramName}}", "{{{description}}}", + dataType = DataType("{{dataType}}"), + paramType = ParamType.Body) + {{/bodyParam}} + {{#hasMore}},{{/hasMore}}{{newline}} + {{/allParams}} + )) { + } + + {{/operation}} + {{/operations}} +} \ No newline at end of file diff --git a/samples/server-generator/scalatra/templates/build.sbt b/samples/server-generator/scalatra/templates/build.sbt new file mode 100644 index 00000000000..3f44be6372b --- /dev/null +++ b/samples/server-generator/scalatra/templates/build.sbt @@ -0,0 +1,31 @@ +organization := "com.wordnik" + +name := "swagger-scalatra-server" + +version := "0.1.0-SNAPSHOT" + +scalaVersion := "2.9.1" + +scalaSource in Compile <<= baseDirectory.identity + +seq(webSettings :_*) + +libraryDependencies ++= Seq( + "com.fasterxml.jackson.module" % "jackson-module-scala" % "2.0.0" % "compile;container;test;runtime", + "org.scalatra" % "scalatra" % "2.1.0.M2", + "org.scalatra" % "scalatra-scalate" % "2.1.0.M2", + "org.scalatra" % "scalatra-specs2" % "2.1.0.M2" % "test", + "org.scalatra" % "scalatra-swagger" % "2.1.0.M2", + "com.wordnik" %% "swagger-core" % "1.1.0", + "ch.qos.logback" % "logback-classic" % "1.0.0" % "runtime", + "org.eclipse.jetty" % "jetty-server" % "8.1.3.v20120416" % "compile;container;test;runtime", + "org.eclipse.jetty" % "jetty-servlet" % "8.1.3.v20120416" % "compile;container;test;runtime", + "org.eclipse.jetty" % "jetty-webapp" % "8.1.3.v20120416" % "compile;container;test;runtime", + "javax.servlet" % "javax.servlet-api" % "3.0.1" % "provided;container;test;runtime" +) + +resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" + +ivyXML := + + \ No newline at end of file diff --git a/samples/server-generator/scalatra/templates/main.mustache b/samples/server-generator/scalatra/templates/main.mustache new file mode 100644 index 00000000000..36f0b5f20b8 --- /dev/null +++ b/samples/server-generator/scalatra/templates/main.mustache @@ -0,0 +1,27 @@ +var express = require("express") + , url = require("url") + , swagger = require("./Common/node/swagger.js") + , db = false + +var app = express.createServer( + function(req, res, next) { if (req.db === undefined) { req.db = db; } next(); }); +app.use(express.bodyParser()); +swagger.setAppHandler(app); + +// resources for the demo +{{#apis}} +var {{name}} = require("./apis/{{name}}.js"); +{{/apis}} + +swagger.addModels(models) + {{#apis}} + {{#operations}} + {{#operation}}.add{{httpMethod}}({{name}}.{{nickname}}){{/operation}}{{newline}} + {{/operations}} + {{/apis}}; + +// configures the app +swagger.configure("http://localhost:8002", "0.1"); + +// start the server +app.listen(8002); diff --git a/samples/server-generator/scalatra/templates/model.mustache b/samples/server-generator/scalatra/templates/model.mustache new file mode 100644 index 00000000000..6179beabf6c --- /dev/null +++ b/samples/server-generator/scalatra/templates/model.mustache @@ -0,0 +1,21 @@ +package {{package}} + +{{#imports}}import {{import}} +{{/imports}} + +{{#models}} +import scala.reflect.BeanProperty + +{{#model}} +case class {{classname}} ( + {{#vars}} + + {{#notes}}/* {{notes}} */ + {{/notes}} + {{#description}}/* {{description}} */ + {{/description}} + var {{name}}: {{datatype}}{{#hasMore}},{{newline}} {{/hasMore}} + {{/vars}} +) +{{/model}} +{{/models}} \ No newline at end of file diff --git a/samples/server-generator/scalatra/templates/package.json b/samples/server-generator/scalatra/templates/package.json new file mode 100755 index 00000000000..871f6a5c3ff --- /dev/null +++ b/samples/server-generator/scalatra/templates/package.json @@ -0,0 +1,17 @@ +{ + "name": "sample-app", + "description": "Wordnik node.js server generator", + "version": "1.0.0", + "homepage": "https://github.com/wordnik/swagger-codegen", + "main": "./Common/node/swagger.js", + "directories": { + "lib": "./Common/node" + }, + "engines": { + "node": ">= 0.8.x" + }, + "dependencies": { + "connect": ">= 1.8.x", + "express": "3.x" + } +} diff --git a/samples/server-generator/scalatra/templates/project/build.properties b/samples/server-generator/scalatra/templates/project/build.properties new file mode 100644 index 00000000000..d4287112c6a --- /dev/null +++ b/samples/server-generator/scalatra/templates/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.11.3 diff --git a/samples/server-generator/scalatra/templates/project/plugins.sbt b/samples/server-generator/scalatra/templates/project/plugins.sbt new file mode 100644 index 00000000000..e724c6c54d2 --- /dev/null +++ b/samples/server-generator/scalatra/templates/project/plugins.sbt @@ -0,0 +1 @@ +libraryDependencies <+= sbtVersion(v => "com.github.siasia" %% "xsbt-web-plugin" % (v+"-0.2.11.1"))