diff --git a/pom.xml b/pom.xml index b8f142e..023925c 100644 --- a/pom.xml +++ b/pom.xml @@ -109,6 +109,14 @@ 1.4.200 runtime + + + + org.junit.jupiter + junit-jupiter-api + 5.11.4 + test + diff --git a/preflist.geojson b/preflist.geojson index 5e86e5d..7dd7e44 100644 --- a/preflist.geojson +++ b/preflist.geojson @@ -1,4 +1,5 @@ -{"type":"FeatureCollection","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}},"features":[{"type":"Feature","properties":{"name":"北海道","id":"1"},"geometry":{"coordinates":[143.35,43.479],"type":"Point"}} +{"type":"FeatureCollection","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}},"features":[ +{"type":"Feature","properties":{"name":"北海道","id":"1"},"geometry":{"coordinates":[143.35,43.479],"type":"Point"}} ,{"type":"Feature","properties":{"name":"青森県","id":"2"},"geometry":{"coordinates":[140.609,40.907],"type":"Point"}} ,{"type":"Feature","properties":{"name":"岩手県","id":"3"},"geometry":{"coordinates":[141.559,39.65],"type":"Point"}} ,{"type":"Feature","properties":{"name":"宮城県","id":"4"},"geometry":{"coordinates":[141.29,38.387],"type":"Point"}} diff --git a/src/main/java/osm/surveyor/task/index/IndexController.java b/src/main/java/osm/surveyor/task/index/IndexController.java index f6bcd89..512973d 100644 --- a/src/main/java/osm/surveyor/task/index/IndexController.java +++ b/src/main/java/osm/surveyor/task/index/IndexController.java @@ -1,5 +1,6 @@ package osm.surveyor.task.index; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -9,10 +10,11 @@ @RestController public class IndexController { + @Value("${task-bldg.osm-data.url}") + private String url; @GetMapping("/index") public String index() { - String url = "http://surveyor.mydns.jp/osm-data"; try { RestTemplate restTemplate = new RestTemplate(); System.out.println(String.format("INFO: httpGet(%s)", url)); diff --git a/src/main/java/osm/surveyor/task/plateau/PlateauController.java b/src/main/java/osm/surveyor/task/plateau/PlateauController.java new file mode 100644 index 0000000..6f6533a --- /dev/null +++ b/src/main/java/osm/surveyor/task/plateau/PlateauController.java @@ -0,0 +1,62 @@ +package osm.surveyor.task.plateau; + +import java.nio.file.*; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.PathResource; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +@RestController +public class PlateauController { + @Value("${task-bldg.osm-data.url}") + private String url; // task-bldg.osm-data.url=http://surveyor.mydns.jp/osm-data + + @Value("${task-bldg.plateau.dir}") + private String dir; // task-bldg.plateau.dir=plateau-data + + @GetMapping(value = "/plateau/{citycode}}") + public String getPlateau(@PathVariable("citycode") String citycode) throws Exception { + try { + Path base = Path.of(dir); + if (Files.exists(base)) { + Files.createDirectory(base); + } + Path city = Path.of(dir, citycode); + if (Files.exists(city)) { + Files.createDirectory(city); + } + return "OK"; + } + catch (Exception e) { + return e.toString(); + } + + /* + Path path = Path.of(dir.toString(), fileName); + PathResource resource = new PathResource(path); + + try { + RestTemplate restTemplate = new RestTemplate(); + System.out.println(String.format("INFO: httpGet(%s)", url)); + ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, null, String.class); + HttpStatus httpStatus = response.getStatusCode(); + if (httpStatus.isError()) { + System.out.println("ERROE: Can not access '"+ url +"'"); + throw new Exception("ERROE: Can not access '"+ url +"'"); + } + String body = response.getBody(); + return body; + } + catch (Exception e) { + return e.toString(); + } + */ + } +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index fa850cd..060effe 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -17,3 +17,7 @@ spring.h2.console.settings.web-allow-others=true spring.jpa.show-sql=false spring.jpa.hibernate.ddl-auto=update + +# task-bldg orignal properties +task-bldg.osm-data.url=http://surveyor.mydns.jp/osm-data +task-bldg.plateau.dir=plateau-data diff --git a/src/test/java/osm/surveyor/task/plateau/PlateauControllerTest.java b/src/test/java/osm/surveyor/task/plateau/PlateauControllerTest.java new file mode 100644 index 0000000..81852a4 --- /dev/null +++ b/src/test/java/osm/surveyor/task/plateau/PlateauControllerTest.java @@ -0,0 +1,75 @@ +package osm.surveyor.task.plateau; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.client.AutoConfigureWebClient; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.HttpHeaders; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.util.FileSystemUtils; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +@SpringBootTest +@WebMvcTest(PlateauController.class) +class PlateauControllerTest { + + @Autowired + private MockMvc mvc; + private final String rootUrl = "/plateau"; + private static final String dirStr = "plateau-data"; // task-bldg.plateau.dir=plateau-data + + @BeforeAll + static void setUpBeforeClass() throws Exception { + Path dir = Path.of(dirStr); + FileSystemUtils.deleteRecursively(dir); + } + + @AfterAll + static void tearDownAfterClass() throws Exception { + } + + @BeforeEach + void setUp() throws Exception { + } + + @AfterEach + void tearDown() throws Exception { + } + + @Test + @DisplayName("'./plateau/01100' is Sapporo 2020") + void testGetPlateau() throws IOException { + String urlPath = "/01100"; + + MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(rootUrl + urlPath)) + .andExpect(status().isOk()) + .andExpect(content().json("OK")) + .andReturn(); + + Path base = Path.of(dirStr); + boolean exists = Files.exists(base); + assertThat(exists); + } +}