From 6ba9d94b7a73935119585c832c921ebe34882cfc Mon Sep 17 00:00:00 2001 From: Tatiana Fesenko Date: Thu, 20 Sep 2018 15:17:56 -0400 Subject: [PATCH 1/5] Add implementation of the API methods --- .../demo/springboot/OpenAPI2SpringBoot.java | 2 +- .../springboot/api/PetsApiController.java | 25 ------ .../demo/springboot/api/impl/PetsApiImpl.java | 84 +++++++++++++++++++ 3 files changed, 85 insertions(+), 26 deletions(-) delete mode 100644 Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiController.java create mode 100644 Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/impl/PetsApiImpl.java diff --git a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/OpenAPI2SpringBoot.java b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/OpenAPI2SpringBoot.java index 7b76ae9..1d3708a 100644 --- a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/OpenAPI2SpringBoot.java +++ b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/OpenAPI2SpringBoot.java @@ -7,7 +7,7 @@ import org.springframework.context.annotation.ComponentScan; @SpringBootApplication -@ComponentScan(basePackages = { "com.reprezen.demo.springboot", "com.reprezen.demo.springboot.api" , "com.reprezen.demo.springboot.swaggerui"}) +@ComponentScan(basePackages = { "com.reprezen.demo.springboot", "com.reprezen.demo.springboot.api" , "com.reprezen.demo.springboot.api.impl", "com.reprezen.demo.springboot.swaggerui"}) public class OpenAPI2SpringBoot implements CommandLineRunner { @Override diff --git a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiController.java b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiController.java deleted file mode 100644 index ab4ffc2..0000000 --- a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiController.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.reprezen.demo.springboot.api; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.context.request.NativeWebRequest; -import java.util.Optional; -@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2018-09-20T14:14:53.886-04:00[America/New_York]") - -@Controller -@RequestMapping("${openapi.swaggerPetstore.base-path:/api}") -public class PetsApiController implements PetsApi { - - private final NativeWebRequest request; - - @org.springframework.beans.factory.annotation.Autowired - public PetsApiController(NativeWebRequest request) { - this.request = request; - } - - @Override - public Optional getRequest() { - return Optional.ofNullable(request); - } - -} diff --git a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/impl/PetsApiImpl.java b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/impl/PetsApiImpl.java new file mode 100644 index 0000000..bc7784f --- /dev/null +++ b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/impl/PetsApiImpl.java @@ -0,0 +1,84 @@ +package com.reprezen.demo.springboot.api.impl; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +import javax.validation.Valid; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.context.request.NativeWebRequest; + +import com.google.common.collect.Maps; +import com.reprezen.demo.springboot.api.PetsApi; +import com.reprezen.demo.springboot.model.NewPet; +import com.reprezen.demo.springboot.model.Pet; + +import io.swagger.annotations.ApiParam; + +@Controller +@RequestMapping("${openapi.swaggerPetstore.base-path:/api}") +public class PetsApiImpl implements PetsApi { + + private final Map pets = Maps.newHashMap(); + private long nextId = 0l; + + private final NativeWebRequest request; + + @org.springframework.beans.factory.annotation.Autowired + public PetsApiImpl(NativeWebRequest request) { + this.request = request; + } + + @Override + public Optional getRequest() { + return Optional.ofNullable(request); + } + + @Override + public ResponseEntity addPet( + @ApiParam(value = "Pet to add to the store", required = true) @Valid @RequestBody NewPet newPet) { + Pet petToAdd = new Pet(); + petToAdd.id(nextId++).name(newPet.getName()).tag(newPet.getTag()); + pets.put(petToAdd.getId(), petToAdd); + return new ResponseEntity<>(petToAdd, HttpStatus.CREATED); + } + + @Override + public ResponseEntity deletePet( + @ApiParam(value = "ID of pet to delete", required = true) @PathVariable("id") Long id) { + if (!pets.containsKey(id)) { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + pets.remove(id); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Override + public ResponseEntity findPetById( + @ApiParam(value = "ID of pet to fetch", required = true) @PathVariable("id") Long id) { + if (!pets.containsKey(id)) { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + return new ResponseEntity<>(pets.get(id), HttpStatus.ACCEPTED); + } + + @Override + public ResponseEntity> findPets( + @ApiParam(value = "tags to filter by") @Valid @RequestParam(value = "tags", required = false) List tags, + @ApiParam(value = "maximum number of results to return") @Valid @RequestParam(value = "limit", required = false) Integer limitObject) { + int limit = limitObject == null ? Integer.MAX_VALUE : limitObject; + List filteredPets = pets.values().stream()// + .filter(pet -> (tags == null || tags.isEmpty()) ? true : tags.contains(pet.getTag()))// + .limit(limit)// + .collect(Collectors.toList()); + return new ResponseEntity<>(filteredPets, HttpStatus.ACCEPTED); + } +} From da340beb1853ff50b26a4bf6988a5dedfbdc702c Mon Sep 17 00:00:00 2001 From: Tatiana Fesenko Date: Fri, 21 Sep 2018 14:15:14 -0400 Subject: [PATCH 2/5] Revert "Add implementation of the API methods" This reverts commit 6ba9d94b7a73935119585c832c921ebe34882cfc. --- .../demo/springboot/OpenAPI2SpringBoot.java | 2 +- .../springboot/api/PetsApiController.java | 25 ++++++ .../demo/springboot/api/impl/PetsApiImpl.java | 84 ------------------- 3 files changed, 26 insertions(+), 85 deletions(-) create mode 100644 Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiController.java delete mode 100644 Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/impl/PetsApiImpl.java diff --git a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/OpenAPI2SpringBoot.java b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/OpenAPI2SpringBoot.java index 1d3708a..7b76ae9 100644 --- a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/OpenAPI2SpringBoot.java +++ b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/OpenAPI2SpringBoot.java @@ -7,7 +7,7 @@ import org.springframework.context.annotation.ComponentScan; @SpringBootApplication -@ComponentScan(basePackages = { "com.reprezen.demo.springboot", "com.reprezen.demo.springboot.api" , "com.reprezen.demo.springboot.api.impl", "com.reprezen.demo.springboot.swaggerui"}) +@ComponentScan(basePackages = { "com.reprezen.demo.springboot", "com.reprezen.demo.springboot.api" , "com.reprezen.demo.springboot.swaggerui"}) public class OpenAPI2SpringBoot implements CommandLineRunner { @Override diff --git a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiController.java b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiController.java new file mode 100644 index 0000000..ab4ffc2 --- /dev/null +++ b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiController.java @@ -0,0 +1,25 @@ +package com.reprezen.demo.springboot.api; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.context.request.NativeWebRequest; +import java.util.Optional; +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2018-09-20T14:14:53.886-04:00[America/New_York]") + +@Controller +@RequestMapping("${openapi.swaggerPetstore.base-path:/api}") +public class PetsApiController implements PetsApi { + + private final NativeWebRequest request; + + @org.springframework.beans.factory.annotation.Autowired + public PetsApiController(NativeWebRequest request) { + this.request = request; + } + + @Override + public Optional getRequest() { + return Optional.ofNullable(request); + } + +} diff --git a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/impl/PetsApiImpl.java b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/impl/PetsApiImpl.java deleted file mode 100644 index bc7784f..0000000 --- a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/impl/PetsApiImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.reprezen.demo.springboot.api.impl; - -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; - -import javax.validation.Valid; - -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.context.request.NativeWebRequest; - -import com.google.common.collect.Maps; -import com.reprezen.demo.springboot.api.PetsApi; -import com.reprezen.demo.springboot.model.NewPet; -import com.reprezen.demo.springboot.model.Pet; - -import io.swagger.annotations.ApiParam; - -@Controller -@RequestMapping("${openapi.swaggerPetstore.base-path:/api}") -public class PetsApiImpl implements PetsApi { - - private final Map pets = Maps.newHashMap(); - private long nextId = 0l; - - private final NativeWebRequest request; - - @org.springframework.beans.factory.annotation.Autowired - public PetsApiImpl(NativeWebRequest request) { - this.request = request; - } - - @Override - public Optional getRequest() { - return Optional.ofNullable(request); - } - - @Override - public ResponseEntity addPet( - @ApiParam(value = "Pet to add to the store", required = true) @Valid @RequestBody NewPet newPet) { - Pet petToAdd = new Pet(); - petToAdd.id(nextId++).name(newPet.getName()).tag(newPet.getTag()); - pets.put(petToAdd.getId(), petToAdd); - return new ResponseEntity<>(petToAdd, HttpStatus.CREATED); - } - - @Override - public ResponseEntity deletePet( - @ApiParam(value = "ID of pet to delete", required = true) @PathVariable("id") Long id) { - if (!pets.containsKey(id)) { - return new ResponseEntity<>(HttpStatus.NOT_FOUND); - } - pets.remove(id); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Override - public ResponseEntity findPetById( - @ApiParam(value = "ID of pet to fetch", required = true) @PathVariable("id") Long id) { - if (!pets.containsKey(id)) { - return new ResponseEntity<>(HttpStatus.NOT_FOUND); - } - return new ResponseEntity<>(pets.get(id), HttpStatus.ACCEPTED); - } - - @Override - public ResponseEntity> findPets( - @ApiParam(value = "tags to filter by") @Valid @RequestParam(value = "tags", required = false) List tags, - @ApiParam(value = "maximum number of results to return") @Valid @RequestParam(value = "limit", required = false) Integer limitObject) { - int limit = limitObject == null ? Integer.MAX_VALUE : limitObject; - List filteredPets = pets.values().stream()// - .filter(pet -> (tags == null || tags.isEmpty()) ? true : tags.contains(pet.getTag()))// - .limit(limit)// - .collect(Collectors.toList()); - return new ResponseEntity<>(filteredPets, HttpStatus.ACCEPTED); - } -} From 462c47c02a8fc1abfbedc98cfe94b5be3c31cd2c Mon Sep 17 00:00:00 2001 From: Tatiana Fesenko Date: Mon, 24 Sep 2018 10:12:57 -0400 Subject: [PATCH 3/5] Customize generated pom.xml: use Java 8 * Java 7 is generated because we don't need default method implementations * Added pom.xml to `.openapi-generator-ignore` so it won't we overwritten during next codegen .See https://github.com/OpenAPITools/openapi-generator/blob/master/docs/customization.md#ignore-file-format --- .../springboot-petstore-demo/.openapi-generator-ignore | 4 ++++ .../implementation/springboot-petstore-demo/pom.xml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/.openapi-generator-ignore b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/.openapi-generator-ignore index 7484ee5..ad2c7c2 100644 --- a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/.openapi-generator-ignore +++ b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/.openapi-generator-ignore @@ -21,3 +21,7 @@ #docs/*.md # Then explicitly reverse the ignore rule for a single file: #!docs/README.md + + +# We customize Java version and may add dependencies +pom.xml \ No newline at end of file diff --git a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/pom.xml b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/pom.xml index 10cac49..d8c671a 100644 --- a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/pom.xml +++ b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/pom.xml @@ -6,7 +6,7 @@ petstore-demo 1.0.0 - 1.7 + 1.8 ${java.version} ${java.version} 2.8.0 From b416f668d0da1880c2337eb2dd2759e930368a28 Mon Sep 17 00:00:00 2001 From: Tatiana Fesenko Date: Mon, 24 Sep 2018 10:15:00 -0400 Subject: [PATCH 4/5] Add a simple implementation of PetsApiDelegate --- .../springboot/api/PetsApiDelegateImpl.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiDelegateImpl.java diff --git a/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiDelegateImpl.java b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiDelegateImpl.java new file mode 100644 index 0000000..213fcf0 --- /dev/null +++ b/Expanded Pet Store (v3)/implementation/springboot-petstore-demo/src/main/java/com/reprezen/demo/springboot/api/PetsApiDelegateImpl.java @@ -0,0 +1,57 @@ +package com.reprezen.demo.springboot.api; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import com.google.common.collect.Maps; +import com.reprezen.demo.springboot.api.PetsApiDelegate; +import com.reprezen.demo.springboot.model.NewPet; +import com.reprezen.demo.springboot.model.Pet; + +@Service +public class PetsApiDelegateImpl implements PetsApiDelegate { + + private final Map pets = Maps.newHashMap(); + private long nextId = 0l; + + @Override + public ResponseEntity addPet(NewPet newPet) { + Pet petToAdd = new Pet(); + petToAdd.id(nextId++).name(newPet.getName()).tag(newPet.getTag()); + pets.put(petToAdd.getId(), petToAdd); + return new ResponseEntity<>(petToAdd, HttpStatus.CREATED); + } + + @Override + public ResponseEntity deletePet(Long id) { + if (!pets.containsKey(id)) { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + pets.remove(id); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Override + public ResponseEntity findPetById(Long id) { + if (!pets.containsKey(id)) { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + return new ResponseEntity<>(pets.get(id), HttpStatus.ACCEPTED); + } + + @Override + public ResponseEntity> findPets(List tags, Integer limitObject) { + int limit = limitObject == null ? Integer.MAX_VALUE : limitObject; + List filteredPets = pets.values().stream()// + .filter(pet -> (tags == null || tags.isEmpty()) ? true : tags.contains(pet.getTag()))// + .limit(limit)// + .collect(Collectors.toList()); + return new ResponseEntity<>(filteredPets, HttpStatus.ACCEPTED); + } + +} From 889d3f188b29868c1244c742649148cc4298cb9f Mon Sep 17 00:00:00 2001 From: Tatiana Fesenko Date: Mon, 24 Sep 2018 10:16:48 -0400 Subject: [PATCH 5/5] Use OpenAPI Generator 3.2.3 Updated pom.xml to use https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.2.3 --- Expanded Pet Store (v3)/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Expanded Pet Store (v3)/pom.xml b/Expanded Pet Store (v3)/pom.xml index f1ea45e..41070ed 100644 --- a/Expanded Pet Store (v3)/pom.xml +++ b/Expanded Pet Store (v3)/pom.xml @@ -29,6 +29,11 @@ com.modelsolv.reprezen.generators.standard ${reprezen.version} + + org.openapitools + openapi-generator + 3.2.3 +