package osm.surveyor.task.city; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.springframework.boot.CommandLineRunner; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import osm.surveyor.task.city.model.CitiesJson; import osm.surveyor.task.city.model.City; import osm.surveyor.task.city.model.CityJson; import osm.surveyor.task.city.model.Citymesh; import osm.surveyor.task.city.model.Status; import osm.surveyor.task.city.model.Task; import osm.surveyor.task.util.Geojson; import osm.surveyor.task.util.JsonFeature; import osm.surveyor.task.util.JsonGeometryPoint; import osm.surveyor.task.util.JsonProperties; import osm.surveyor.task.util.Point; @RequiredArgsConstructor @Component public class DataLoader implements CommandLineRunner { private final CityRepository cityRepository; private final CitymeshRepository meshRepository; private final TaskService taskService; @Override public void run(String... args) throws Exception { // 「src/main/resources/static/city/index.json」を読み込む try (InputStream is = new ClassPathResource("static/city/index.json").getInputStream()) { CitiesJson pojo = new ObjectMapper().readValue(is, CitiesJson.class); String site = pojo.getSite(); for (CityJson citiesJson : pojo.getList()) { City city = new City(); city.setSite(site); city.setCitycode(citiesJson.getCode()); city.setCityname(citiesJson.getName()); city.setFolder(citiesJson.getPath()); Status status = citiesJson.getStatus(); if (status != null) { city.setStatus(status); } Point coordinates = citiesJson.toCoordinates(); city.setLng(coordinates.getLng()); city.setLat(coordinates.getLat()); cityRepository.save(city); storeTask(city); } } } private void storeTask(City city) throws IOException { String folder = city.getFolder(); String path = "static/city/"+ folder +"/bldg/index.geojson"; try (InputStream is = new ClassPathResource(path).getInputStream()) { ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.readTree(is); Geojson geojson = new Geojson(); geojson.parse(node); List<JsonFeature> features = geojson.getFeatures(); for (JsonFeature f : features) { JsonGeometryPoint geometryPoint = f.getGeometryPoint(); if (geometryPoint != null) { if (geometryPoint.getType().equals("Point")) { JsonProperties prop = f.getProperties(); if (prop != null) { String meshcode = prop.getId(); if (meshcode != null) { Citymesh mesh = new Citymesh(); mesh.setCitycode(city.getCitycode()); mesh.setMeshcode(meshcode); mesh.setVersion(prop.getVersion()); mesh.setPath(prop.getPath()); mesh.setPoint(geometryPoint.getCoordinates().toString()); mesh.setCity(city); Task task = taskService.getTaskByMesh(city.getCitycode(), meshcode); if (task == null) { Status status = city.getStatus(); if (status != null) { mesh.setStatus(status); } } else { mesh.setStatus(task.getStatus()); } meshRepository.save(mesh); } } } } } } } }