diff --git a/class.png b/class.png index 2dd839a..08eb192 100644 --- a/class.png +++ b/class.png Binary files differ diff --git a/class.pu b/class.pu index d2e39bb..5a78ca7 100644 --- a/class.pu +++ b/class.pu @@ -1,47 +1,51 @@ @startuml -class Mapper <> { - - id : Long - - osmid : String - - tasks : List -} -class Task <> { - - id : Long +database "h2" as db { + entity city { + citycode : String + cityname : String + path : String + lng : Double + lat : Double + } +} +note bottom of db : spring.datasource.url=jdbc:h2:mem:taskdb\nspring.jpa.hibernate.ddl-auto=none + +class City <> { + + id : Long - citycode : String - - meshcode : String - cityname : String - - mappers : List + - path : String + - lng : Double + - lat : Double } -note right : spring.datasource.url=jdbc:h2:mem:taskdb +City .. city -interface TaskRepository <> { +interface CityRepository <> { + findByCitycode(String) + deleteByCitycode(String) } -interface MapperRepository <> { -} - -class MapperController <> { - - repository : MapperRepository +class CityController <> { + - repository : CityRepository + showList(model) - + addMapper(mapper) - + process(mapper, result) - + editMapper(id, model) - + deleteMapper(id) + + addCity(city) + + process(city, result) + + editCity(id, model) + + deleteCity(id) } interface CommandLineRunner class DataLoader <> { - - repository : TaskRepository + - repository : CityRepository + run() } -TaskRepository <|-- Task -DataLoader *-- TaskRepository +CityRepository <|-- City +DataLoader *-- CityRepository CommandLineRunner <|-- DataLoader -Mapper .o Task -MapperRepository <|-- Mapper -MapperController *-- MapperRepository +CityController *-- CityRepository @enduml diff --git a/controller.png b/controller.png index b67a972..549f490 100644 --- a/controller.png +++ b/controller.png Binary files differ diff --git a/controller.pu b/controller.pu index efd3a21..d652a1a 100644 --- a/controller.pu +++ b/controller.pu @@ -3,20 +3,21 @@ [*] --> index : / state index { - state users - users : *{id} - users : *{osmid} - users : *{task.cityname} + state cities + cities : *{citycode} + cities : *{cityname} + cities : *{path} } state form { - state mapper { - mapper : osmid - mapper : task.cityname + state city { + city : citycode + city : cityname + city : path } } -index --> index : /delete/{id} -index --> form : /edit/{id} +index --> index : /delete/{citycode} +index --> form : /edit/{citycode} index --> form : /add form --> index : /process[!hasErrors] form --> form : /process[hasErrors] diff --git a/src/main/java/osm/surveyor/task/CityController.java b/src/main/java/osm/surveyor/task/CityController.java new file mode 100644 index 0000000..a4baace --- /dev/null +++ b/src/main/java/osm/surveyor/task/CityController.java @@ -0,0 +1,51 @@ +package osm.surveyor.task; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; + +import lombok.RequiredArgsConstructor; +import osm.surveyor.task.model.City; + +@RequiredArgsConstructor +@Controller +public class CityController { + private final CityRepository repository; + + @GetMapping("/") + public String showList(Model model) { + model.addAttribute("cities", repository.findAll()); + return "index"; + } + + @GetMapping("/add") + public String addCity(@ModelAttribute City city) { + return "form"; + } + + @PostMapping("/process") + public String process(@Validated @ModelAttribute City city, BindingResult result) { + if (result.hasErrors()) { + return "form"; + } + repository.save(city); + return "redirect:/"; + } + + @GetMapping("/edit/{id}") + public String editCity(@PathVariable Long id, Model model) { + model.addAttribute("city", repository.findById(id)); + return "form"; + } + + @GetMapping("/delete/{id}") + public String deleteCity(@PathVariable Long id) { + repository.deleteById(id); + return "redirect:/"; + } +} diff --git a/src/main/java/osm/surveyor/task/CityRepository.java b/src/main/java/osm/surveyor/task/CityRepository.java new file mode 100644 index 0000000..3145435 --- /dev/null +++ b/src/main/java/osm/surveyor/task/CityRepository.java @@ -0,0 +1,8 @@ +package osm.surveyor.task; + +import org.springframework.data.jpa.repository.JpaRepository; + +import osm.surveyor.task.model.City; + +public interface CityRepository extends JpaRepository { +} diff --git a/src/main/java/osm/surveyor/task/DataLoader.java b/src/main/java/osm/surveyor/task/DataLoader.java index d83271e..2622a03 100644 --- a/src/main/java/osm/surveyor/task/DataLoader.java +++ b/src/main/java/osm/surveyor/task/DataLoader.java @@ -4,26 +4,26 @@ import org.springframework.stereotype.Component; import lombok.RequiredArgsConstructor; -import osm.surveyor.task.model.Task; +import osm.surveyor.task.model.City; @RequiredArgsConstructor @Component public class DataLoader implements CommandLineRunner { - private final TaskRepository repository; + private final CityRepository repository; @Override public void run(String... args) throws Exception { - Task task = new Task(); - task.setCitycode("01100"); - task.setMeshcode("000000"); - task.setCityname("北海道 札幌市"); - repository.save(task); + City city = new City(); + city.setCitycode("01100"); + city.setCityname("北海道 札幌市"); + city.setFolder("01100_sapporo-shi_2020"); + repository.save(city); - task = new Task(); - task.setCitycode("07203"); - task.setMeshcode("000000"); - task.setCityname("福島県 郡山市"); - repository.save(task); + city = new City(); + city.setCitycode("07203"); + city.setCityname("福島県 郡山市"); + city.setFolder("07203_koriyama-shi_2020"); + repository.save(city); } } diff --git a/src/main/java/osm/surveyor/task/MapperController.java b/src/main/java/osm/surveyor/task/MapperController.java deleted file mode 100644 index 1f43654..0000000 --- a/src/main/java/osm/surveyor/task/MapperController.java +++ /dev/null @@ -1,51 +0,0 @@ -package osm.surveyor.task; - -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.validation.BindingResult; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; - -import lombok.RequiredArgsConstructor; -import osm.surveyor.task.model.Mapper; - -@RequiredArgsConstructor -@Controller -public class MapperController { - private final MapperRepository repository; - - @GetMapping("/") - public String showList(Model model) { - model.addAttribute("mappers", repository.findAll()); - return "index"; - } - - @GetMapping("/add") - public String addMapper(@ModelAttribute Mapper mapper) { - return "form"; - } - - @PostMapping("/process") - public String process(@Validated @ModelAttribute Mapper mapper, BindingResult result) { - if (result.hasErrors()) { - return "form"; - } - repository.save(mapper); - return "redirect:/"; - } - - @GetMapping("/edit/{id}") - public String editMapper(@PathVariable Long id, Model model) { - model.addAttribute("mapper", repository.findById(id)); - return "form"; - } - - @GetMapping("/delete/{id}") - public String deleteMapper(@PathVariable Long id) { - repository.deleteById(id); - return "redirect:/"; - } -} diff --git a/src/main/java/osm/surveyor/task/MapperRepository.java b/src/main/java/osm/surveyor/task/MapperRepository.java deleted file mode 100644 index 1902c87..0000000 --- a/src/main/java/osm/surveyor/task/MapperRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package osm.surveyor.task; - -import org.springframework.data.jpa.repository.JpaRepository; - -import osm.surveyor.task.model.Mapper; - -public interface MapperRepository extends JpaRepository { -} diff --git a/src/main/java/osm/surveyor/task/TaskRepository.java b/src/main/java/osm/surveyor/task/TaskRepository.java deleted file mode 100644 index 54ab9c5..0000000 --- a/src/main/java/osm/surveyor/task/TaskRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package osm.surveyor.task; - -import org.springframework.data.jpa.repository.JpaRepository; - -import osm.surveyor.task.model.Task; - -public interface TaskRepository extends JpaRepository { - -} diff --git a/src/main/java/osm/surveyor/task/model/City.java b/src/main/java/osm/surveyor/task/model/City.java new file mode 100644 index 0000000..68138ec --- /dev/null +++ b/src/main/java/osm/surveyor/task/model/City.java @@ -0,0 +1,32 @@ +package osm.surveyor.task.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.validation.constraints.NotBlank; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Entity +public class City { + @Id + @GeneratedValue(strategy=GenerationType.IDENTITY) + private Long id; + + @NotBlank + private String citycode; + + @NotBlank + private String cityname; + + @NotBlank + private String folder; + + private Double lng; + + private Double lat; +} diff --git a/src/main/java/osm/surveyor/task/model/Mapper.java b/src/main/java/osm/surveyor/task/model/Mapper.java deleted file mode 100644 index 3d4c94e..0000000 --- a/src/main/java/osm/surveyor/task/model/Mapper.java +++ /dev/null @@ -1,30 +0,0 @@ -package osm.surveyor.task.model; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Entity -public class Mapper { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - // 必須入力、(null,空白不可) - @NotBlank - @Size(max = 40) - private String osmid; - - // 'Task' とのリレーション - @ManyToOne - private Task task; -} diff --git a/src/main/java/osm/surveyor/task/model/Task.java b/src/main/java/osm/surveyor/task/model/Task.java deleted file mode 100644 index 00ae1fb..0000000 --- a/src/main/java/osm/surveyor/task/model/Task.java +++ /dev/null @@ -1,39 +0,0 @@ -package osm.surveyor.task.model; - -import java.util.List; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Entity -public class Task { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @NotBlank - @Size(max = 40) - private String citycode; - - @NotBlank - @Size(max = 40) - private String meshcode; - - @NotBlank - @Size(max = 40) - private String cityname; - - // 'Mapper' とのリレーション - @OneToMany(mappedBy = "task") - private List mappers; -} diff --git a/src/main/resources/static/data/index.json b/src/main/resources/static/data/index.json new file mode 100644 index 0000000..20b5b13 --- /dev/null +++ b/src/main/resources/static/data/index.json @@ -0,0 +1,60 @@ +{ + "site": "http://surveyor.mydns.jp/osm-data/", + "list": [ + {"code": "01100", "name": "北海道 札幌市", "path": "01100_sapporo-shi_2020", "coordinates":[141.35477,43.06172]}, + {"code": "07203", "name": "福島県 郡山市", "path": "07203_koriyama-shi_2020", "coordinates":[140.33421,37.40464]}, + {"code": "07204", "name": "福島県 いわき市", "path": "07204_iwaki-shi_2020", "coordinates":[140.8893,37.0501]}, + {"code": "07205", "name": "福島県 白河市", "path": "07205_shirakawa-shi_2020", "coordinates":[140.2237,37.1240]}, + {"code": "08234", "name": "茨城県 鉾田市", "path": "08234_hokota-shi_2020", "coordinates":[140.5153,36.1586]}, + {"code": "09201", "name": "栃木県 宇都宮市", "path": "09201_utsunomiya-shi_2020", "coordinates":[139.88273,36.55471]}, + {"code": "10203", "name": "群馬県 桐生市", "path": "10203_kiryu-shi_2020", "coordinates":[139.3302,36.4052]}, + {"code": "10207", "name": "群馬県 館林市", "path": "10207_tatebayashi-shi_2020", "coordinates":[139.5430,36.2447]}, + {"code": "11100", "name": "埼玉県 さいたま市", "path": "11100_saitama-shi_2020", "coordinates":[139.6460,35.8610]}, + {"code": "11202", "name": "埼玉県 熊谷市", "path": "11202_kumagaya-shi_2020", "coordinates":[139.38850,36.14724]}, + {"code": "11230", "name": "埼玉県 新座市", "path": "11230_niiza-shi_2020", "coordinates":[139.5553,35.7896]}, + {"code": "11326", "name": "埼玉県 毛呂山町", "path": "11326_moroyama-machi_2020", "coordinates":[139.31614,35.94053]}, + {"code": "12217", "name": "千葉県 柏市", "path": "12217_kashiwa-shi_2020", "coordinates":[139.97620,35.86767]}, + {"code": "13100", "name": "東京23区", "path": "13100_tokyo23-ku_2020", "coordinates":[139.7637,35.6808]}, + {"code": "13201", "name": "東京都 八王子市", "path": "13201_hachioji-shi_2020", "coordinates":[139.28360,35.66033]}, + {"code": "13213", "name": "東京都 東村山市", "path": "13213_higashimurayama-shi_2020", "coordinates":[139.48503,35.76867]}, + {"code": "14100", "name": "神奈川県 横浜市", "path": "14100_yokohama-shi_2020", "coordinates":[139.63682,35.44480]}, + {"code": "14130", "name": "神奈川県 川崎市", "path": "14130_kawasaki-shi_2020", "coordinates":[139.70300,35.53034]}, + {"code": "14150", "name": "神奈川県 相模原市", "path": "14150_sagamihara-shi_2020", "coordinates":[139.2368,35.5646]}, + {"code": "14201", "name": "神奈川県 横須賀市", "path": "14201_yokosuka-shi_2020", "coordinates":[139.66546,35.27301]}, + {"code": "14382", "name": "神奈川県 箱根町", "path": "14382_hakone-machi_2020", "coordinates":[139.03366,35.22248]}, + {"code": "15100", "name": "新潟県 新潟市", "path": "15100_niigata-shi_2020", "coordinates":[139.03622,37.91595]}, + {"code": "17201", "name": "石川県 金沢市", "path": "17201_kanazawa-shi_2020", "coordinates":[136.65693,36.56159]}, + {"code": "17206", "name": "石川県 加賀市", "path": "17206_kaga-shi_2021", "coordinates":[136.31501,36.30282]}, + {"code": "20202", "name": "長野県 松本市", "path": "20202_matsumoto-shi_2020", "coordinates":[137.96847,36.23800]}, + {"code": "20204", "name": "長野県 岡谷市", "path": "20204_okaya-shi_2020", "coordinates":[138.04970,36.07857]}, + {"code": "20209", "name": "長野県 伊那市", "path": "20209_ina-shi_2020", "coordinates":[137.95746,35.82935]}, + {"code": "20214", "name": "長野県 茅野市", "path": "20214_chino-shi_2020", "coordinates":[138.15793,35.98550]}, + {"code": "21201", "name": "岐阜県 岐阜市", "path": "21201_gifu-shi_2020", "coordinates":[136.76315,35.42288]}, + {"code": "22213", "name": "静岡県 掛川市", "path": "22213_kakegawa-shi_2020", "coordinates":[138.01897,34.79317]}, + {"code": "22224", "name": "静岡県 菊川市", "path": "22224_kikugawa-shi_2020", "coordinates":[138.08748,34.75597]}, + {"code": "23100", "name": "愛知県 名古屋市", "path": "23100_nagoya-shi_2020", "coordinates":[136.89995,35.18467]}, + {"code": "23208", "name": "愛知県 津島市", "path": "23208_taushima-shi_2020", "coordinates":[136.75834,35.16682]}, + {"code": "23212", "name": "愛知県 安城市", "path": "23212_anjo-shi_2020", "coordinates":[137.07592,34.94770]}, + {"code": "27100", "name": "大阪府 大阪市", "path": "27100_osaka-shi_2020", "coordinates":[135.50158,34.69351]}, + {"code": "27203", "name": "大阪府 豊中市", "path": "27203_toyonaka-shi_2020", "coordinates":[135.47407,34.78605]}, + {"code": "27204", "name": "大阪府 池田市", "path": "27204_ikeda-shi_2020", "coordinates":[135.43338,34.81956]}, + {"code": "27207", "name": "大阪府 高槻市", "path": "27207_takatsuki-shi_2020", "coordinates":[135.60104,34.88123]}, + {"code": "27224", "name": "大阪府 摂津市", "path": "27224_settsu-shi_2020", "coordinates":[135.55382,34.78268]}, + {"code": "27341", "name": "大阪府 泉北郡忠岡町", "path": "27341_tadaoka-cho_2020", "coordinates":[135.40065,34.49044]}, + {"code": "28210", "name": "兵庫県 加古川市", "path": "28210_kakogawa-shi_2020", "coordinates":[134.85000,34.78667]}, + {"code": "31201", "name": "鳥取県 鳥取市", "path": "31201_tottori-shi_2020", "coordinates":[134.22193,35.49443]}, + {"code": "34202", "name": "広島県 呉市", "path": "34202_kure-shi_2020", "coordinates":[132.56526,34.24830]}, + {"code": "34207", "name": "広島県 福山市", "path": "34207_fukuyama-shi_2020", "coordinates":[133.36256,34.48568]}, + {"code": "38201", "name": "愛媛県 松山市", "path": "38201_matsuyama-shi_2020", "coordinates":[132.76527,33.83939]}, + {"code": "40100", "name": "福岡県 北九州市", "path": "40100_kitakyushu-shi_2020", "coordinates":[130.8749015,33.8829996]}, + {"code": "40203", "name": "福岡県 久留米市", "path": "40203_kurume-shi_2020", "coordinates":[130.50832,33.31960]}, + {"code": "40205", "name": "福岡県 飯塚市", "path": "40205_iizuka-shi_2020", "coordinates":[130.69119,33.64663]}, + {"code": "40220", "name": "福岡県 宗像市", "path": "40220_munakata-shi_2020", "coordinates":[130.54065,33.80550]}, + {"code": "43100", "name": "熊本県 熊本市", "path": "43100_kumamoto-shi_2020", "coordinates":[130.73333,32.78318]}, + {"code": "43204", "name": "熊本県 荒尾市", "path": "43204_arao-shi_2020", "coordinates":[130.4358,32.9855]}, + {"code": "43206", "name": "熊本県 玉名市", "path": "43206_tamana-shi_2020", "coordinates":[130.56269,32.93495]}, + {"code": "43443", "name": "熊本県 上益城郡益城町", "path": "43443_mashiki-machi_2020", "coordinates":[130.83786,32.78937]}, + {"code": "44204", "name": "大分県 日田市", "path": "44204_hita-shi_2020", "coordinates":[130.94110,33.32117]}, + {"code": "47201", "name": "沖縄県 那覇市", "path": "47201_naha-shi_2020", "coordinates":[127.67910,26.21218]} + ] +} \ No newline at end of file diff --git a/src/main/resources/templates/form.html b/src/main/resources/templates/form.html index 198bd91..7333438 100644 --- a/src/main/resources/templates/form.html +++ b/src/main/resources/templates/form.html @@ -24,24 +24,28 @@
マッパー登録
-
+
- - -
+ + +
- - + + +
+
+
+ +
+ + +
+

diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index a082d3a..87ce816 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -21,7 +21,7 @@