From fbb63e8f5b8defd78ec501b01269832395807672 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jan 2022 16:32:38 +0000 Subject: [PATCH 01/20] Bump log4j-core from 2.17.0 to 2.17.1 Bumps log4j-core from 2.17.0 to 2.17.1. --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ca3b681d..1bad9283 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ 2.29.1 2.10.1 4.0.3 - 2.17.0 + 2.17.1 2.0.10 5.7.0 3.0.0-M5 From 189f3802f8d9f2119e640ea1d887b017cbf60b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Wed, 5 Jan 2022 11:38:07 +0100 Subject: [PATCH 02/20] list communes V2 --- .../fr/insee/rmes/api/geo/AbstractGeoApi.java | 4 ++ .../rmes/api/geo/territoire/CommuneApi.java | 19 +++++-- .../fr/insee/rmes/queries/geo/GeoQueries.java | 21 +++++++- .../java/fr/insee/rmes/utils/Constants.java | 3 ++ ...toireByCodeAndDateAndFiltreNomCommune.ftlh | 50 +++++++++++++++++++ src/main/resources/rmes-api.properties | 2 +- .../CommuneApiIntegrationTest.java | 4 +- 7 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh diff --git a/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java b/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java index aa780a8a..ba8646ba 100644 --- a/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java @@ -80,6 +80,10 @@ protected boolean verifyParameterDateIsRightWithHistory(String date) { protected String formatValidParameterDateIfIsNull(String date) { return (date != null) ? date : DateUtils.getDateTodayStringFormat(); } + + protected String formatValidParameterFiltreIfIsNull(String filtreNomCommune) { + return (filtreNomCommune != null) ? filtreNomCommune : "*"; + } protected Response generateStatusResponse(boolean objectIsFound, Object o, String header) { if (objectIsFound) { diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java index cf9f81de..1517f445 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java @@ -46,9 +46,9 @@ public class CommuneApi extends AbstractGeoApi { private static final String LITTERAL_PARAMETER_DATE_DESCRIPTION = "Filtre pour renvoyer la commune active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')"; private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; - + private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le nom de la commune" ; private static final String LITTERAL_CODE_EXAMPLE = "14475"; - + private static final String LITTERAL_PARAMETER_COM_DESCRIPTION="Filtre pour inclure ou pas les collectivités d’outre-mer"; @Path(ConstGeoApi.PATH_COMMUNE + CODE_PATTERN) @GET @@ -218,7 +218,18 @@ public Response getListe( description = "Filtre pour renvoyer les communes actives à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')" + LITTERAL_PARAMETER_DATE_WITH_HISTORY, required = false, schema = @Schema(type = Constants.TYPE_STRING, format = Constants.FORMAT_DATE)) @QueryParam( - value = Constants.PARAMETER_DATE) String date) { + value = Constants.PARAMETER_DATE) String date, + @Parameter( + description = LITTERAL_PARAMETER_NAME_DESCRIPTION, + required = false, + schema = @Schema(type = Constants.TYPE_STRING, example="Bonnay")) @QueryParam( + value = Constants.PARAMETER_FILTRE) String filtreNomCommune, + @Parameter(description = LITTERAL_PARAMETER_COM_DESCRIPTION, + required = false, + schema = @Schema(type = Constants.TYPE_BOOLEAN,example="False")) @QueryParam( + value = Constants.PARAMETER_BOOLEAN) boolean com + ) + { logger.debug("Received GET request for all communes"); @@ -229,7 +240,7 @@ public Response getListe( return this .generateResponseListOfTerritoire( sparqlUtils - .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date))), + .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNomCommune),com)), header, Communes.class, Commune.class); diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index c1d64895..a7acc2cf 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -18,6 +18,7 @@ public class GeoQueries extends Queries { private static final String TYPE_ORIGINE = "typeOrigine"; private static final String PREVIOUS = "previous"; private static final String QUERIES_FOLDER = "geographie/"; + private static final String FILTRE = "filtreNomCommune"; /* IDENTIFICATION */ public static String getZoneEmploiByCodeAndDate(String code, String date) { @@ -61,8 +62,8 @@ public static String getArrondissementmunicipalByCodeAndDate(String code, String } /* LIST */ - public static String getListCommunes(String date) { - return getTerritoire(Constants.NONE, date, EnumTypeGeographie.COMMUNE); + public static String getListCommunes(String date,String filtreNomCommune,boolean com) { + return getTerritoireFiltre(Constants.NONE, date,filtreNomCommune, com, EnumTypeGeographie.COMMUNE); } public static String getListDepartements(String date) { @@ -304,6 +305,22 @@ private static Map buildCodeAndDateParams(String code, String da params.put(DATE, date); return params; } + + + private static String getTerritoireFiltre(String code, String date, String filtreNomCommune, boolean com, EnumTypeGeographie typeGeo) { + Map params = buildCodeAndDateAndFilterParams(code, date, filtreNomCommune); + params.put("territoire", typeGeo.getTypeObjetGeo()); + params.put("chefLieu", typeGeo.getChefLieuPredicate()); + return buildRequest(QUERIES_FOLDER, "getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh", params); + } + + private static Map buildCodeAndDateAndFilterParams(String code, String date, String filtreNomCommune) { + Map params = new HashMap<>(); + params.put(CODE, code); + params.put(DATE, date); + params.put(FILTRE, filtreNomCommune); + return params; + } public static String getCountry(String code) { return "SELECT ?uri ?intitule ?intituleEntier \n" diff --git a/src/main/java/fr/insee/rmes/utils/Constants.java b/src/main/java/fr/insee/rmes/utils/Constants.java index 49eb9811..013600e3 100644 --- a/src/main/java/fr/insee/rmes/utils/Constants.java +++ b/src/main/java/fr/insee/rmes/utils/Constants.java @@ -5,10 +5,13 @@ public class Constants { public static final String NONE = "none"; public static final String TYPE_STRING = "string"; public static final String CODE = "code"; + public static final String TYPE_BOOLEAN = "bolean"; public static final String FORMAT_DATE = "date"; public static final String PARAMETER_DATE = "date"; public static final String PARAMETER_DATE_PROJECTION = "dateProjection"; public static final String PARAMETER_TYPE = "type"; + public static final String PARAMETER_FILTRE="filtreNomCommune"; + public static final String PARAMETER_BOOLEAN="com"; private Constants() {} } diff --git a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh new file mode 100644 index 00000000..ee34b80f --- /dev/null +++ b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh @@ -0,0 +1,50 @@ +SELECT DISTINCT ?uri ?code ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?chefLieu +FROM + WHERE { + ?uri a igeo:${territoire} ; + igeo:codeArticle ?typeArticle ; + igeo:nom ?intitule ; + <#if com != "False"> + (igeo:subdivisionDirecteDe)+ ; + + igeo:nomSansArticle ?intituleSansArticle . + ?uri igeo:codeINSEE ?code . + OPTIONAL { + ?evenementCreation igeo:creation ?uri ; + igeo:date ?dateCreation . + } + OPTIONAL { + ?evenementSuppression igeo:suppression ?uri ; + igeo:date ?dateSuppression. + } + OPTIONAL { + ?uri igeo:${chefLieu} ?chefLieuRDF . + ?chefLieuRDF igeo:codeINSEE ?chefLieu. + OPTIONAL { + ?evenementCreationChefLieu igeo:creation ?chefLieuRDF ; + igeo:date ?dateCreationChefLieu . + } + OPTIONAL { + ?evenementSuppressionChefLieu igeo:suppression ?chefLieuRDF ; + igeo:date ?dateSuppressionChefLieu. + } + + <#if date != "*"> + FILTER(!BOUND(?dateCreationChefLieu) || ?dateCreationChefLieu <= '${date}'^^xsd:date) + FILTER(!BOUND(?dateSuppressionChefLieu) || ?dateSuppressionChefLieu > '${date}'^^xsd:date) + + } +<#if filtreNomCommune != "*"> + BIND( '${filtreNomCommune}' AS ?query). + BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . + BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intituleSansArticle), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNomSansArticle) . + BIND (CONCAT("^", REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?query), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "([^/]+)[/]", "$1-sur-"),"([^\\\\]+)[\\\\]", "$1-sous-"), "[-_']", " "),"[^a-z0-9() ]", ""), "[ ]{2,}", " "), "^st(e)? ", "saint$1 "), "") AS ?formattedQuery) . + FILTER (REGEX(?formattedNom, ?formattedQuery) || REGEX(?formattedNomSansArticle, ?formattedQuery)) + +<#if date != "*"> + FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${date}'^^xsd:date) + FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '${date}'^^xsd:date) + + } + ORDER BY ?code + \ No newline at end of file diff --git a/src/main/resources/rmes-api.properties b/src/main/resources/rmes-api.properties index 1fb14bc3..90d5bd5e 100644 --- a/src/main/resources/rmes-api.properties +++ b/src/main/resources/rmes-api.properties @@ -8,7 +8,7 @@ fr.insee.rmes.api.baseHost = http://id.insee.fr # files storage # physical place -fr.insee.rmes.api.storage.document = C:/temp/metadata-api +fr.insee.rmes.api.storage.document = C:/Temp/metadata-api # just the short name after physical place for documents fr.insee.rmes.api.fileStorage = /storage/documents/ diff --git a/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/CommuneApiIntegrationTest.java b/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/CommuneApiIntegrationTest.java index 714ab561..3c7dfa72 100644 --- a/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/CommuneApiIntegrationTest.java +++ b/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/CommuneApiIntegrationTest.java @@ -55,7 +55,7 @@ public void givengetCommune_whenCorrectRequest_With_XML_Header_thenResponseIsOk( public void givengetListeCommunes_whenCorrectRequest_With_JSON_Header_thenResponseIsOk() { when(mockSparqlUtils.executeSparqlQuery(anyString())) .thenReturn(ConstantForIntegration.COMMUNE_MOCK_SERVER_RETURN_LISTE); - Response response = geoApi.getListe(MediaType.APPLICATION_JSON, null); + Response response = geoApi.getListe(MediaType.APPLICATION_JSON, null,"*"); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertEquals(ConstantForIntegration.COMMUNE_EXPECTED_RESPONSE_LISTE_TOP_JSON, response.getEntity()); } @@ -64,7 +64,7 @@ public void givengetListeCommunes_whenCorrectRequest_With_JSON_Header_thenRespon public void givengetListeCommunes_whenCorrectRequest_With_XML_Header_thenResponseIsOk() { when(mockSparqlUtils.executeSparqlQuery(anyString())) .thenReturn(ConstantForIntegration.COMMUNE_MOCK_SERVER_RETURN_LISTE); - Response response = geoApi.getListe(MediaType.APPLICATION_XML, null); + Response response = geoApi.getListe(MediaType.APPLICATION_XML, null,null); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertEquals(ConstantForIntegration.COMMUNE_EXPECTED_RESPONSE_LISTE_TOP_XML, response.getEntity()); } From 137b8ad7a972e27a1b89452dfa8d50570d15fdaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Thu, 6 Jan 2022 18:27:38 +0100 Subject: [PATCH 03/20] Service collectiviteDOutreMer + modification requete getTerritoireByCodeAndDateAndFiltreNomCommune --- .../fr/insee/rmes/api/geo/ConstGeoApi.java | 1 + .../territoire/CollectivitesDOutreMerAPI.java | 97 +++++++++++++++++++ .../rmes/api/geo/territoire/CommuneApi.java | 4 +- .../rmes/modeles/geo/EnumTypeGeographie.java | 5 +- .../geo/territoire/CollectiviteDOutreMer.java | 93 ++++++++++++++++++ .../territoires/CollectivitesDOutreMer.java | 45 +++++++++ .../fr/insee/rmes/queries/geo/GeoQueries.java | 17 +++- .../java/fr/insee/rmes/utils/Constants.java | 1 + ...toireByCodeAndDateAndFiltreNomCommune.ftlh | 5 +- 9 files changed, 256 insertions(+), 12 deletions(-) create mode 100644 src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java create mode 100644 src/main/java/fr/insee/rmes/modeles/geo/territoire/CollectiviteDOutreMer.java create mode 100644 src/main/java/fr/insee/rmes/modeles/geo/territoires/CollectivitesDOutreMer.java diff --git a/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java b/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java index 88f5127a..88eed5aa 100644 --- a/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java @@ -19,6 +19,7 @@ public class ConstGeoApi { public static final String PATH_COMMUNE_ASSOCIEE = PATH_SEPARATOR + "communeAssociee"; public static final String PATH_COMMUNE_DELEGUEE = PATH_SEPARATOR + "communeDeleguee"; public static final String PATH_ARRONDISSEMENT_MUNICIPAL = PATH_SEPARATOR + "arrondissementMunicipal"; + public static final String PATH_LISTE_COM= PATH_SEPARATOR +"collectivitesDOutreMer"; public static final String PATH_LISTE_COMMUNE = PATH_SEPARATOR + "communes"; public static final String PATH_LISTE_PAYS = PATH_SEPARATOR + "pays"; diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java new file mode 100644 index 00000000..87eff849 --- /dev/null +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java @@ -0,0 +1,97 @@ +package fr.insee.rmes.api.geo.territoire; + +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import fr.insee.rmes.api.geo.AbstractGeoApi; +import fr.insee.rmes.api.geo.ConstGeoApi; +import fr.insee.rmes.modeles.geo.territoire.CollectiviteDOutreMer; +import fr.insee.rmes.modeles.geo.territoire.Commune; +import fr.insee.rmes.modeles.geo.territoire.Territoire; +import fr.insee.rmes.modeles.geo.territoires.CollectivitesDOutreMer; +import fr.insee.rmes.modeles.geo.territoires.Communes; +import fr.insee.rmes.modeles.geo.territoires.Projections; +import fr.insee.rmes.modeles.geo.territoires.Territoires; +import fr.insee.rmes.queries.geo.GeoQueries; +import fr.insee.rmes.utils.Constants; +import io.swagger.v3.oas.annotations.Hidden; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; + + + @Path(ConstGeoApi.PATH_GEO) + @Tag(name = ConstGeoApi.TAG_NAME, description = ConstGeoApi.TAG_DESCRIPTION) + + public class CollectivitesDOutreMerAPI extends AbstractGeoApi { + + private static final String LITTERAL_DATE_EXAMPLE = "1945-06-26"; + + private static Logger logger = LogManager.getLogger(CollectiviteDOutreMer.class); + + private static final String CODE_PATTERN = "/{code: " + ConstGeoApi.PATTERN_COMMUNE + "}"; + private static final String LITTERAL_ID_OPERATION = "getcogcom"; + private static final String LITTERAL_OPERATION_SUMMARY = + "Informations sur une commune française identifiée par son code (cinq caractères)"; + private static final String LITTERAL_RESPONSE_DESCRIPTION = "Commune"; + private static final String LITTERAL_PARAMETER_DATE_DESCRIPTION = + "Filtre pour renvoyer la commune active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')"; + private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; + private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le nom de la commune" ; + private static final String LITTERAL_CODE_EXAMPLE = "14475"; + private static final String LITTERAL_PARAMETER_COM_DESCRIPTION="Filtre pour inclure ou pas les collectivités d’outre-mer"; + + + @Path(ConstGeoApi.PATH_LISTE_COM) + @GET + @Produces({ + MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML + }) + + @Operation( + operationId = LITTERAL_ID_OPERATION + ConstGeoApi.ID_OPERATION_LISTE, + summary = "Informations sur toutes les collectivités d'outre-mer actives à la date donnée. Par défaut, c’est la date courante.", + responses = { + @ApiResponse( + content = @Content(schema = @Schema(type = ARRAY, implementation = Commune.class)), + description = LITTERAL_RESPONSE_DESCRIPTION) + }) + + public Response getListe( + @Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header, + @Parameter( + description = "Filtre pour renvoyer les collectivités d'outre-mer actives à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')" + LITTERAL_PARAMETER_DATE_WITH_HISTORY, + required = false, + schema = @Schema(type = Constants.TYPE_STRING, format = Constants.FORMAT_DATE)) @QueryParam( + value = Constants.PARAMETER_DATE) String date) + + { + + logger.debug("Received GET request for all collectivités d'outre-mer"); + + if ( ! this.verifyParameterDateIsRightWithHistory(date)) { + return this.generateBadRequestResponse(); + } + else { + return this + .generateResponseListOfTerritoire( + sparqlUtils.executeSparqlQuery(GeoQueries.getListCollectivitesDOutreMer(this.formatValidParameterDateIfIsNull(date))), + header, + CollectivitesDOutreMer.class, + CollectiviteDOutreMer.class ); + } + } + } diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java index 1517f445..2e6d4de3 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java @@ -226,8 +226,8 @@ public Response getListe( value = Constants.PARAMETER_FILTRE) String filtreNomCommune, @Parameter(description = LITTERAL_PARAMETER_COM_DESCRIPTION, required = false, - schema = @Schema(type = Constants.TYPE_BOOLEAN,example="False")) @QueryParam( - value = Constants.PARAMETER_BOOLEAN) boolean com + schema = @Schema(type = Constants.TYPE_BOOLEAN,example="false")) @QueryParam( + value = Constants.PARAMETER_STRING) String com ) { diff --git a/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java b/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java index cf7905ac..0d00943a 100644 --- a/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java +++ b/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java @@ -7,6 +7,7 @@ import fr.insee.rmes.modeles.geo.territoire.Arrondissement; import fr.insee.rmes.modeles.geo.territoire.ArrondissementMunicipal; import fr.insee.rmes.modeles.geo.territoire.Canton; +import fr.insee.rmes.modeles.geo.territoire.CollectiviteDOutreMer; import fr.insee.rmes.modeles.geo.territoire.Commune; import fr.insee.rmes.modeles.geo.territoire.CommuneAssociee; import fr.insee.rmes.modeles.geo.territoire.CommuneDeleguee; @@ -19,6 +20,7 @@ import fr.insee.rmes.modeles.geo.territoires.Arrondissements; import fr.insee.rmes.modeles.geo.territoires.ArrondissementsMunicipaux; import fr.insee.rmes.modeles.geo.territoires.Cantons; +import fr.insee.rmes.modeles.geo.territoires.CollectivitesDOutreMer; import fr.insee.rmes.modeles.geo.territoires.Communes; import fr.insee.rmes.modeles.geo.territoires.CommunesAssociees; import fr.insee.rmes.modeles.geo.territoires.CommunesDeleguees; @@ -36,13 +38,14 @@ public enum EnumTypeGeographie { DEPARTEMENT("Departement", Departement.class,Departements.class, "prefecture"), ARRONDISSEMENT("Arrondissement", Arrondissement.class,Arrondissements.class, "sousPrefecture"), CANTON("Canton", Canton.class,Cantons.class,Constants.NONE), + COLLECTIVITE_D_OUTRE_MER("CollectiviteDOutreMer", CollectiviteDOutreMer.class,CollectivitesDOutreMer.class, Constants.NONE), COMMUNE_DELEGUEE("CommuneDeleguee", CommuneDeleguee.class,CommunesDeleguees.class,Constants.NONE), COMMUNE_ASSOCIEE("CommuneAssociee", CommuneAssociee.class,CommunesAssociees.class,Constants.NONE), ARRONDISSEMENT_MUNICIPAL("ArrondissementMunicipal",ArrondissementMunicipal.class,ArrondissementsMunicipaux.class, Constants.NONE), ZONE_EMPLOI("ZoneDEmploi2020", ZoneEmploi.class,ZonesEmploi.class,Constants.NONE), AIRE_ATTRACTION("AireDAttractionDesVilles2020",AireAttraction.class,AiresAttraction.class,Constants.NONE), UNITE_URBAINE("UniteUrbaine2020", UniteUrbaine.class,UnitesUrbaines.class,Constants.NONE); - + private String typeObjetGeo; private Class classNameOfGeoType; diff --git a/src/main/java/fr/insee/rmes/modeles/geo/territoire/CollectiviteDOutreMer.java b/src/main/java/fr/insee/rmes/modeles/geo/territoire/CollectiviteDOutreMer.java new file mode 100644 index 00000000..f7867621 --- /dev/null +++ b/src/main/java/fr/insee/rmes/modeles/geo/territoire/CollectiviteDOutreMer.java @@ -0,0 +1,93 @@ +package fr.insee.rmes.modeles.geo.territoire; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; + +import fr.insee.rmes.modeles.geo.EnumTypeGeographie; +import fr.insee.rmes.modeles.geo.IntituleSansArticle; +import io.swagger.v3.oas.annotations.media.Schema; + +@XmlRootElement(name = "CollectiviteDOutreMER") +@JacksonXmlRootElement(localName = "CollectiviteDOutreMer") +@XmlAccessorType(XmlAccessType.FIELD) +@Schema(description = "Objet représentant une collectivite d'outre-mer") + +public class CollectiviteDOutreMer extends Territoire { + + // No-args constructor needed for JAXB + public CollectiviteDOutreMer() { + this.type = EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER.getTypeObjetGeo(); + this.intituleSansArticle = new IntituleSansArticle(); + } + + public CollectiviteDOutreMer(String code) { + this.type = EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER.getTypeObjetGeo(); + this.code = code; + this.intituleSansArticle = new IntituleSansArticle(); + } + + public CollectiviteDOutreMer( + String code, + String uri, + String intitule, + String type, + String dateCreation, + String dateSuppression, + IntituleSansArticle intituleSansArticle, + String chefLieu) { + super(code, uri, intitule, type, dateCreation, dateSuppression, intituleSansArticle, chefLieu); + } + + @Override + @JacksonXmlProperty(isAttribute = true) + @Schema(example = "98735") + public String getCode() { + return code; + } + + @Override + @JacksonXmlProperty(isAttribute = true) + @Schema(example = "http://id.insee.fr/geo/commune/98735") + public String getUri() { + return uri; + } + + @Override + @JacksonXmlProperty(localName = "Intitule") + @JsonProperty(value = "intitule") + @Schema(example = "Papeete") + public String getIntitule() { + return intitule; + } + + @Override + @JacksonXmlProperty(localName = "Type") + @Schema(example = "CollectiviteDOutreMer") + public String getType() { + return type; + } + + @Override + @JacksonXmlProperty(localName = "DateCreation") + @Schema( + description = "Date de création de la commune si elle n’existait pas au premier COG du 1er janvier 1943", + example = "1943-01-01") + public String getDateCreation() { + return dateCreation; + } + + @Override + @JacksonXmlProperty(localName = "DateSuppression") + @Schema(description = "Date de suppression de la commune si elle a été supprimée. ", example = "2019-01-01") + public String getDateSuppression() { + return dateSuppression; + } + + + +} diff --git a/src/main/java/fr/insee/rmes/modeles/geo/territoires/CollectivitesDOutreMer.java b/src/main/java/fr/insee/rmes/modeles/geo/territoires/CollectivitesDOutreMer.java new file mode 100644 index 00000000..af76055b --- /dev/null +++ b/src/main/java/fr/insee/rmes/modeles/geo/territoires/CollectivitesDOutreMer.java @@ -0,0 +1,45 @@ +package fr.insee.rmes.modeles.geo.territoires; + + +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; + +import fr.insee.rmes.modeles.geo.territoire.CollectiviteDOutreMer; +import io.swagger.v3.oas.annotations.media.Schema; + +@JacksonXmlRootElement(localName = "CollectivitesDOutreMer") +@XmlAccessorType(XmlAccessType.FIELD) +@Schema(name = "CollectivitesDOutreMer", description = "Tableau représentant les collectivites d'outre-mer") + +public class CollectivitesDOutreMer extends Territoires{ + + private List collectivitesDOutreMer = null; + + public CollectivitesDOutreMer() {} + + public CollectivitesDOutreMer(List collectivitesDOutreMer) { + this.collectivitesDOutreMer = collectivitesDOutreMer; + } + + @JacksonXmlProperty(isAttribute = true, localName = "collectiviteDOutreMer") + @JacksonXmlElementWrapper(useWrapping = false) + public List getCollectivitesDOutreMer() { + return collectivitesDOutreMer; + } + + public void setCommunes(List collectivitesDOutreMer) { + this.collectivitesDOutreMer = collectivitesDOutreMer; + } + +} + + + + + diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index a7acc2cf..a963f31b 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -19,6 +19,8 @@ public class GeoQueries extends Queries { private static final String PREVIOUS = "previous"; private static final String QUERIES_FOLDER = "geographie/"; private static final String FILTRE = "filtreNomCommune"; + private static final String COM = "false"; + /* IDENTIFICATION */ public static String getZoneEmploiByCodeAndDate(String code, String date) { @@ -62,10 +64,14 @@ public static String getArrondissementmunicipalByCodeAndDate(String code, String } /* LIST */ - public static String getListCommunes(String date,String filtreNomCommune,boolean com) { - return getTerritoireFiltre(Constants.NONE, date,filtreNomCommune, com, EnumTypeGeographie.COMMUNE); + public static String getListCommunes(String date,String filtreNomCommune,String com) { + return getTerritoireFiltre(Constants.NONE, date,filtreNomCommune, EnumTypeGeographie.COMMUNE,com); } + public static String getListCollectivitesDOutreMer(String date) { + return getTerritoire(Constants.NONE, date, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER); + } + public static String getListDepartements(String date) { return getTerritoire(Constants.NONE, date, EnumTypeGeographie.DEPARTEMENT); } @@ -307,18 +313,19 @@ private static Map buildCodeAndDateParams(String code, String da } - private static String getTerritoireFiltre(String code, String date, String filtreNomCommune, boolean com, EnumTypeGeographie typeGeo) { - Map params = buildCodeAndDateAndFilterParams(code, date, filtreNomCommune); + private static String getTerritoireFiltre(String code, String date, String filtreNomCommune, EnumTypeGeographie typeGeo,String com) { + Map params = buildCodeAndDateAndFilterParams(code, date, filtreNomCommune,com); params.put("territoire", typeGeo.getTypeObjetGeo()); params.put("chefLieu", typeGeo.getChefLieuPredicate()); return buildRequest(QUERIES_FOLDER, "getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh", params); } - private static Map buildCodeAndDateAndFilterParams(String code, String date, String filtreNomCommune) { + private static Map buildCodeAndDateAndFilterParams(String code, String date, String filtreNomCommune, String com) { Map params = new HashMap<>(); params.put(CODE, code); params.put(DATE, date); params.put(FILTRE, filtreNomCommune); + params.put(COM,com); return params; } diff --git a/src/main/java/fr/insee/rmes/utils/Constants.java b/src/main/java/fr/insee/rmes/utils/Constants.java index 013600e3..c941fae3 100644 --- a/src/main/java/fr/insee/rmes/utils/Constants.java +++ b/src/main/java/fr/insee/rmes/utils/Constants.java @@ -12,6 +12,7 @@ public class Constants { public static final String PARAMETER_TYPE = "type"; public static final String PARAMETER_FILTRE="filtreNomCommune"; public static final String PARAMETER_BOOLEAN="com"; + public static final String PARAMETER_STRING="com"; private Constants() {} } diff --git a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh index ee34b80f..d4decb68 100644 --- a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh +++ b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh @@ -4,11 +4,8 @@ FROM ?uri a igeo:${territoire} ; igeo:codeArticle ?typeArticle ; igeo:nom ?intitule ; - <#if com != "False"> - (igeo:subdivisionDirecteDe)+ ; - igeo:nomSansArticle ?intituleSansArticle . - ?uri igeo:codeINSEE ?code . + ?uri igeo:codeINSEE ?code . OPTIONAL { ?evenementCreation igeo:creation ?uri ; igeo:date ?dateCreation . From 3f281e7befb16343d9ce2aa29c90b2e904a9f870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Fri, 7 Jan 2022 16:43:52 +0100 Subject: [PATCH 04/20] Service CollectiviteDOutreMer by code --- .../fr/insee/rmes/api/geo/AbstractGeoApi.java | 4 ++ .../fr/insee/rmes/api/geo/ConstGeoApi.java | 3 + .../territoire/CollectivitesDOutreMerAPI.java | 55 +++++++++++++++++-- .../rmes/api/geo/territoire/CommuneApi.java | 6 +- .../fr/insee/rmes/queries/geo/GeoQueries.java | 5 +- ...toireByCodeAndDateAndFiltreNomCommune.ftlh | 7 ++- 6 files changed, 70 insertions(+), 10 deletions(-) diff --git a/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java b/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java index ba8646ba..3d9d9142 100644 --- a/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java @@ -84,6 +84,10 @@ protected String formatValidParameterDateIfIsNull(String date) { protected String formatValidParameterFiltreIfIsNull(String filtreNomCommune) { return (filtreNomCommune != null) ? filtreNomCommune : "*"; } + + protected String formatValidParameterComIfIsNull(String com) { + return (com != null) ? com : "*"; + } protected Response generateStatusResponse(boolean objectIsFound, Object o, String header) { if (objectIsFound) { diff --git a/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java b/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java index 88eed5aa..92310864 100644 --- a/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java @@ -19,6 +19,7 @@ public class ConstGeoApi { public static final String PATH_COMMUNE_ASSOCIEE = PATH_SEPARATOR + "communeAssociee"; public static final String PATH_COMMUNE_DELEGUEE = PATH_SEPARATOR + "communeDeleguee"; public static final String PATH_ARRONDISSEMENT_MUNICIPAL = PATH_SEPARATOR + "arrondissementMunicipal"; + public static final String PATH_COM= PATH_SEPARATOR + "collectiviteDOutreMer"; public static final String PATH_LISTE_COM= PATH_SEPARATOR +"collectivitesDOutreMer"; public static final String PATH_LISTE_COMMUNE = PATH_SEPARATOR + "communes"; @@ -42,6 +43,7 @@ public class ConstGeoApi { public static final String PATTERN_COMMUNE = "[0-9][0-9AB][0-9]{3}"; + public static final String PATTERN_COM ="9[78][1-9]"; public static final String PATTERN_PAYS = "99[0-9]{3}"; public static final String PATTERN_REGION = "[0-9]{2}"; public static final String PATTERN_ZONE_EMPLOI = "[0-9]{4}"; @@ -52,6 +54,7 @@ public class ConstGeoApi { public static final String PATTERN_ARRONDISSEMENT_MUNICIPAL = ""; public static final String PATTERN_COMMUNE_DESCRIPTION = "Code de la commune (cinq caractères)"; + public static final String PATTERN_COM_DESCRIPTION= "Code de la collectivite d'outre-mer"; public static final String PATTERN_COMMUNE_ASSOCIEE_DESCRIPTION = "Code de la commune associée (cinq caractères)"; public static final String PATTERN_COMMUNE_DELEGUEE_DESCRIPTION = "Code de la commune déléguée (cinq caractères)"; public static final String PATTERN_ZONE_EMPLOI_DESCRIPTION = "Code de la zone d'emploi (quatre chiffres)"; diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java index 87eff849..a23d66a5 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java @@ -43,15 +43,16 @@ public class CollectivitesDOutreMerAPI extends AbstractGeoApi { private static Logger logger = LogManager.getLogger(CollectiviteDOutreMer.class); private static final String CODE_PATTERN = "/{code: " + ConstGeoApi.PATTERN_COMMUNE + "}"; + private static final String CODE_PATTERNCOM = "/{code: " + ConstGeoApi.PATTERN_COM + "}"; private static final String LITTERAL_ID_OPERATION = "getcogcom"; private static final String LITTERAL_OPERATION_SUMMARY = - "Informations sur une commune française identifiée par son code (cinq caractères)"; - private static final String LITTERAL_RESPONSE_DESCRIPTION = "Commune"; + "Informations sur une collectivité d'outre-mer identifiée par son code (cinq caractères)"; + private static final String LITTERAL_RESPONSE_DESCRIPTION = "collectivité d'outre-mer"; private static final String LITTERAL_PARAMETER_DATE_DESCRIPTION = - "Filtre pour renvoyer la commune active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')"; + "Filtre pour renvoyer la collectivite d'outre-mer active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')"; private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; - private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le nom de la commune" ; - private static final String LITTERAL_CODE_EXAMPLE = "14475"; + private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le nom de la collectivite d'outre-mer" ; + private static final String LITTERAL_CODE_EXAMPLE = "986"; private static final String LITTERAL_PARAMETER_COM_DESCRIPTION="Filtre pour inclure ou pas les collectivités d’outre-mer"; @@ -94,4 +95,48 @@ public Response getListe( CollectiviteDOutreMer.class ); } } + + + @Path(ConstGeoApi.PATH_COM + CODE_PATTERNCOM) + @GET + @Produces({ + MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML + }) + @Operation( + operationId = LITTERAL_ID_OPERATION, + summary = LITTERAL_OPERATION_SUMMARY, + responses = { + @ApiResponse( + content = @Content(schema = @Schema(implementation = Commune.class)), + description = LITTERAL_RESPONSE_DESCRIPTION) + }) + public Response getByCode( + @Parameter( + description = ConstGeoApi.PATTERN_COM_DESCRIPTION, + required = true, + schema = @Schema( + pattern = ConstGeoApi.PATTERN_COM, + type = Constants.TYPE_STRING, example=LITTERAL_CODE_EXAMPLE)) @PathParam(Constants.CODE) String code, + @Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header, + @Parameter( + description = LITTERAL_PARAMETER_DATE_DESCRIPTION, + required = false, + schema = @Schema(type = Constants.TYPE_STRING, format = Constants.FORMAT_DATE)) @QueryParam( + value = Constants.PARAMETER_DATE) String date) { + + logger.debug("Received GET request for commune {}", code); + + if ( ! this.verifyParameterDateIsRightWithoutHistory(date)) { + return this.generateBadRequestResponse(); + } + else { + return this + .generateResponseATerritoireByCode( + sparqlUtils + .executeSparqlQuery( + GeoQueries.getListCollectivitesDOutreMer(code, this.formatValidParameterDateIfIsNull(date))), + header, + new Commune(code)); + } + } } diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java index 2e6d4de3..dfd36328 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java @@ -48,7 +48,7 @@ public class CommuneApi extends AbstractGeoApi { private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le nom de la commune" ; private static final String LITTERAL_CODE_EXAMPLE = "14475"; - private static final String LITTERAL_PARAMETER_COM_DESCRIPTION="Filtre pour inclure ou pas les collectivités d’outre-mer"; + private static final String LITTERAL_PARAMETER_COM_DESCRIPTION="Ecrire true pour inclure les collectivités d’outre-mer"; @Path(ConstGeoApi.PATH_COMMUNE + CODE_PATTERN) @GET @@ -226,7 +226,7 @@ public Response getListe( value = Constants.PARAMETER_FILTRE) String filtreNomCommune, @Parameter(description = LITTERAL_PARAMETER_COM_DESCRIPTION, required = false, - schema = @Schema(type = Constants.TYPE_BOOLEAN,example="false")) @QueryParam( + schema = @Schema(type = Constants.TYPE_STRING,example="false")) @QueryParam( value = Constants.PARAMETER_STRING) String com ) { @@ -240,7 +240,7 @@ public Response getListe( return this .generateResponseListOfTerritoire( sparqlUtils - .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNomCommune),com)), + .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNomCommune),this.formatValidParameterComIfIsNull(com))), header, Communes.class, Commune.class); diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index a963f31b..27eae29f 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -66,11 +66,14 @@ public static String getArrondissementmunicipalByCodeAndDate(String code, String /* LIST */ public static String getListCommunes(String date,String filtreNomCommune,String com) { return getTerritoireFiltre(Constants.NONE, date,filtreNomCommune, EnumTypeGeographie.COMMUNE,com); - } + } public static String getListCollectivitesDOutreMer(String date) { return getTerritoire(Constants.NONE, date, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER); } + public static String getListCollectivitesDOutreMer(String date,String code) { + return getTerritoire(code, date, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER); + } public static String getListDepartements(String date) { return getTerritoire(Constants.NONE, date, EnumTypeGeographie.DEPARTEMENT); diff --git a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh index d4decb68..b4303348 100644 --- a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh +++ b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh @@ -5,7 +5,12 @@ FROM igeo:codeArticle ?typeArticle ; igeo:nom ?intitule ; igeo:nomSansArticle ?intituleSansArticle . - ?uri igeo:codeINSEE ?code . +<#if code != "none"> + ?uri igeo:codeINSEE '${code}' . + BIND('${code}' as ?code) +<#else> + ?uri igeo:codeINSEE ?code . + OPTIONAL { ?evenementCreation igeo:creation ?uri ; igeo:date ?dateCreation . From f31c9cdac4ac359b320304edecdf9553b667c1eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Mon, 10 Jan 2022 19:47:45 +0100 Subject: [PATCH 05/20] Service collectiviteDOutreMer descendant + MAJ ftlh --- .../fr/insee/rmes/api/geo/AbstractGeoApi.java | 4 +- .../territoire/CollectivitesDOutreMerAPI.java | 60 +++++++++++++++++ .../rmes/api/geo/territoire/CommuneApi.java | 6 +- .../fr/insee/rmes/queries/geo/GeoQueries.java | 64 ++++++++++++------- .../java/fr/insee/rmes/utils/Constants.java | 2 +- ...endantsOrDescendantsByCodeTypeDateCOM.ftlh | 41 ++++++++++++ ...toireByCodeAndDateAndFiltreNomCommune.ftlh | 26 ++++++-- src/main/resources/rmes-api.properties | 1 + 8 files changed, 170 insertions(+), 34 deletions(-) create mode 100644 src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh diff --git a/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java b/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java index 3d9d9142..5aeeeea4 100644 --- a/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java @@ -81,8 +81,8 @@ protected String formatValidParameterDateIfIsNull(String date) { return (date != null) ? date : DateUtils.getDateTodayStringFormat(); } - protected String formatValidParameterFiltreIfIsNull(String filtreNomCommune) { - return (filtreNomCommune != null) ? filtreNomCommune : "*"; + protected String formatValidParameterFiltreIfIsNull(String filtreNom) { + return (filtreNom != null) ? filtreNom : "*"; } protected String formatValidParameterComIfIsNull(String com) { diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java index a23d66a5..634c637d 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java @@ -139,4 +139,64 @@ public Response getByCode( new Commune(code)); } } + + + @Path(ConstGeoApi.PATH_COM + CODE_PATTERNCOM + ConstGeoApi.PATH_DESCENDANT) + @GET + @Produces({ + MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML + }) + @Operation( + operationId = LITTERAL_ID_OPERATION + ConstGeoApi.ID_OPERATION_DESCENDANTS, + summary = "Informations concernant les territoires inclus dans la collectivite d'outre-mer", + responses = { + @ApiResponse( + content = @Content(schema = @Schema(type = ARRAY, implementation = Territoire.class)), + description = LITTERAL_RESPONSE_DESCRIPTION) + }) + public Response getDescendants( + @Parameter( + description = ConstGeoApi.PATTERN_COM_DESCRIPTION, + required = true, + schema = @Schema( + pattern = ConstGeoApi.PATTERN_COM, + type = Constants.TYPE_STRING, example="986")) @PathParam(Constants.CODE) String code, + @Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header, + @Parameter( + description ="Filtre pour renvoyer les territoires inclus dans la collectivité d'outre-mer active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')", + required = false, + schema = @Schema(type = Constants.TYPE_STRING, format = Constants.FORMAT_DATE)) @QueryParam( + value = Constants.PARAMETER_DATE) String date, + @Parameter( + description = LITTERAL_PARAMETER_TYPE_DESCRIPTION+ "( Commune ou District )", + required = false, + schema = @Schema(type = Constants.TYPE_STRING, example="CollectiviteDOutreMer")) @QueryParam( + value = Constants.PARAMETER_TYPE) String typeTerritoire, + @Parameter( + description = LITTERAL_PARAMETER_NAME_DESCRIPTION, + required = false, + schema = @Schema(type = Constants.TYPE_STRING, example="Noumea")) @QueryParam( + value = Constants.PARAMETER_FILTRE) String filtreNom) { + + logger.debug("Received GET request for descendants of collectivite d'outre-mer {}", code); + + if ( ! this.verifyParametersTypeAndDateAreValid(typeTerritoire, date)) { + return this.generateBadRequestResponse(); + } + else { + return this + .generateResponseListOfTerritoire( + sparqlUtils + .executeSparqlQuery( + GeoQueries + .getDescendantsCollectiviteDOutreMer( + code, + this.formatValidParameterDateIfIsNull(date), + this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire),filtreNom)), + header, + Territoires.class, + Territoire.class); + } + } + } diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java index dfd36328..891ef7e0 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java @@ -223,10 +223,10 @@ public Response getListe( description = LITTERAL_PARAMETER_NAME_DESCRIPTION, required = false, schema = @Schema(type = Constants.TYPE_STRING, example="Bonnay")) @QueryParam( - value = Constants.PARAMETER_FILTRE) String filtreNomCommune, + value = Constants.PARAMETER_FILTRE) String filtreNom, @Parameter(description = LITTERAL_PARAMETER_COM_DESCRIPTION, required = false, - schema = @Schema(type = Constants.TYPE_STRING,example="false")) @QueryParam( + schema = @Schema(type = Constants.TYPE_STRING,example="none")) @QueryParam( value = Constants.PARAMETER_STRING) String com ) { @@ -240,7 +240,7 @@ public Response getListe( return this .generateResponseListOfTerritoire( sparqlUtils - .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNomCommune),this.formatValidParameterComIfIsNull(com))), + .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNom),this.formatValidParameterComIfIsNull(com))), header, Communes.class, Commune.class); diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index 27eae29f..c1ec7e90 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -18,8 +18,9 @@ public class GeoQueries extends Queries { private static final String TYPE_ORIGINE = "typeOrigine"; private static final String PREVIOUS = "previous"; private static final String QUERIES_FOLDER = "geographie/"; - private static final String FILTRE = "filtreNomCommune"; - private static final String COM = "false"; + private static final String FILTRE = "filtreNom"; + private static final String COM = "com"; + /* IDENTIFICATION */ @@ -38,6 +39,10 @@ public static String getAireAttractionByCodeAndDate(String code, String date) { public static String getCommuneByCodeAndDate(String code, String date) { return getTerritoire(code, date, EnumTypeGeographie.COMMUNE); } + + public static String getListCollectivitesDOutreMer(String date,String code) { + return getTerritoire(code, date, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER); + } public static String getDepartementByCodeAndDate(String code, String date) { return getTerritoire(code, date, EnumTypeGeographie.DEPARTEMENT); @@ -64,16 +69,13 @@ public static String getArrondissementmunicipalByCodeAndDate(String code, String } /* LIST */ - public static String getListCommunes(String date,String filtreNomCommune,String com) { - return getTerritoireFiltre(Constants.NONE, date,filtreNomCommune, EnumTypeGeographie.COMMUNE,com); + public static String getListCommunes(String date,String filtreNom,String com) { + return getTerritoireFiltre(Constants.NONE, date,filtreNom, EnumTypeGeographie.COMMUNE,com); } public static String getListCollectivitesDOutreMer(String date) { return getTerritoire(Constants.NONE, date, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER); } - public static String getListCollectivitesDOutreMer(String date,String code) { - return getTerritoire(code, date, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER); - } public static String getListDepartements(String date) { return getTerritoire(Constants.NONE, date, EnumTypeGeographie.DEPARTEMENT); @@ -113,56 +115,60 @@ public static String getListCommunesDeleguees(String date) { /* ASCENDANT */ public static String getAscendantsCommune(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE,Constants.NONE,Constants.NONE, true); } public static String getAscendantsDepartement(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DEPARTEMENT, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DEPARTEMENT,Constants.NONE,Constants.NONE, true); } public static String getAscendantsCommuneDeleguee(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE_DELEGUEE, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE_DELEGUEE,Constants.NONE,Constants.NONE, true); } public static String getAscendantsCommuneAssociee(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE_ASSOCIEE, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE_ASSOCIEE,Constants.NONE,Constants.NONE, true); } public static String getAscendantsArrondissementMunicipal(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT_MUNICIPAL, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT_MUNICIPAL,Constants.NONE,Constants.NONE, true); } public static String getAscendantsArrondissement(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT,Constants.NONE,Constants.NONE, true); } /* DESCENDANT */ public static String getDescendantsCommune(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE,Constants.NONE,Constants.NONE, false); + } + + public static String getDescendantsCollectiviteDOutreMer(String code, String date, String type,String filtreCom) { + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER, filtreCom,"true",false); } public static String getDescendantsZoneEmploi(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ZONE_EMPLOI, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ZONE_EMPLOI,Constants.NONE,Constants.NONE, false); } public static String getDescendantsAireAttraction(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.AIRE_ATTRACTION, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.AIRE_ATTRACTION,Constants.NONE,Constants.NONE, false); } public static String getDescendantsUniteUrbaine(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.UNITE_URBAINE, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.UNITE_URBAINE,Constants.NONE,Constants.NONE, false); } public static String getDescendantsDepartement(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DEPARTEMENT, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DEPARTEMENT,Constants.NONE,Constants.NONE, false); } public static String getDescendantsRegion(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.REGION, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.REGION,Constants.NONE,Constants.NONE, false); } public static String getDescendantsArrondissement(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT, Constants.NONE,Constants.NONE,false); } // NEXT @@ -277,17 +283,27 @@ private static String getAllProjectionQuery( return buildRequest(QUERIES_FOLDER, "getAllProjectionByTypeDate.ftlh", params); } + + private static String getAscendantOrDescendantsQuery( String code, String date, String type, EnumTypeGeographie typeOrigine, + String filtreNom, + String com, boolean ascendant) { Map params = buildCodeAndDateParams(code, date); params.put(TYPE, type); params.put(TYPE_ORIGINE, typeOrigine.getTypeObjetGeo()); + params.put(FILTRE, filtreNom); + params.put(COM,com); params.put(ASCENDANT, String.valueOf(ascendant)); + if (typeOrigine.getTypeObjetGeo() == "CollectiviteDOutreMer") { + return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh", params); + } else { return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDate.ftlh", params); + } } private static String getPreviousOrNextQuery( @@ -316,18 +332,18 @@ private static Map buildCodeAndDateParams(String code, String da } - private static String getTerritoireFiltre(String code, String date, String filtreNomCommune, EnumTypeGeographie typeGeo,String com) { - Map params = buildCodeAndDateAndFilterParams(code, date, filtreNomCommune,com); + private static String getTerritoireFiltre(String code, String date, String filtreNom, EnumTypeGeographie typeGeo,String com) { + Map params = buildCodeAndDateAndFilterParams(code, date, filtreNom,com); params.put("territoire", typeGeo.getTypeObjetGeo()); params.put("chefLieu", typeGeo.getChefLieuPredicate()); return buildRequest(QUERIES_FOLDER, "getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh", params); } - private static Map buildCodeAndDateAndFilterParams(String code, String date, String filtreNomCommune, String com) { + private static Map buildCodeAndDateAndFilterParams(String code, String date, String filtreNom, String com) { Map params = new HashMap<>(); params.put(CODE, code); params.put(DATE, date); - params.put(FILTRE, filtreNomCommune); + params.put(FILTRE, filtreNom); params.put(COM,com); return params; } diff --git a/src/main/java/fr/insee/rmes/utils/Constants.java b/src/main/java/fr/insee/rmes/utils/Constants.java index c941fae3..9bc11509 100644 --- a/src/main/java/fr/insee/rmes/utils/Constants.java +++ b/src/main/java/fr/insee/rmes/utils/Constants.java @@ -10,7 +10,7 @@ public class Constants { public static final String PARAMETER_DATE = "date"; public static final String PARAMETER_DATE_PROJECTION = "dateProjection"; public static final String PARAMETER_TYPE = "type"; - public static final String PARAMETER_FILTRE="filtreNomCommune"; + public static final String PARAMETER_FILTRE="filtreNom"; public static final String PARAMETER_BOOLEAN="com"; public static final String PARAMETER_STRING="com"; diff --git a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh new file mode 100644 index 00000000..19923f75 --- /dev/null +++ b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh @@ -0,0 +1,41 @@ +SELECT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression +WHERE { + { + SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle?cheflieu ?dateCreation ?dateSuppression ?dateCreationParent ?dateSuppressionParent + WHERE { + ?parent a :${typeOrigine} ; + :codeINSEE '${code}' ; + (^:subdivisionDirecteDe)+ ?ressource . + ?ressource a ?typeRDF; + a :${type}; + :codeINSEE ?code ; + :codeArticle ?typeArticle ; + :nom ?intitule ; + :nomSansArticle ?intituleSansArticle . + BIND(STR(?typeRDF) AS ?type). + BIND(STR(?ressource) AS ?uri). + OPTIONAL {?ressource ((:sousPrefecture|:prefecture|:prefectureDeRegion)/:codeINSEE) ?cheflieu.} + OPTIONAL {?parent (^:creation/:date) ?dateCreationParent.} + OPTIONAL {?parent (^:suppression/:date) ?dateSuppressionParent.} + OPTIONAL {?ressource (^:creation/:date) ?dateCreation.} + OPTIONAL {?ressource (^:suppression/:date) ?dateSuppression.} + # ## Début du filtre sur le libellé ## + # La chaîne utilisateur dans une variable query + BIND('${filtreNom}' AS ?query). + # Formattage du nom avec article pour comparaison non polluée par majuscules et accents + BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . + # Formattage du nom sans article pour comparaison non polluée par majuscules et accents + BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intituleSansArticle), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNomSansArticle) . + # Formattage de la chaîne utilisateur pour comparaison non polluée par majuscules et accents (avec recodage saint/sainte et sur/sous). Ajout d’un ^ au début pour chercher les nom qui commencent par la chaîne utilisateur + BIND (CONCAT("^", REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?query), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "([^/]+)[/]", "$1-sur-"),"([^\\\\]+)[\\\\]", "$1-sous-"), "[-_']", " "),"[^a-z0-9() ]", ""), "[ ]{2,}", " "), "^st(e)? ", "saint$1 "), "") AS ?formattedQuery) . + # Filtrage par comparaison de la chaîne utilisateur formatée avec le nom formaté avec et sans article + FILTER (REGEX(?formattedNom, ?formattedQuery) || REGEX(?formattedNomSansArticle, ?formattedQuery)) + ## Fin du filtre sur le libellé ## + } + } + FILTER(!BOUND(?dateCreationParent) || ?dateCreationParent <= '${date}'^^xsd:date) + FILTER(!BOUND(?dateSuppressionParent) || ?dateSuppressionParent > '${date}'^^xsd:date) + FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${date}'^^xsd:date) + FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '${date}'^^xsd:date) +} +ORDER BY ?type ?code \ No newline at end of file diff --git a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh index b4303348..9ee53d71 100644 --- a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh +++ b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh @@ -1,10 +1,18 @@ SELECT DISTINCT ?uri ?code ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?chefLieu FROM WHERE { +<#if com != "none"> ?uri a igeo:${territoire} ; igeo:codeArticle ?typeArticle ; igeo:nom ?intitule ; igeo:nomSansArticle ?intituleSansArticle . +<#else> + ?uri a igeo:${territoire} ; + igeo:codeArticle ?typeArticle ; + (igeo:subdivisionDirecteDe)+ ; + igeo:nom ?intitule ; + igeo:nomSansArticle ?intituleSansArticle . + <#if code != "none"> ?uri igeo:codeINSEE '${code}' . BIND('${code}' as ?code) @@ -35,17 +43,27 @@ FROM FILTER(!BOUND(?dateCreationChefLieu) || ?dateCreationChefLieu <= '${date}'^^xsd:date) FILTER(!BOUND(?dateSuppressionChefLieu) || ?dateSuppressionChefLieu > '${date}'^^xsd:date) + } -<#if filtreNomCommune != "*"> - BIND( '${filtreNomCommune}' AS ?query). + #blabla# +<#if filtreNom != "*"> + BIND( '${filtreNom}' AS ?query). BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intituleSansArticle), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNomSansArticle) . BIND (CONCAT("^", REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?query), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "([^/]+)[/]", "$1-sur-"),"([^\\\\]+)[\\\\]", "$1-sous-"), "[-_']", " "),"[^a-z0-9() ]", ""), "[ ]{2,}", " "), "^st(e)? ", "saint$1 "), "") AS ?formattedQuery) . FILTER (REGEX(?formattedNom, ?formattedQuery) || REGEX(?formattedNomSansArticle, ?formattedQuery)) - -<#if date != "*"> + <#if date != "*"> FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${date}'^^xsd:date) FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '${date}'^^xsd:date) + + +<#else> + + <#if date != "*"> + FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${date}'^^xsd:date) + FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '${date}'^^xsd:date) + + } ORDER BY ?code diff --git a/src/main/resources/rmes-api.properties b/src/main/resources/rmes-api.properties index 90d5bd5e..decec0c2 100644 --- a/src/main/resources/rmes-api.properties +++ b/src/main/resources/rmes-api.properties @@ -4,6 +4,7 @@ fr.insee.rmes.api.log.configuration = log4j2.xml # database # fr.insee.rmes.api.sparqlEndpoint = http://dvrmessnczlht01.ad.insee.intra/sparql fr.insee.rmes.api.sparqlEndpoint = http://qfrmessnczlht01.ad.insee.intra/sparql +#fr.insee.rmes.api.sparqlEndpoint = http://localhost:7200/sparql fr.insee.rmes.api.baseHost = http://id.insee.fr # files storage From d4b900fe20ed2f85696fab7dee69429bab520874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Wed, 12 Jan 2022 09:21:58 +0100 Subject: [PATCH 06/20] Ajout District et Ajout filtre sur le service departement/code/descendant --- .../territoire/CollectivitesDOutreMerAPI.java | 16 ++-- .../api/geo/territoire/DepartementApi.java | 11 ++- .../rmes/modeles/geo/EnumTypeGeographie.java | 6 +- .../rmes/modeles/geo/territoire/District.java | 92 +++++++++++++++++++ .../modeles/geo/territoires/Districts.java | 40 ++++++++ .../fr/insee/rmes/queries/geo/GeoQueries.java | 18 ++-- ...AscendantsOrDescendantsByCodeTypeDate.ftlh | 12 +++ ...endantsOrDescendantsByCodeTypeDateCOM.ftlh | 38 ++++---- src/main/resources/rmes-api.properties | 6 +- 9 files changed, 196 insertions(+), 43 deletions(-) create mode 100644 src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java create mode 100644 src/main/java/fr/insee/rmes/modeles/geo/territoires/Districts.java diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java index 634c637d..9a074896 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java @@ -53,7 +53,7 @@ public class CollectivitesDOutreMerAPI extends AbstractGeoApi { private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le nom de la collectivite d'outre-mer" ; private static final String LITTERAL_CODE_EXAMPLE = "986"; - private static final String LITTERAL_PARAMETER_COM_DESCRIPTION="Filtre pour inclure ou pas les collectivités d’outre-mer"; + @Path(ConstGeoApi.PATH_LISTE_COM) @@ -107,7 +107,7 @@ public Response getListe( summary = LITTERAL_OPERATION_SUMMARY, responses = { @ApiResponse( - content = @Content(schema = @Schema(implementation = Commune.class)), + content = @Content(schema = @Schema(implementation = CollectiviteDOutreMer.class)), description = LITTERAL_RESPONSE_DESCRIPTION) }) public Response getByCode( @@ -134,9 +134,9 @@ public Response getByCode( .generateResponseATerritoireByCode( sparqlUtils .executeSparqlQuery( - GeoQueries.getListCollectivitesDOutreMer(code, this.formatValidParameterDateIfIsNull(date))), + GeoQueries.getCollectiviteDOutreMerByCodeAndDate(code, this.formatValidParameterDateIfIsNull(date))), header, - new Commune(code)); + new CollectiviteDOutreMer(code)); } } @@ -160,7 +160,7 @@ public Response getDescendants( required = true, schema = @Schema( pattern = ConstGeoApi.PATTERN_COM, - type = Constants.TYPE_STRING, example="986")) @PathParam(Constants.CODE) String code, + type = Constants.TYPE_STRING, example="987")) @PathParam(Constants.CODE) String code, @Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header, @Parameter( description ="Filtre pour renvoyer les territoires inclus dans la collectivité d'outre-mer active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')", @@ -170,10 +170,10 @@ public Response getDescendants( @Parameter( description = LITTERAL_PARAMETER_TYPE_DESCRIPTION+ "( Commune ou District )", required = false, - schema = @Schema(type = Constants.TYPE_STRING, example="CollectiviteDOutreMer")) @QueryParam( + schema = @Schema(type = Constants.TYPE_STRING, example="Commune")) @QueryParam( value = Constants.PARAMETER_TYPE) String typeTerritoire, @Parameter( - description = LITTERAL_PARAMETER_NAME_DESCRIPTION, + description = "Filtre sur le nom du ou des territoires renvoyés", required = false, schema = @Schema(type = Constants.TYPE_STRING, example="Noumea")) @QueryParam( value = Constants.PARAMETER_FILTRE) String filtreNom) { @@ -192,7 +192,7 @@ public Response getDescendants( .getDescendantsCollectiviteDOutreMer( code, this.formatValidParameterDateIfIsNull(date), - this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire),filtreNom)), + this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire),this.formatValidParameterFiltreIfIsNull(filtreNom))), header, Territoires.class, Territoire.class); diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/DepartementApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/DepartementApi.java index 7dd4ba01..5cc22529 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/DepartementApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/DepartementApi.java @@ -42,7 +42,7 @@ public class DepartementApi extends AbstractGeoApi { "Informations sur un departement identifié par son code (deux ou trois caractères)"; private static final String LITTERAL_RESPONSE_DESCRIPTION = "Departement"; private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; - + private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le Filtre sur le nom des territoires renvoyés" ; private static final String LITTERAL_CODE_EXAMPLE = "22"; private static final String LITTERAL_DATE_EXAMPLE = "1950-01-01"; @@ -170,7 +170,12 @@ public Response getDescendants( description = LITTERAL_PARAMETER_TYPE_DESCRIPTION, required = false, schema = @Schema(type = Constants.TYPE_STRING)) @QueryParam( - value = Constants.PARAMETER_TYPE) String typeTerritoire) { + value = Constants.PARAMETER_TYPE) String typeTerritoire, + @Parameter( + description = LITTERAL_PARAMETER_NAME_DESCRIPTION, + required = false, + schema = @Schema(type = Constants.TYPE_STRING)) @QueryParam( + value = Constants.PARAMETER_FILTRE) String filtreNom) { logger.debug("Received GET request for descendants of departement {}", code); @@ -186,7 +191,7 @@ public Response getDescendants( .getDescendantsDepartement( code, this.formatValidParameterDateIfIsNull(date), - this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire))), + this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire),this.formatValidParameterFiltreIfIsNull(filtreNom))), header, Territoires.class, Territoire.class); diff --git a/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java b/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java index 0d00943a..5493d7ce 100644 --- a/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java +++ b/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java @@ -12,6 +12,7 @@ import fr.insee.rmes.modeles.geo.territoire.CommuneAssociee; import fr.insee.rmes.modeles.geo.territoire.CommuneDeleguee; import fr.insee.rmes.modeles.geo.territoire.Departement; +import fr.insee.rmes.modeles.geo.territoire.District; import fr.insee.rmes.modeles.geo.territoire.Region; import fr.insee.rmes.modeles.geo.territoire.Territoire; import fr.insee.rmes.modeles.geo.territoire.UniteUrbaine; @@ -25,6 +26,7 @@ import fr.insee.rmes.modeles.geo.territoires.CommunesAssociees; import fr.insee.rmes.modeles.geo.territoires.CommunesDeleguees; import fr.insee.rmes.modeles.geo.territoires.Departements; +import fr.insee.rmes.modeles.geo.territoires.Districts; import fr.insee.rmes.modeles.geo.territoires.Regions; import fr.insee.rmes.modeles.geo.territoires.Territoires; import fr.insee.rmes.modeles.geo.territoires.UnitesUrbaines; @@ -44,8 +46,8 @@ public enum EnumTypeGeographie { ARRONDISSEMENT_MUNICIPAL("ArrondissementMunicipal",ArrondissementMunicipal.class,ArrondissementsMunicipaux.class, Constants.NONE), ZONE_EMPLOI("ZoneDEmploi2020", ZoneEmploi.class,ZonesEmploi.class,Constants.NONE), AIRE_ATTRACTION("AireDAttractionDesVilles2020",AireAttraction.class,AiresAttraction.class,Constants.NONE), - UNITE_URBAINE("UniteUrbaine2020", UniteUrbaine.class,UnitesUrbaines.class,Constants.NONE); - + UNITE_URBAINE("UniteUrbaine2020", UniteUrbaine.class,UnitesUrbaines.class,Constants.NONE), + DISTRICT("Disctrict",District.class,Districts.class,Constants.NONE); private String typeObjetGeo; private Class classNameOfGeoType; diff --git a/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java b/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java new file mode 100644 index 00000000..05fdb86a --- /dev/null +++ b/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java @@ -0,0 +1,92 @@ +package fr.insee.rmes.modeles.geo.territoire; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; + +import fr.insee.rmes.modeles.geo.EnumTypeGeographie; +import fr.insee.rmes.modeles.geo.IntituleSansArticle; +import io.swagger.v3.oas.annotations.media.Schema; + +@XmlRootElement(name = "Disctrict") +@JacksonXmlRootElement(localName = "District") +@XmlAccessorType(XmlAccessType.FIELD) +@Schema(description = "Objet représentant un district") +public class District extends Territoire { + + // No-args constructor needed for JAXB + public District() { + this.type = EnumTypeGeographie.DISTRICT.getTypeObjetGeo(); + this.intituleSansArticle = new IntituleSansArticle(); + } + + public District(String code) { + this.type = EnumTypeGeographie.DISTRICT.getTypeObjetGeo(); + this.code = code; + this.intituleSansArticle = new IntituleSansArticle(); + } + + public District( + String code, + String uri, + String intitule, + String type, + String dateCreation, + String dateSuppression, + IntituleSansArticle intituleSansArticle, + String chefLieu) { + super(code, uri, intitule, type, dateCreation, dateSuppression, intituleSansArticle, chefLieu); + } + + @Override + @JacksonXmlProperty(isAttribute = true) + @Schema(example = "98412") + public String getCode() { + return code; + } + + @Override + @JacksonXmlProperty(isAttribute = true) + @Schema(example = "http://id.insee.fr/geo/commune/55323") /*to do changer adresse */ + public String getUri() { + return uri; + } + + @Override + @JacksonXmlProperty(localName = "Intitule") + @JsonProperty(value = "intitule") + @Schema(example = "Archipel des Kerguelen") + public String getIntitule() { + return intitule; + } + + @Override + @JacksonXmlProperty(localName = "Type") + @Schema(example = "Commune") + public String getType() { + return type; + } + + @Override + @JacksonXmlProperty(localName = "DateCreation") + @Schema( + description = "Date de création du district si il n’existait pas au premier COG du 1er janvier 1943", + example = "1943-01-01") + public String getDateCreation() { + return dateCreation; + } + + @Override + @JacksonXmlProperty(localName = "DateSuppression") + @Schema(description = "Date de suppression du district si il a été supprimée. ", example = "2019-01-01") + public String getDateSuppression() { + return dateSuppression; + } + + + +} diff --git a/src/main/java/fr/insee/rmes/modeles/geo/territoires/Districts.java b/src/main/java/fr/insee/rmes/modeles/geo/territoires/Districts.java new file mode 100644 index 00000000..7707782a --- /dev/null +++ b/src/main/java/fr/insee/rmes/modeles/geo/territoires/Districts.java @@ -0,0 +1,40 @@ +package fr.insee.rmes.modeles.geo.territoires; + + +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; + +import fr.insee.rmes.modeles.geo.territoire.District; +import io.swagger.v3.oas.annotations.media.Schema; + +@JacksonXmlRootElement(localName = "Districts") +@XmlAccessorType(XmlAccessType.FIELD) +@Schema(name = "Districts", description = "Tableau représentant les districts") + +public class Districts extends Territoires { + + private List districts = null; + + public Districts() {} + + public Districts(List districts) { + this.districts = districts; + } + + @JacksonXmlProperty(isAttribute = true, localName = "District") + @JacksonXmlElementWrapper(useWrapping = false) + public List getDistricts() { + return districts; + } + + public void setDistricts(List districts) { + this.districts = districts; + } + +} diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index c1ec7e90..130ed5ac 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -40,8 +40,8 @@ public static String getCommuneByCodeAndDate(String code, String date) { return getTerritoire(code, date, EnumTypeGeographie.COMMUNE); } - public static String getListCollectivitesDOutreMer(String date,String code) { - return getTerritoire(code, date, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER); + public static String getCollectiviteDOutreMerByCodeAndDate(String code,String date) { + return getTerritoireFiltre(code, date,"*", EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER,"*"); } public static String getDepartementByCodeAndDate(String code, String date) { @@ -143,8 +143,8 @@ public static String getDescendantsCommune(String code, String date, String type return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE,Constants.NONE,Constants.NONE, false); } - public static String getDescendantsCollectiviteDOutreMer(String code, String date, String type,String filtreCom) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER, filtreCom,"true",false); + public static String getDescendantsCollectiviteDOutreMer(String code, String date, String type,String filtreNom) { + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER, filtreNom,Constants.NONE,false); } public static String getDescendantsZoneEmploi(String code, String date, String type) { @@ -159,8 +159,8 @@ public static String getDescendantsUniteUrbaine(String code, String date, String return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.UNITE_URBAINE,Constants.NONE,Constants.NONE, false); } - public static String getDescendantsDepartement(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DEPARTEMENT,Constants.NONE,Constants.NONE, false); + public static String getDescendantsDepartement(String code, String date, String type,String filtreNom) { + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DEPARTEMENT,filtreNom,Constants.NONE, false); } public static String getDescendantsRegion(String code, String date, String type) { @@ -299,11 +299,11 @@ private static String getAscendantOrDescendantsQuery( params.put(FILTRE, filtreNom); params.put(COM,com); params.put(ASCENDANT, String.valueOf(ascendant)); - if (typeOrigine.getTypeObjetGeo() == "CollectiviteDOutreMer") { + /*if (typeOrigine.getTypeObjetGeo() == "CollectiviteDOutreMer") { return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh", params); - } else { + } else {*/ return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDate.ftlh", params); - } + /*}*/ } private static String getPreviousOrNextQuery( diff --git a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh index 5f4c01a0..0c926632 100644 --- a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh +++ b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh @@ -43,6 +43,18 @@ FROM ?evenementSuppression igeo:suppression ?uri ; igeo:date ?dateSuppression. } +<#if filtreNom !='*'> + BIND('${filtreNom}' AS ?query). + # Formattage du nom avec article pour comparaison non polluée par majuscules et accents + BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . + # Formattage du nom sans article pour comparaison non polluée par majuscules et accents + BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intituleSansArticle), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNomSansArticle) . + # Formattage de la chaîne utilisateur pour comparaison non polluée par majuscules et accents (avec recodage saint/sainte et sur/sous). Ajout d’un ^ au début pour chercher les nom qui commencent par la chaîne utilisateur + BIND (CONCAT("^", REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?query), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "([^/]+)[/]", "$1-sur-"),"([^\\\\]+)[\\\\]", "$1-sous-"), "[-_']", " "),"[^a-z0-9() ]", ""), "[ ]{2,}", " "), "^st(e)? ", "saint$1 "), "") AS ?formattedQuery) . + # Filtrage par comparaison de la chaîne utilisateur formatée avec le nom formaté avec et sans article + FILTER (REGEX(?formattedNom, ?formattedQuery) || REGEX(?formattedNomSansArticle, ?formattedQuery)) + ## Fin du filtre sur le libellé ## + FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${date}'^^xsd:date) FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '${date}'^^xsd:date) diff --git a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh index 19923f75..8a224870 100644 --- a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh +++ b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh @@ -1,27 +1,28 @@ -SELECT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression +SELECT DISTINCT ?uri ?code ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?chefLieu WHERE { { - SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle?cheflieu ?dateCreation ?dateSuppression ?dateCreationParent ?dateSuppressionParent + SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression ?dateCreationParent ?dateSuppressionParent WHERE { - ?parent a :${typeOrigine} ; - :codeINSEE '${code}' ; - (^:subdivisionDirecteDe)+ ?ressource . + ?parent a igeo:CollectiviteDOutreMer ; + igeo:codeINSEE '${code}' ; + (^igeo:subdivisionDirecteDe)+ ?ressource . ?ressource a ?typeRDF; - a :${type}; - :codeINSEE ?code ; - :codeArticle ?typeArticle ; - :nom ?intitule ; - :nomSansArticle ?intituleSansArticle . - BIND(STR(?typeRDF) AS ?type). - BIND(STR(?ressource) AS ?uri). - OPTIONAL {?ressource ((:sousPrefecture|:prefecture|:prefectureDeRegion)/:codeINSEE) ?cheflieu.} - OPTIONAL {?parent (^:creation/:date) ?dateCreationParent.} - OPTIONAL {?parent (^:suppression/:date) ?dateSuppressionParent.} - OPTIONAL {?ressource (^:creation/:date) ?dateCreation.} - OPTIONAL {?ressource (^:suppression/:date) ?dateSuppression.} + a igeo:${type}; + igeo:codeINSEE ?code ; + a ?type ; + igeo:codeArticle ?typeArticle ; + igeo:nom ?intitule ; + igeo:nomSansArticle ?intituleSansArticle . + BIND(STR(?ressource) AS ?uri). + OPTIONAL {?ressource ((igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion)/igeo:codeINSEE) ?cheflieu.} + OPTIONAL {?parent (^igeo:creation/igeo:date) ?dateCreationParent.} + OPTIONAL {?parent (^igeo:suppression/igeo:date) ?dateSuppressionParent.} + OPTIONAL {?ressource (^igeo:creation/igeo:date) ?dateCreation.} + OPTIONAL {?ressource (^igeo:suppression/igeo:date) ?dateSuppression.} +<#if filtreNom !='*'> # ## Début du filtre sur le libellé ## # La chaîne utilisateur dans une variable query - BIND('${filtreNom}' AS ?query). + BIND('papeete' AS ?query). # Formattage du nom avec article pour comparaison non polluée par majuscules et accents BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . # Formattage du nom sans article pour comparaison non polluée par majuscules et accents @@ -31,6 +32,7 @@ WHERE { # Filtrage par comparaison de la chaîne utilisateur formatée avec le nom formaté avec et sans article FILTER (REGEX(?formattedNom, ?formattedQuery) || REGEX(?formattedNomSansArticle, ?formattedQuery)) ## Fin du filtre sur le libellé ## + } } FILTER(!BOUND(?dateCreationParent) || ?dateCreationParent <= '${date}'^^xsd:date) diff --git a/src/main/resources/rmes-api.properties b/src/main/resources/rmes-api.properties index decec0c2..484a8c65 100644 --- a/src/main/resources/rmes-api.properties +++ b/src/main/resources/rmes-api.properties @@ -3,9 +3,9 @@ fr.insee.rmes.api.log.configuration = log4j2.xml # database # fr.insee.rmes.api.sparqlEndpoint = http://dvrmessnczlht01.ad.insee.intra/sparql -fr.insee.rmes.api.sparqlEndpoint = http://qfrmessnczlht01.ad.insee.intra/sparql -#fr.insee.rmes.api.sparqlEndpoint = http://localhost:7200/sparql -fr.insee.rmes.api.baseHost = http://id.insee.fr +#fr.insee.rmes.api.sparqlEndpoint = http://qfrmessnczlht01.ad.insee.intra/sparql +fr.insee.rmes.api.sparqlEndpoint = http://localhost:7200/repositories/geographie +fr.insee.rmes.api.baseHost = http://localhost:7200/ # files storage # physical place From ccebd10fa440be48c8c7abecdddf6fc0a6e884bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Thu, 13 Jan 2022 13:30:04 +0100 Subject: [PATCH 07/20] corrections diverses --- .../fr/insee/rmes/api/geo/ConstGeoApi.java | 2 +- .../territoire/CollectivitesDOutreMerAPI.java | 28 ++++++++----------- .../rmes/modeles/geo/EnumTypeGeographie.java | 2 +- .../geo/territoire/CollectiviteDOutreMer.java | 6 ++-- .../rmes/modeles/geo/territoire/District.java | 6 ++-- .../fr/insee/rmes/queries/geo/GeoQueries.java | 6 ++-- ...endantsOrDescendantsByCodeTypeDateCOM.ftlh | 16 ++++++----- .../CommuneApiIntegrationTest.java | 4 +-- .../DepartementApiIntegrationTest.java | 8 +++--- .../api/geo/territoire/CommuneApiTest.java | 16 +++++------ .../geo/territoire/DepartementApiTest.java | 18 ++++++------ 11 files changed, 54 insertions(+), 58 deletions(-) diff --git a/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java b/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java index 92310864..bcac05f3 100644 --- a/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java @@ -54,7 +54,7 @@ public class ConstGeoApi { public static final String PATTERN_ARRONDISSEMENT_MUNICIPAL = ""; public static final String PATTERN_COMMUNE_DESCRIPTION = "Code de la commune (cinq caractères)"; - public static final String PATTERN_COM_DESCRIPTION= "Code de la collectivite d'outre-mer"; + public static final String PATTERN_COM_DESCRIPTION= "Code de la collectivite d'outre-mer (trois caractères)"; public static final String PATTERN_COMMUNE_ASSOCIEE_DESCRIPTION = "Code de la commune associée (cinq caractères)"; public static final String PATTERN_COMMUNE_DELEGUEE_DESCRIPTION = "Code de la commune déléguée (cinq caractères)"; public static final String PATTERN_ZONE_EMPLOI_DESCRIPTION = "Code de la zone d'emploi (quatre chiffres)"; diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java index 9a074896..4a01de5d 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java @@ -156,7 +156,7 @@ public Response getByCode( }) public Response getDescendants( @Parameter( - description = ConstGeoApi.PATTERN_COM_DESCRIPTION, + description = "code de la commune ou du district (3 caractères)", required = true, schema = @Schema( pattern = ConstGeoApi.PATTERN_COM, @@ -170,12 +170,12 @@ public Response getDescendants( @Parameter( description = LITTERAL_PARAMETER_TYPE_DESCRIPTION+ "( Commune ou District )", required = false, - schema = @Schema(type = Constants.TYPE_STRING, example="Commune")) @QueryParam( + schema = @Schema(type = Constants.TYPE_STRING)) @QueryParam( value = Constants.PARAMETER_TYPE) String typeTerritoire, @Parameter( description = "Filtre sur le nom du ou des territoires renvoyés", required = false, - schema = @Schema(type = Constants.TYPE_STRING, example="Noumea")) @QueryParam( + schema = @Schema(type = Constants.TYPE_STRING)) @QueryParam( value = Constants.PARAMETER_FILTRE) String filtreNom) { logger.debug("Received GET request for descendants of collectivite d'outre-mer {}", code); @@ -183,20 +183,14 @@ public Response getDescendants( if ( ! this.verifyParametersTypeAndDateAreValid(typeTerritoire, date)) { return this.generateBadRequestResponse(); } - else { - return this - .generateResponseListOfTerritoire( - sparqlUtils - .executeSparqlQuery( - GeoQueries - .getDescendantsCollectiviteDOutreMer( - code, - this.formatValidParameterDateIfIsNull(date), - this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire),this.formatValidParameterFiltreIfIsNull(filtreNom))), - header, - Territoires.class, - Territoire.class); - } + else { + return this.generateResponseListOfTerritoire( + sparqlUtils.executeSparqlQuery(GeoQueries.getDescendantsCollectiviteDOutreMer(code, + this.formatValidParameterDateIfIsNull(date), + this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire), + this.formatValidParameterFiltreIfIsNull(filtreNom))), + header, Territoires.class, Territoire.class); + } } } diff --git a/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java b/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java index 5493d7ce..4985ca58 100644 --- a/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java +++ b/src/main/java/fr/insee/rmes/modeles/geo/EnumTypeGeographie.java @@ -47,7 +47,7 @@ public enum EnumTypeGeographie { ZONE_EMPLOI("ZoneDEmploi2020", ZoneEmploi.class,ZonesEmploi.class,Constants.NONE), AIRE_ATTRACTION("AireDAttractionDesVilles2020",AireAttraction.class,AiresAttraction.class,Constants.NONE), UNITE_URBAINE("UniteUrbaine2020", UniteUrbaine.class,UnitesUrbaines.class,Constants.NONE), - DISTRICT("Disctrict",District.class,Districts.class,Constants.NONE); + DISTRICT("District",District.class,Districts.class,Constants.NONE); private String typeObjetGeo; private Class classNameOfGeoType; diff --git a/src/main/java/fr/insee/rmes/modeles/geo/territoire/CollectiviteDOutreMer.java b/src/main/java/fr/insee/rmes/modeles/geo/territoire/CollectiviteDOutreMer.java index f7867621..ce4c3497 100644 --- a/src/main/java/fr/insee/rmes/modeles/geo/territoire/CollectiviteDOutreMer.java +++ b/src/main/java/fr/insee/rmes/modeles/geo/territoire/CollectiviteDOutreMer.java @@ -67,7 +67,7 @@ public String getIntitule() { @Override @JacksonXmlProperty(localName = "Type") - @Schema(example = "CollectiviteDOutreMer") + @Schema(example = "Commune") public String getType() { return type; } @@ -75,7 +75,7 @@ public String getType() { @Override @JacksonXmlProperty(localName = "DateCreation") @Schema( - description = "Date de création de la commune si elle n’existait pas au premier COG du 1er janvier 1943", + description = "Date de création de la commune/district si il/elle n’existait pas au premier COG du 1er janvier 1943", example = "1943-01-01") public String getDateCreation() { return dateCreation; @@ -83,7 +83,7 @@ public String getDateCreation() { @Override @JacksonXmlProperty(localName = "DateSuppression") - @Schema(description = "Date de suppression de la commune si elle a été supprimée. ", example = "2019-01-01") + @Schema(description = "Date de suppression de la commune/district si il/elle a été supprimé(e). ", example = "2019-01-01") public String getDateSuppression() { return dateSuppression; } diff --git a/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java b/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java index 05fdb86a..15542fd7 100644 --- a/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java +++ b/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java @@ -12,7 +12,7 @@ import fr.insee.rmes.modeles.geo.IntituleSansArticle; import io.swagger.v3.oas.annotations.media.Schema; -@XmlRootElement(name = "Disctrict") +@XmlRootElement(name = "District") @JacksonXmlRootElement(localName = "District") @XmlAccessorType(XmlAccessType.FIELD) @Schema(description = "Objet représentant un district") @@ -51,7 +51,7 @@ public String getCode() { @Override @JacksonXmlProperty(isAttribute = true) - @Schema(example = "http://id.insee.fr/geo/commune/55323") /*to do changer adresse */ + @Schema(example = "http://id.insee.fr/geo/district/78c18c16-2d63-486d-9ff0-e36e76a95718") /*to do changer adresse */ public String getUri() { return uri; } @@ -66,7 +66,7 @@ public String getIntitule() { @Override @JacksonXmlProperty(localName = "Type") - @Schema(example = "Commune") + @Schema(example = "District") public String getType() { return type; } diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index 130ed5ac..28b4a384 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -299,11 +299,11 @@ private static String getAscendantOrDescendantsQuery( params.put(FILTRE, filtreNom); params.put(COM,com); params.put(ASCENDANT, String.valueOf(ascendant)); - /*if (typeOrigine.getTypeObjetGeo() == "CollectiviteDOutreMer") { + if (typeOrigine.getTypeObjetGeo() == "CollectiviteDOutreMer") { return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh", params); - } else {*/ + } else { return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDate.ftlh", params); - /*}*/ + } } private static String getPreviousOrNextQuery( diff --git a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh index 8a224870..23320533 100644 --- a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh +++ b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh @@ -1,19 +1,21 @@ -SELECT DISTINCT ?uri ?code ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?chefLieu +SELECT ?uri ?code ?type ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?cheflieu WHERE { { - SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression ?dateCreationParent ?dateSuppressionParent + SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle?cheflieu ?dateCreation ?dateSuppression ?dateCreationParent ?dateSuppressionParent WHERE { - ?parent a igeo:CollectiviteDOutreMer ; + ?parent a igeo:${typeOrigine} ; igeo:codeINSEE '${code}' ; (^igeo:subdivisionDirecteDe)+ ?ressource . - ?ressource a ?typeRDF; + ?ressource a ?typeRDF; +<#if type != 'none'> a igeo:${type}; + igeo:codeINSEE ?code ; - a ?type ; igeo:codeArticle ?typeArticle ; igeo:nom ?intitule ; igeo:nomSansArticle ?intituleSansArticle . - BIND(STR(?ressource) AS ?uri). + BIND(STR(?typeRDF) AS ?type). + BIND(STR(?ressource) AS ?uri). OPTIONAL {?ressource ((igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion)/igeo:codeINSEE) ?cheflieu.} OPTIONAL {?parent (^igeo:creation/igeo:date) ?dateCreationParent.} OPTIONAL {?parent (^igeo:suppression/igeo:date) ?dateSuppressionParent.} @@ -22,7 +24,7 @@ WHERE { <#if filtreNom !='*'> # ## Début du filtre sur le libellé ## # La chaîne utilisateur dans une variable query - BIND('papeete' AS ?query). + BIND('${filtreNom}' AS ?query). # Formattage du nom avec article pour comparaison non polluée par majuscules et accents BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . # Formattage du nom sans article pour comparaison non polluée par majuscules et accents diff --git a/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/CommuneApiIntegrationTest.java b/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/CommuneApiIntegrationTest.java index 3c7dfa72..eb0e8eb7 100644 --- a/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/CommuneApiIntegrationTest.java +++ b/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/CommuneApiIntegrationTest.java @@ -55,7 +55,7 @@ public void givengetCommune_whenCorrectRequest_With_XML_Header_thenResponseIsOk( public void givengetListeCommunes_whenCorrectRequest_With_JSON_Header_thenResponseIsOk() { when(mockSparqlUtils.executeSparqlQuery(anyString())) .thenReturn(ConstantForIntegration.COMMUNE_MOCK_SERVER_RETURN_LISTE); - Response response = geoApi.getListe(MediaType.APPLICATION_JSON, null,"*"); + Response response = geoApi.getListe(MediaType.APPLICATION_JSON, null,"*", null); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertEquals(ConstantForIntegration.COMMUNE_EXPECTED_RESPONSE_LISTE_TOP_JSON, response.getEntity()); } @@ -64,7 +64,7 @@ public void givengetListeCommunes_whenCorrectRequest_With_JSON_Header_thenRespon public void givengetListeCommunes_whenCorrectRequest_With_XML_Header_thenResponseIsOk() { when(mockSparqlUtils.executeSparqlQuery(anyString())) .thenReturn(ConstantForIntegration.COMMUNE_MOCK_SERVER_RETURN_LISTE); - Response response = geoApi.getListe(MediaType.APPLICATION_XML, null,null); + Response response = geoApi.getListe(MediaType.APPLICATION_XML, null,null, null); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertEquals(ConstantForIntegration.COMMUNE_EXPECTED_RESPONSE_LISTE_TOP_XML, response.getEntity()); } diff --git a/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/DepartementApiIntegrationTest.java b/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/DepartementApiIntegrationTest.java index 736f1465..cd683ceb 100644 --- a/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/DepartementApiIntegrationTest.java +++ b/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/DepartementApiIntegrationTest.java @@ -86,20 +86,20 @@ public void givengetAscendantsDepartements_whenCorrectRequest_With_XML_Header_th assertEquals(ConstantForIntegration.DEPARTEMENT_EXPECTED_RESPONSE_ASCENDANTS_XML, response.getEntity()); } - @Test + @Test /*modifier suite a changement du nombre de variables */ public void givengetDescendantsDepartements_whenCorrectRequest_With_JSON_Header_thenResponseIsOk() { when(mockSparqlUtils.executeSparqlQuery(anyString())) .thenReturn(ConstantForIntegration.DEPARTEMENT_MOCK_SERVER_RETURN_DESCENDANTS); - Response response = geoApi.getDescendants(CODE, MediaType.APPLICATION_JSON, null, null); + Response response = geoApi.getDescendants(CODE, MediaType.APPLICATION_JSON, null, null, null); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertEquals(ConstantForIntegration.DEPARTEMENT_EXPECTED_RESPONSE_DESCENDANTS_JSON, response.getEntity()); } - @Test + @Test /*modifier suite a changement du nombre de variables */ public void givengetDescendantsDepartements_whenCorrectRequest_With_XML_Header_thenResponseIsOk() { when(mockSparqlUtils.executeSparqlQuery(anyString())) .thenReturn(ConstantForIntegration.DEPARTEMENT_MOCK_SERVER_RETURN_DESCENDANTS); - Response response = geoApi.getDescendants(CODE, MediaType.APPLICATION_XML, null, null); + Response response = geoApi.getDescendants(CODE, MediaType.APPLICATION_XML, null, null, null); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertEquals(ConstantForIntegration.DEPARTEMENT_EXPECTED_RESPONSE_DESCENDANTS_XML, response.getEntity()); } diff --git a/src/test/java/fr/insee/rmes/api/geo/territoire/CommuneApiTest.java b/src/test/java/fr/insee/rmes/api/geo/territoire/CommuneApiTest.java index 0ec62554..4b30bdcf 100644 --- a/src/test/java/fr/insee/rmes/api/geo/territoire/CommuneApiTest.java +++ b/src/test/java/fr/insee/rmes/api/geo/territoire/CommuneApiTest.java @@ -287,7 +287,7 @@ void givenGetCommuneDescendants_WhenCorrectRequest_thenParameterTypeIsBad() { Assertions.assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } - @Test + @Test void givenGetListeCommune_whenCorrectRequest_andHeaderContentIsJson_thenResponseIsOk() { // Mock @@ -295,11 +295,11 @@ void givenGetListeCommune_whenCorrectRequest_andHeaderContentIsJson_thenResponse list.add(new Commune()); // Call method - geoApi.getListe(MediaType.APPLICATION_JSON, null); + geoApi.getListe(MediaType.APPLICATION_JSON, null, null, null); /*modifier suite a changement du nombre de variables */ verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } - @Test + @Test void givenGetListeCommune_whenCorrectRequest_andHeaderContentIsXml_thenResponseIsOk() { // Mock @@ -307,7 +307,7 @@ void givenGetListeCommune_whenCorrectRequest_andHeaderContentIsXml_thenResponseI list.add(new Commune()); // Call method - geoApi.getListe(MediaType.APPLICATION_XML, null); + geoApi.getListe(MediaType.APPLICATION_XML, null, null, null); /*modifier suite a changement du nombre de variables */ verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -318,11 +318,11 @@ void givenGetListeCommune_WhenCorrectRequest_thenResponseIsNotFound() { this.mockUtilsMethodsThenReturnListOfPojo(Boolean.FALSE); // Call method header content = xml - Response response = geoApi.getListe(MediaType.APPLICATION_XML, null); + Response response = geoApi.getListe(MediaType.APPLICATION_XML, null, null, null);/*modifier suite a changement du nombre de variables */ Assertions.assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); // Call method header content = json - response = geoApi.getListe(MediaType.APPLICATION_JSON, null); + response = geoApi.getListe(MediaType.APPLICATION_JSON, null, null, null);/*modifier suite a changement du nombre de variables */ Assertions.assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); verify(mockResponseUtils, never()).produceResponse(Mockito.any(), Mockito.any()); @@ -338,7 +338,7 @@ void givenGetListeCommune_WhenCorrectRequest_thenParameterDateIsRight(String dat list.add(new Commune()); // Call method header content = xml - geoApi.getListe(MediaType.APPLICATION_XML, date); + geoApi.getListe(MediaType.APPLICATION_XML, date, date, date);/*modifier suite a changement du nombre de variables */ verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -346,7 +346,7 @@ void givenGetListeCommune_WhenCorrectRequest_thenParameterDateIsRight(String dat void givenGetListeCommune_WhenCorrectRequest_thenParameterDateIsBad() { // Call method header content = xml - Response response = geoApi.getListe(MediaType.APPLICATION_XML, "nimportequoi"); + Response response = geoApi.getListe(MediaType.APPLICATION_XML, "nimportequoi", null, null);/*modifier suite a changement du nombre de variables */ Assertions.assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } diff --git a/src/test/java/fr/insee/rmes/api/geo/territoire/DepartementApiTest.java b/src/test/java/fr/insee/rmes/api/geo/territoire/DepartementApiTest.java index f82fc0cc..f5da0fb5 100644 --- a/src/test/java/fr/insee/rmes/api/geo/territoire/DepartementApiTest.java +++ b/src/test/java/fr/insee/rmes/api/geo/territoire/DepartementApiTest.java @@ -256,7 +256,7 @@ void givenGetDepartementDescendants_whenCorrectRequest_andHeaderContentIsJson_th list.add(new Departement()); // Call method - geoApi.getDescendants("something", MediaType.APPLICATION_JSON, null, null); + geoApi.getDescendants("something", MediaType.APPLICATION_JSON, null, null, null);/*modifier suite a changement du nombre de variables */ verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -268,7 +268,7 @@ void givenGetDepartementDescendants_whenCorrectRequest_andHeaderContentIsXml_the list.add(new Departement()); // Call method - geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null); + geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null, null);/*modifier suite a changement du nombre de variables */ verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -279,11 +279,11 @@ void givenGetDepartementDescendants_WhenCorrectRequest_thenResponseIsNotFound() this.mockUtilsMethodsThenReturnListOfPojo(Boolean.FALSE); // Call method header content = xml - Response response = geoApi.getDescendants("something", MediaType.APPLICATION_JSON, null, null); + Response response = geoApi.getDescendants("something", MediaType.APPLICATION_JSON, null, null, null);/*modifier suite a changement du nombre de variables */ Assertions.assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); // Call method header content = json - response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null); + response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null, null);/*modifier suite a changement du nombre de variables */ Assertions.assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); verify(mockResponseUtils, never()).produceResponse(Mockito.any(), Mockito.any()); @@ -297,7 +297,7 @@ void givenGetDepartementDescendants_WhenCorrectRequest_thenParameterDateIsRight( list.add(new Departement()); // Call method header content = xml - geoApi.getDescendants("something", MediaType.APPLICATION_XML, "2000-01-01", null); + geoApi.getDescendants("something", MediaType.APPLICATION_XML, "2000-01-01", null, null);/*modifier suite a changement du nombre de variables */ verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -305,7 +305,7 @@ void givenGetDepartementDescendants_WhenCorrectRequest_thenParameterDateIsRight( void givenGetDepartementDescendants_WhenCorrectRequest_thenParameterDateIsBad() { // Call method header content = xml - Response response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, "nimportequoi", null); + Response response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, "nimportequoi", null, null);/*modifier suite a changement du nombre de variables */ Assertions.assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } @@ -317,7 +317,7 @@ void givenGetDepartementDescendants_WhenCorrectRequest_thenParameterTypeIsNull() list.add(new Departement()); // Call method header content = xml - geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null); + geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null, null);/*modifier suite a changement du nombre de variables */ verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -330,7 +330,7 @@ void givenGetDepartementDescendants_WhenCorrectRequest_thenParameterTypeIsRight( // Call method header content = xml geoApi - .getDescendants("something", MediaType.APPLICATION_XML, null, EnumTypeGeographie.COMMUNE.getTypeObjetGeo()); + .getDescendants("something", MediaType.APPLICATION_XML, null, EnumTypeGeographie.COMMUNE.getTypeObjetGeo(), null);/*modifier suite a changement du nombre de variables */ verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -338,7 +338,7 @@ void givenGetDepartementDescendants_WhenCorrectRequest_thenParameterTypeIsRight( void givenGetDepartementDescendants_WhenCorrectRequest_thenParameterTypeIsBad() { // Call method header content = xml - Response response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, "unTypeQuelconque"); + Response response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, "unTypeQuelconque", null);/*modifier suite a changement du nombre de variables */ Assertions.assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } From d61ef13f02c2c88372adc82eb9a8fb999435ab8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Thu, 13 Jan 2022 15:57:04 +0100 Subject: [PATCH 08/20] Update getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh --- .../getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh index 23320533..ce6f9185 100644 --- a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh +++ b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh @@ -1,4 +1,4 @@ -SELECT ?uri ?code ?type ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?cheflieu +SELECT ?uri ?code ?type ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?chefLieu WHERE { { SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle?cheflieu ?dateCreation ?dateSuppression ?dateCreationParent ?dateSuppressionParent @@ -14,7 +14,8 @@ WHERE { igeo:codeArticle ?typeArticle ; igeo:nom ?intitule ; igeo:nomSansArticle ?intituleSansArticle . - BIND(STR(?typeRDF) AS ?type). + BIND(?typeRDF AS ?type). + FILTER(STR(?type) in("http://rdf.insee.fr/def/geo#Commune" , "http://rdf.insee.fr/def/geo#District") ) BIND(STR(?ressource) AS ?uri). OPTIONAL {?ressource ((igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion)/igeo:codeINSEE) ?cheflieu.} OPTIONAL {?parent (^igeo:creation/igeo:date) ?dateCreationParent.} From 849d4d73841bc3639b5ead2870d5557f0dcac41a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Thu, 13 Jan 2022 16:01:21 +0100 Subject: [PATCH 09/20] Update CollectivitesDOutreMerAPI.java --- .../api/geo/territoire/CollectivitesDOutreMerAPI.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java index 4a01de5d..662aa43f 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java @@ -9,22 +9,17 @@ import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; - import fr.insee.rmes.api.geo.AbstractGeoApi; import fr.insee.rmes.api.geo.ConstGeoApi; import fr.insee.rmes.modeles.geo.territoire.CollectiviteDOutreMer; import fr.insee.rmes.modeles.geo.territoire.Commune; import fr.insee.rmes.modeles.geo.territoire.Territoire; import fr.insee.rmes.modeles.geo.territoires.CollectivitesDOutreMer; -import fr.insee.rmes.modeles.geo.territoires.Communes; -import fr.insee.rmes.modeles.geo.territoires.Projections; import fr.insee.rmes.modeles.geo.territoires.Territoires; import fr.insee.rmes.queries.geo.GeoQueries; import fr.insee.rmes.utils.Constants; -import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -38,11 +33,9 @@ public class CollectivitesDOutreMerAPI extends AbstractGeoApi { - private static final String LITTERAL_DATE_EXAMPLE = "1945-06-26"; - private static Logger logger = LogManager.getLogger(CollectiviteDOutreMer.class); - private static final String CODE_PATTERN = "/{code: " + ConstGeoApi.PATTERN_COMMUNE + "}"; + private static Logger logger = LogManager.getLogger(CollectiviteDOutreMer.class); private static final String CODE_PATTERNCOM = "/{code: " + ConstGeoApi.PATTERN_COM + "}"; private static final String LITTERAL_ID_OPERATION = "getcogcom"; private static final String LITTERAL_OPERATION_SUMMARY = @@ -51,7 +44,6 @@ public class CollectivitesDOutreMerAPI extends AbstractGeoApi { private static final String LITTERAL_PARAMETER_DATE_DESCRIPTION = "Filtre pour renvoyer la collectivite d'outre-mer active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')"; private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; - private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le nom de la collectivite d'outre-mer" ; private static final String LITTERAL_CODE_EXAMPLE = "986"; From e46a7909b608f3a663da389f7a537ac2645c85a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Thu, 13 Jan 2022 16:19:45 +0100 Subject: [PATCH 10/20] Update DepartementApi.java --- .../java/fr/insee/rmes/api/geo/territoire/DepartementApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/DepartementApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/DepartementApi.java index 5cc22529..44e8ea6e 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/DepartementApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/DepartementApi.java @@ -42,7 +42,7 @@ public class DepartementApi extends AbstractGeoApi { "Informations sur un departement identifié par son code (deux ou trois caractères)"; private static final String LITTERAL_RESPONSE_DESCRIPTION = "Departement"; private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; - private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le Filtre sur le nom des territoires renvoyés" ; + private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le nom des territoires renvoyés" ; private static final String LITTERAL_CODE_EXAMPLE = "22"; private static final String LITTERAL_DATE_EXAMPLE = "1950-01-01"; From fbbf380d8698176165da21197f5bbe33794a4914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Mon, 17 Jan 2022 15:18:53 +0100 Subject: [PATCH 11/20] update COM field and modify sparql query --- .../fr/insee/rmes/api/geo/AbstractGeoApi.java | 3 --- .../fr/insee/rmes/api/geo/ConstGeoApi.java | 2 +- .../api/geo/territoire/AireAttractionApi.java | 2 +- .../territoire/CollectivitesDOutreMerAPI.java | 8 +++---- .../rmes/api/geo/territoire/CommuneApi.java | 8 +++---- .../rmes/modeles/geo/territoire/District.java | 9 +++---- .../fr/insee/rmes/queries/geo/GeoQueries.java | 24 +++++++++---------- .../java/fr/insee/rmes/utils/Constants.java | 1 + ...toireByCodeAndDateAndFiltreNomCommune.ftlh | 11 +++++---- 9 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java b/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java index 5aeeeea4..b37b6f10 100644 --- a/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java @@ -85,9 +85,6 @@ protected String formatValidParameterFiltreIfIsNull(String filtreNom) { return (filtreNom != null) ? filtreNom : "*"; } - protected String formatValidParameterComIfIsNull(String com) { - return (com != null) ? com : "*"; - } protected Response generateStatusResponse(boolean objectIsFound, Object o, String header) { if (objectIsFound) { diff --git a/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java b/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java index bcac05f3..9b55e272 100644 --- a/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java @@ -54,7 +54,7 @@ public class ConstGeoApi { public static final String PATTERN_ARRONDISSEMENT_MUNICIPAL = ""; public static final String PATTERN_COMMUNE_DESCRIPTION = "Code de la commune (cinq caractères)"; - public static final String PATTERN_COM_DESCRIPTION= "Code de la collectivite d'outre-mer (trois caractères)"; + public static final String PATTERN_COM_DESCRIPTION= "Code de la collectivité d'outre-mer (trois caractères)"; public static final String PATTERN_COMMUNE_ASSOCIEE_DESCRIPTION = "Code de la commune associée (cinq caractères)"; public static final String PATTERN_COMMUNE_DELEGUEE_DESCRIPTION = "Code de la commune déléguée (cinq caractères)"; public static final String PATTERN_ZONE_EMPLOI_DESCRIPTION = "Code de la zone d'emploi (quatre chiffres)"; diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/AireAttractionApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/AireAttractionApi.java index 5dc186ff..fd65767d 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/AireAttractionApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/AireAttractionApi.java @@ -108,7 +108,7 @@ public Response getDescendants( required = true, schema = @Schema( pattern = ConstGeoApi.PATTERN_AIRE_ATTRACTION, - type = Constants.TYPE_STRING, example="062")) @PathParam(Constants.CODE) String code, + type = Constants.TYPE_STRING, example="002")) @PathParam(Constants.CODE) String code, @Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header, @Parameter( description = "Filtre pour renvoyer les territoires inclus dans l'aire d'attraction active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')", diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java index 662aa43f..ac5f951a 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java @@ -35,7 +35,7 @@ public class CollectivitesDOutreMerAPI extends AbstractGeoApi { - private static Logger logger = LogManager.getLogger(CollectiviteDOutreMer.class); + private static Logger logger = LogManager.getLogger(CollectivitesDOutreMerAPI.class); private static final String CODE_PATTERNCOM = "/{code: " + ConstGeoApi.PATTERN_COM + "}"; private static final String LITTERAL_ID_OPERATION = "getcogcom"; private static final String LITTERAL_OPERATION_SUMMARY = @@ -116,7 +116,7 @@ public Response getByCode( schema = @Schema(type = Constants.TYPE_STRING, format = Constants.FORMAT_DATE)) @QueryParam( value = Constants.PARAMETER_DATE) String date) { - logger.debug("Received GET request for commune {}", code); + logger.debug("Received GET request for collectivite d'outre-mer {}", code); if ( ! this.verifyParameterDateIsRightWithoutHistory(date)) { return this.generateBadRequestResponse(); @@ -152,7 +152,7 @@ public Response getDescendants( required = true, schema = @Schema( pattern = ConstGeoApi.PATTERN_COM, - type = Constants.TYPE_STRING, example="987")) @PathParam(Constants.CODE) String code, + type = Constants.TYPE_STRING, example="LITTERAL_CODE_EXAMPLE")) @PathParam(Constants.CODE) String code, @Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header, @Parameter( description ="Filtre pour renvoyer les territoires inclus dans la collectivité d'outre-mer active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')", @@ -160,7 +160,7 @@ public Response getDescendants( schema = @Schema(type = Constants.TYPE_STRING, format = Constants.FORMAT_DATE)) @QueryParam( value = Constants.PARAMETER_DATE) String date, @Parameter( - description = LITTERAL_PARAMETER_TYPE_DESCRIPTION+ "( Commune ou District )", + description = LITTERAL_PARAMETER_TYPE_DESCRIPTION+ "(Commune ou District)", required = false, schema = @Schema(type = Constants.TYPE_STRING)) @QueryParam( value = Constants.PARAMETER_TYPE) String typeTerritoire, diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java index 891ef7e0..12649592 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java @@ -48,7 +48,7 @@ public class CommuneApi extends AbstractGeoApi { private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le nom de la commune" ; private static final String LITTERAL_CODE_EXAMPLE = "14475"; - private static final String LITTERAL_PARAMETER_COM_DESCRIPTION="Ecrire true pour inclure les collectivités d’outre-mer"; + private static final String LITTERAL_PARAMETER_COM_DESCRIPTION="Sélectionner \"true\" pour inclure les collectivités d’outre-mer"; @Path(ConstGeoApi.PATH_COMMUNE + CODE_PATTERN) @GET @@ -112,7 +112,7 @@ public Response getAscendants( required = true, schema = @Schema( pattern = ConstGeoApi.PATTERN_COMMUNE, - type = Constants.TYPE_STRING, example=LITTERAL_CODE_EXAMPLE)) @PathParam(Constants.CODE) String code, + type = Constants.TYPE_STRING, example="73035")) @PathParam(Constants.CODE) String code, @Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header, @Parameter( description = "Filtre pour renvoyer les territoires contenant la commune active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')", @@ -226,7 +226,7 @@ public Response getListe( value = Constants.PARAMETER_FILTRE) String filtreNom, @Parameter(description = LITTERAL_PARAMETER_COM_DESCRIPTION, required = false, - schema = @Schema(type = Constants.TYPE_STRING,example="none")) @QueryParam( + schema = @Schema(allowableValues = {"true","false"},example="false")) @QueryParam( value = Constants.PARAMETER_STRING) String com ) { @@ -240,7 +240,7 @@ public Response getListe( return this .generateResponseListOfTerritoire( sparqlUtils - .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNom),this.formatValidParameterComIfIsNull(com))), + .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNom),this.formatValidParameterFiltreIfIsNull(com))), header, Communes.class, Commune.class); diff --git a/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java b/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java index 15542fd7..d889fe11 100644 --- a/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java +++ b/src/main/java/fr/insee/rmes/modeles/geo/territoire/District.java @@ -38,8 +38,9 @@ public District( String dateCreation, String dateSuppression, IntituleSansArticle intituleSansArticle, - String chefLieu) { - super(code, uri, intitule, type, dateCreation, dateSuppression, intituleSansArticle, chefLieu); + String typeArticle) { + super(code, uri, intitule, type, dateCreation, dateSuppression, intituleSansArticle); + this.setTypeArticle(typeArticle); } @Override @@ -74,7 +75,7 @@ public String getType() { @Override @JacksonXmlProperty(localName = "DateCreation") @Schema( - description = "Date de création du district si il n’existait pas au premier COG du 1er janvier 1943", + description = "Date de création du district s'il n’existait pas au premier COG du 1er janvier 1943", example = "1943-01-01") public String getDateCreation() { return dateCreation; @@ -82,7 +83,7 @@ public String getDateCreation() { @Override @JacksonXmlProperty(localName = "DateSuppression") - @Schema(description = "Date de suppression du district si il a été supprimée. ", example = "2019-01-01") + @Schema(description = "Date de suppression du district s'il a été supprimée. ", example = "2019-01-01") public String getDateSuppression() { return dateSuppression; } diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index 28b4a384..199cc17e 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -115,32 +115,32 @@ public static String getListCommunesDeleguees(String date) { /* ASCENDANT */ public static String getAscendantsCommune(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE,Constants.NONE,Constants.NONE, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE,Constants.ABSENT,Constants.NONE, true); } public static String getAscendantsDepartement(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DEPARTEMENT,Constants.NONE,Constants.NONE, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DEPARTEMENT,Constants.ABSENT,Constants.NONE, true); } public static String getAscendantsCommuneDeleguee(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE_DELEGUEE,Constants.NONE,Constants.NONE, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE_DELEGUEE,Constants.ABSENT,Constants.NONE, true); } public static String getAscendantsCommuneAssociee(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE_ASSOCIEE,Constants.NONE,Constants.NONE, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE_ASSOCIEE,Constants.ABSENT,Constants.NONE, true); } public static String getAscendantsArrondissementMunicipal(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT_MUNICIPAL,Constants.NONE,Constants.NONE, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT_MUNICIPAL,Constants.ABSENT,Constants.NONE, true); } public static String getAscendantsArrondissement(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT,Constants.NONE,Constants.NONE, true); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT,Constants.ABSENT,Constants.NONE, true); } /* DESCENDANT */ public static String getDescendantsCommune(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE,Constants.NONE,Constants.NONE, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE,Constants.ABSENT,Constants.NONE, false); } public static String getDescendantsCollectiviteDOutreMer(String code, String date, String type,String filtreNom) { @@ -148,15 +148,15 @@ public static String getDescendantsCollectiviteDOutreMer(String code, String dat } public static String getDescendantsZoneEmploi(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ZONE_EMPLOI,Constants.NONE,Constants.NONE, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ZONE_EMPLOI,Constants.ABSENT,Constants.NONE, false); } public static String getDescendantsAireAttraction(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.AIRE_ATTRACTION,Constants.NONE,Constants.NONE, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.AIRE_ATTRACTION,Constants.ABSENT,Constants.NONE, false); } public static String getDescendantsUniteUrbaine(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.UNITE_URBAINE,Constants.NONE,Constants.NONE, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.UNITE_URBAINE,Constants.ABSENT,Constants.NONE, false); } public static String getDescendantsDepartement(String code, String date, String type,String filtreNom) { @@ -164,11 +164,11 @@ public static String getDescendantsDepartement(String code, String date, String } public static String getDescendantsRegion(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.REGION,Constants.NONE,Constants.NONE, false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.REGION,Constants.ABSENT,Constants.NONE, false); } public static String getDescendantsArrondissement(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT, Constants.NONE,Constants.NONE,false); + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.ARRONDISSEMENT, Constants.ABSENT,Constants.NONE,false); } // NEXT diff --git a/src/main/java/fr/insee/rmes/utils/Constants.java b/src/main/java/fr/insee/rmes/utils/Constants.java index 9bc11509..d753733f 100644 --- a/src/main/java/fr/insee/rmes/utils/Constants.java +++ b/src/main/java/fr/insee/rmes/utils/Constants.java @@ -13,6 +13,7 @@ public class Constants { public static final String PARAMETER_FILTRE="filtreNom"; public static final String PARAMETER_BOOLEAN="com"; public static final String PARAMETER_STRING="com"; + public static final String ABSENT="*"; private Constants() {} } diff --git a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh index 9ee53d71..dca3d92d 100644 --- a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh +++ b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh @@ -1,15 +1,15 @@ SELECT DISTINCT ?uri ?code ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?chefLieu FROM WHERE { -<#if com != "none"> - ?uri a igeo:${territoire} ; +<#if com != "true"> + ?uri a igeo:${territoire} ; igeo:codeArticle ?typeArticle ; + (igeo:subdivisionDirecteDe)+ ; igeo:nom ?intitule ; igeo:nomSansArticle ?intituleSansArticle . <#else> - ?uri a igeo:${territoire} ; + ?uri a igeo:${territoire} ; igeo:codeArticle ?typeArticle ; - (igeo:subdivisionDirecteDe)+ ; igeo:nom ?intitule ; igeo:nomSansArticle ?intituleSansArticle . @@ -27,6 +27,7 @@ FROM ?evenementSuppression igeo:suppression ?uri ; igeo:date ?dateSuppression. } +<#if chefLieu != "none"> OPTIONAL { ?uri igeo:${chefLieu} ?chefLieuRDF . ?chefLieuRDF igeo:codeINSEE ?chefLieu. @@ -45,7 +46,7 @@ FROM } - #blabla# + <#if filtreNom != "*"> BIND( '${filtreNom}' AS ?query). BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . From 814cd5d57557f1b8b6bcef1e868d932ae7473117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Wed, 19 Jan 2022 12:28:08 +0100 Subject: [PATCH 12/20] Fix --- .../rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java | 2 +- src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java index ac5f951a..1fd947ad 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java @@ -152,7 +152,7 @@ public Response getDescendants( required = true, schema = @Schema( pattern = ConstGeoApi.PATTERN_COM, - type = Constants.TYPE_STRING, example="LITTERAL_CODE_EXAMPLE")) @PathParam(Constants.CODE) String code, + type = Constants.TYPE_STRING, example=LITTERAL_CODE_EXAMPLE)) @PathParam(Constants.CODE) String code, @Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header, @Parameter( description ="Filtre pour renvoyer les territoires inclus dans la collectivité d'outre-mer active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')", diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index 199cc17e..5f9c8dc0 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -41,13 +41,14 @@ public static String getCommuneByCodeAndDate(String code, String date) { } public static String getCollectiviteDOutreMerByCodeAndDate(String code,String date) { - return getTerritoireFiltre(code, date,"*", EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER,"*"); + return getTerritoireFiltre(code, date,"*", EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER,"true"); } public static String getDepartementByCodeAndDate(String code, String date) { return getTerritoire(code, date, EnumTypeGeographie.DEPARTEMENT); } - + + public static String getRegionByCodeAndDate(String code, String date) { return getTerritoire(code, date, EnumTypeGeographie.REGION); } From d330a8f1d4f4e8122a90623f4c8800221afd7c1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Thu, 20 Jan 2022 10:36:32 +0100 Subject: [PATCH 13/20] feat : Add District services add District list service add District identification service add District ascendant service update filter field for the "/geo/region/{code}/descendants" service --- .../fr/insee/rmes/api/geo/ConstGeoApi.java | 5 +- .../territoire/CollectivitesDOutreMerAPI.java | 2 +- .../rmes/api/geo/territoire/DistrictApi.java | 142 ++++++++++++++++++ .../rmes/api/geo/territoire/RegionApi.java | 11 +- .../fr/insee/rmes/queries/geo/GeoQueries.java | 23 ++- ...tsOrDescendantsByCodeTypeDateDistrict.ftlh | 30 ++++ .../getTerritoireByCodeAndDateDistrict.ftlh | 34 +++++ .../RegionApiIntegrationTest.java | 4 +- .../api/geo/territoire/RegionApiTest.java | 18 +-- 9 files changed, 249 insertions(+), 20 deletions(-) create mode 100644 src/main/java/fr/insee/rmes/api/geo/territoire/DistrictApi.java create mode 100644 src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh create mode 100644 src/main/resources/request/geographie/getTerritoireByCodeAndDateDistrict.ftlh diff --git a/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java b/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java index 9b55e272..25ebf7d6 100644 --- a/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java @@ -20,6 +20,7 @@ public class ConstGeoApi { public static final String PATH_COMMUNE_DELEGUEE = PATH_SEPARATOR + "communeDeleguee"; public static final String PATH_ARRONDISSEMENT_MUNICIPAL = PATH_SEPARATOR + "arrondissementMunicipal"; public static final String PATH_COM= PATH_SEPARATOR + "collectiviteDOutreMer"; + public static final String PATH_DISTRICT= PATH_SEPARATOR + "district"; public static final String PATH_LISTE_COM= PATH_SEPARATOR +"collectivitesDOutreMer"; public static final String PATH_LISTE_COMMUNE = PATH_SEPARATOR + "communes"; @@ -33,7 +34,7 @@ public class ConstGeoApi { public static final String PATH_LISTE_ZONE_EMPLOI = PATH_SEPARATOR + "zonesDEmploi2020"; public static final String PATH_LISTE_AIRE_ATTRACTION = PATH_SEPARATOR + "airesDAttractionDesVilles2020"; public static final String PATH_LISTE_UNITE_URBAINE = PATH_SEPARATOR + "unitesUrbaines2020"; - + public static final String PATH_LISTE_DISTRICT = PATH_SEPARATOR + "districts"; public static final String PATH_ASCENDANT = PATH_SEPARATOR + "ascendants"; public static final String PATH_DESCENDANT = PATH_SEPARATOR + "descendants"; @@ -44,6 +45,7 @@ public class ConstGeoApi { public static final String PATTERN_COMMUNE = "[0-9][0-9AB][0-9]{3}"; public static final String PATTERN_COM ="9[78][1-9]"; + public static final String PATTERN_DISTRICT ="9[78][1-9]{3}"; public static final String PATTERN_PAYS = "99[0-9]{3}"; public static final String PATTERN_REGION = "[0-9]{2}"; public static final String PATTERN_ZONE_EMPLOI = "[0-9]{4}"; @@ -57,6 +59,7 @@ public class ConstGeoApi { public static final String PATTERN_COM_DESCRIPTION= "Code de la collectivité d'outre-mer (trois caractères)"; public static final String PATTERN_COMMUNE_ASSOCIEE_DESCRIPTION = "Code de la commune associée (cinq caractères)"; public static final String PATTERN_COMMUNE_DELEGUEE_DESCRIPTION = "Code de la commune déléguée (cinq caractères)"; + public static final String PATTERN_DISTRICT_DESCRIPTION = "Code du district (cinq caractères)"; public static final String PATTERN_ZONE_EMPLOI_DESCRIPTION = "Code de la zone d'emploi (quatre chiffres)"; public static final String PATTERN_UNITE_URBAINE_DESCRIPTION = "Code de l'unité urbaine (cinq chiffres)"; public static final String PATTERN_AIRE_ATTRACTION_DESCRIPTION = "Code de l'aire d'attraction (trois chiffres)"; diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java index 1fd947ad..011968a1 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java @@ -148,7 +148,7 @@ public Response getByCode( }) public Response getDescendants( @Parameter( - description = "code de la commune ou du district (3 caractères)", + description = "code de la collectivité d'outre-mer (3 caractères)", required = true, schema = @Schema( pattern = ConstGeoApi.PATTERN_COM, diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/DistrictApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/DistrictApi.java new file mode 100644 index 00000000..66b3b665 --- /dev/null +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/DistrictApi.java @@ -0,0 +1,142 @@ +package fr.insee.rmes.api.geo.territoire; + +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import fr.insee.rmes.api.geo.AbstractGeoApi; +import fr.insee.rmes.api.geo.ConstGeoApi; +import fr.insee.rmes.modeles.geo.territoire.District; +import fr.insee.rmes.modeles.geo.territoire.Territoire; +import fr.insee.rmes.modeles.geo.territoires.Territoires; +import fr.insee.rmes.queries.geo.GeoQueries; +import fr.insee.rmes.utils.Constants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; + + + @Path(ConstGeoApi.PATH_GEO) + @Tag(name = ConstGeoApi.TAG_NAME, description = ConstGeoApi.TAG_DESCRIPTION) + + + +public class DistrictApi extends AbstractGeoApi { + + private static Logger logger = LogManager.getLogger(DistrictApi.class); + private static final String CODE_PATTERNDISTRICT = "/{code: " + ConstGeoApi.PATTERN_DISTRICT + "}"; + private static final String LITTERAL_ID_OPERATION = "getcogdistrict"; + private static final String LITTERAL_OPERATION_SUMMARY = + "Informations sur un district identifiée par son code (cinq caractères)"; + private static final String LITTERAL_RESPONSE_DESCRIPTION = "district d'une collectivité d'outre-mer"; + private static final String LITTERAL_PARAMETER_DATE_DESCRIPTION = + "Filtre pour renvoyer le district actif à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')"; + private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; + private static final String LITTERAL_CODE_EXAMPLE = "98411"; + + @Path(ConstGeoApi.PATH_DISTRICT + CODE_PATTERNDISTRICT) + @GET + @Produces({ + MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML + }) + @Operation( + operationId = LITTERAL_ID_OPERATION, + summary = LITTERAL_OPERATION_SUMMARY, + responses = { + @ApiResponse( + content = @Content(schema = @Schema(implementation = District.class)), + description = LITTERAL_RESPONSE_DESCRIPTION) + }) + public Response getByCode( + @Parameter( + description = ConstGeoApi.PATTERN_DISTRICT_DESCRIPTION, + required = true, + schema = @Schema( + pattern = ConstGeoApi.PATTERN_DISTRICT, + type = Constants.TYPE_STRING, example=LITTERAL_CODE_EXAMPLE)) @PathParam(Constants.CODE) String code, + @Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header, + @Parameter( + description = LITTERAL_PARAMETER_DATE_DESCRIPTION, + required = false, + schema = @Schema(type = Constants.TYPE_STRING, format = Constants.FORMAT_DATE)) @QueryParam( + value = Constants.PARAMETER_DATE) String date) { + + logger.debug("Received GET request for collectivite d'outre-mer {}", code); + + if ( ! this.verifyParameterDateIsRightWithoutHistory(date)) { + return this.generateBadRequestResponse(); + } + else { + return this + .generateResponseATerritoireByCode( + sparqlUtils + .executeSparqlQuery( + GeoQueries.getDistrictByCodeAndDate(code, this.formatValidParameterDateIfIsNull(date))), + header, + new District(code)); + } + } + + @Path(ConstGeoApi.PATH_DISTRICT + CODE_PATTERNDISTRICT + ConstGeoApi.PATH_ASCENDANT) + @GET + @Produces({ + MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML + }) + @Operation( + operationId = LITTERAL_ID_OPERATION + ConstGeoApi.ID_OPERATION_ASCENDANTS, + summary = "Informations concernant les territoires qui contiennent le district", + responses = { + @ApiResponse( + content = @Content(schema = @Schema(type = ARRAY, implementation = Territoire.class)), + description = LITTERAL_RESPONSE_DESCRIPTION) + }) + public Response getAscendants( + @Parameter( + description = ConstGeoApi.PATTERN_DISTRICT_DESCRIPTION, + required = true, + schema = @Schema( + pattern = ConstGeoApi.PATTERN_DISTRICT, + type = Constants.TYPE_STRING, example="98411")) @PathParam(Constants.CODE) String code, + @Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header, + @Parameter( + description = "Filtre pour renvoyer les territoires contenant le district actif à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')", + required = false, + schema = @Schema(type = Constants.TYPE_STRING, format = Constants.FORMAT_DATE)) @QueryParam( + value = Constants.PARAMETER_DATE) String date, + @Parameter( + description = LITTERAL_PARAMETER_TYPE_DESCRIPTION, + required = false, + schema = @Schema(type = Constants.TYPE_STRING)) @QueryParam( + value = Constants.PARAMETER_TYPE) String typeTerritoire) { + + logger.debug("Received GET request for ascendants of district {}", code); + + if ( ! this.verifyParametersTypeAndDateAreValid(typeTerritoire, date)) { + return this.generateBadRequestResponse(); + } + else { + return this + .generateResponseListOfTerritoire( + sparqlUtils + .executeSparqlQuery( + GeoQueries + .getAscendantsDistrict( + code, + this.formatValidParameterDateIfIsNull(date), + this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire))), + header, + Territoires.class, + Territoire.class); + } + } +} diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/RegionApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/RegionApi.java index b1f6acfd..580e2615 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/RegionApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/RegionApi.java @@ -44,7 +44,7 @@ public class RegionApi extends AbstractGeoApi { private static final String LITTERAL_PARAMETER_DATE_DESCRIPTION = "Filtre pour renvoyer la region active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')"; private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; - + private static final String LITTERAL_PARAMETER_NAME_DESCRIPTION = "Filtre sur le nom des territoires renvoyés" ; private static final String LITTERAL_CODE_EXAMPLE = "06"; private static final String LITTERAL_CODE_HISTORY_EXAMPLE = "44"; @@ -120,7 +120,12 @@ public Response getDescendants( description = LITTERAL_PARAMETER_TYPE_DESCRIPTION, required = false, schema = @Schema(type = Constants.TYPE_STRING)) @QueryParam( - value = Constants.PARAMETER_TYPE) String typeTerritoire) { + value = Constants.PARAMETER_TYPE) String typeTerritoire, + @Parameter( + description = LITTERAL_PARAMETER_NAME_DESCRIPTION, + required = false, + schema = @Schema(type = Constants.TYPE_STRING)) @QueryParam( + value = Constants.PARAMETER_FILTRE) String filtreNom) { logger.debug("Received GET request for descendants of region {}", code); @@ -136,7 +141,7 @@ public Response getDescendants( .getDescendantsRegion( code, this.formatValidParameterDateIfIsNull(date), - this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire))), + this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire),this.formatValidParameterFiltreIfIsNull(filtreNom))), header, Territoires.class, Territoire.class); diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index 5f9c8dc0..977cf856 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -48,7 +48,10 @@ public static String getDepartementByCodeAndDate(String code, String date) { return getTerritoire(code, date, EnumTypeGeographie.DEPARTEMENT); } - + public static String getDistrictByCodeAndDate(String code,String date) { + return getTerritoireFiltre(code, date,"*",EnumTypeGeographie.DISTRICT,"true"); + } + public static String getRegionByCodeAndDate(String code, String date) { return getTerritoire(code, date, EnumTypeGeographie.REGION); } @@ -122,6 +125,10 @@ public static String getAscendantsCommune(String code, String date, String type) public static String getAscendantsDepartement(String code, String date, String type) { return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DEPARTEMENT,Constants.ABSENT,Constants.NONE, true); } + + public static String getAscendantsDistrict(String code, String date, String type) { + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DISTRICT,Constants.ABSENT,Constants.NONE,true); + } public static String getAscendantsCommuneDeleguee(String code, String date, String type) { return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.COMMUNE_DELEGUEE,Constants.ABSENT,Constants.NONE, true); @@ -164,8 +171,8 @@ public static String getDescendantsDepartement(String code, String date, String return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.DEPARTEMENT,filtreNom,Constants.NONE, false); } - public static String getDescendantsRegion(String code, String date, String type) { - return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.REGION,Constants.ABSENT,Constants.NONE, false); + public static String getDescendantsRegion(String code, String date, String type,String filtreNom) { + return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.REGION,filtreNom,Constants.NONE, false); } public static String getDescendantsArrondissement(String code, String date, String type) { @@ -302,7 +309,11 @@ private static String getAscendantOrDescendantsQuery( params.put(ASCENDANT, String.valueOf(ascendant)); if (typeOrigine.getTypeObjetGeo() == "CollectiviteDOutreMer") { return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh", params); - } else { + } + else if (typeOrigine.getTypeObjetGeo() == "District") { + return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh", params); + } + else { return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDate.ftlh", params); } } @@ -337,7 +348,11 @@ private static String getTerritoireFiltre(String code, String date, String filtr Map params = buildCodeAndDateAndFilterParams(code, date, filtreNom,com); params.put("territoire", typeGeo.getTypeObjetGeo()); params.put("chefLieu", typeGeo.getChefLieuPredicate()); + if (typeGeo.getTypeObjetGeo() == "District") { + return buildRequest(QUERIES_FOLDER, "getTerritoireByCodeAndDateDistrict.ftlh", params); + } else { return buildRequest(QUERIES_FOLDER, "getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh", params); + } } private static Map buildCodeAndDateAndFilterParams(String code, String date, String filtreNom, String com) { diff --git a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh new file mode 100644 index 00000000..9be5faf7 --- /dev/null +++ b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh @@ -0,0 +1,30 @@ +SELECT ?uri ?code ?type ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?chefLieu +WHERE { + { + SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle?cheflieu ?dateCreation ?dateSuppression ?dateCreationParent ?dateSuppressionParent + WHERE { + ?parent a igeo:District ; + igeo:codeINSEE '${code}' . + + ?ressource a ?typeRDF; + igeo:codeINSEE ?code ; + igeo:codeArticle ?typeArticle ; + igeo:nom ?intitule ; + igeo:nomSansArticle ?intituleSansArticle . + BIND(?typeRDF AS ?type). + FILTER(STR(?type) in("http://rdf.insee.fr/def/geo#CollectiviteDOutreMer") ) + FILTER(?code in(substr('${code}',1,3))) + BIND(STR(?ressource) AS ?uri). + OPTIONAL {?ressource ((igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion)/igeo:codeINSEE) ?cheflieu.} + OPTIONAL {?parent (^igeo:creation/igeo:date) ?dateCreationParent.} + OPTIONAL {?parent (^igeo:suppression/igeo:date) ?dateSuppressionParent.} + OPTIONAL {?ressource (^igeo:creation/igeo:date) ?dateCreation.} + OPTIONAL {?ressource (^igeo:suppression/igeo:date) ?dateSuppression.} + } + } + FILTER(!BOUND(?dateCreationParent) || ?dateCreationParent <= '2022-01-20'^^xsd:date) + FILTER(!BOUND(?dateSuppressionParent) || ?dateSuppressionParent > '2022-01-20'^^xsd:date) + FILTER(!BOUND(?dateCreation) || ?dateCreation <= '2022-01-20'^^xsd:date) + FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '2022-01-20'^^xsd:date) +} +ORDER BY ?type ?code \ No newline at end of file diff --git a/src/main/resources/request/geographie/getTerritoireByCodeAndDateDistrict.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeAndDateDistrict.ftlh new file mode 100644 index 00000000..8262b94e --- /dev/null +++ b/src/main/resources/request/geographie/getTerritoireByCodeAndDateDistrict.ftlh @@ -0,0 +1,34 @@ +SELECT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression + +WHERE { + BIND(substr('${code}',1,3) as ?com). + { + SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression ?dateCreationParent ?dateSuppressionParent + + WHERE { + + ?parent a igeo:CollectiviteDOutreMer ; + igeo:codeINSEE ?com ; + (^igeo:subdivisionDirecteDe)+ ?ressource . + ?ressource a ?typeRDF; + igeo:codeINSEE '${code}' ; + igeo:codeArticle ?typeArticle ; + igeo:nom ?intitule ; + igeo:nomSansArticle ?intituleSansArticle . + BIND(?typeRDF AS ?type). + BIND('${code}' as ?code) . + FILTER(STR(?type) in("http://rdf.insee.fr/def/geo#District") ) + BIND(STR(?ressource) AS ?uri). + OPTIONAL {?ressource ((igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion)/igeo:codeINSEE) ?cheflieu.} + OPTIONAL {?parent (^igeo:creation/igeo:date) ?dateCreationParent.} + OPTIONAL {?parent (^igeo:suppression/igeo:date) ?dateSuppressionParent.} + OPTIONAL {?ressource (^igeo:creation/igeo:date) ?dateCreation.} + OPTIONAL {?ressource (^igeo:suppression/igeo:date) ?dateSuppression.} + } + } + FILTER(!BOUND(?dateCreationParent) || ?dateCreationParent <= '2022-01-12'^^xsd:date) + FILTER(!BOUND(?dateSuppressionParent) || ?dateSuppressionParent > '2022-01-12'^^xsd:date) + FILTER(!BOUND(?dateCreation) || ?dateCreation <= '2022-01-12'^^xsd:date) + FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '2022-01-12'^^xsd:date) +} +ORDER BY ?type ?code \ No newline at end of file diff --git a/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/RegionApiIntegrationTest.java b/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/RegionApiIntegrationTest.java index d1809400..393c5462 100644 --- a/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/RegionApiIntegrationTest.java +++ b/src/test/java/fr/insee/rmes/api/geo/pseudointegrationtest/RegionApiIntegrationTest.java @@ -71,7 +71,7 @@ public void givengetListeRegions_whenCorrectRequest_With_XML_Header_thenResponse public void givengetDescendantsRegions_whenCorrectRequest_With_JSON_Header_thenResponseIsOk() { when(mockSparqlUtils.executeSparqlQuery(anyString())) .thenReturn(ConstantForIntegration.REGION_MOCK_SERVER_RETURN_DESCENDANTS); - Response response = geoApi.getDescendants(CODE, MediaType.APPLICATION_JSON, null, null); + Response response = geoApi.getDescendants(CODE, MediaType.APPLICATION_JSON, null, null, null); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertEquals(ConstantForIntegration.REGION_EXPECTED_RESPONSE_DESCENDANTS_JSON, response.getEntity()); } @@ -80,7 +80,7 @@ public void givengetDescendantsRegions_whenCorrectRequest_With_JSON_Header_thenR public void givengetDescendantsRegions_whenCorrectRequest_With_XML_Header_thenResponseIsOk() { when(mockSparqlUtils.executeSparqlQuery(anyString())) .thenReturn(ConstantForIntegration.REGION_MOCK_SERVER_RETURN_DESCENDANTS); - Response response = geoApi.getDescendants(CODE, MediaType.APPLICATION_XML, null, null); + Response response = geoApi.getDescendants(CODE, MediaType.APPLICATION_XML, null, null, null); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertEquals(ConstantForIntegration.REGION_EXPECTED_RESPONSE_DESCENDANTS_XML, response.getEntity()); } diff --git a/src/test/java/fr/insee/rmes/api/geo/territoire/RegionApiTest.java b/src/test/java/fr/insee/rmes/api/geo/territoire/RegionApiTest.java index 4f0d22b3..875bec02 100644 --- a/src/test/java/fr/insee/rmes/api/geo/territoire/RegionApiTest.java +++ b/src/test/java/fr/insee/rmes/api/geo/territoire/RegionApiTest.java @@ -175,7 +175,7 @@ void givenGetRegionDescendants_whenCorrectRequest_andHeaderContentIsJson_thenRes list.add(new Region()); // Call method - geoApi.getDescendants("something", MediaType.APPLICATION_JSON, null, null); + geoApi.getDescendants("something", MediaType.APPLICATION_JSON, null, null, null); verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -187,7 +187,7 @@ void givenGetRegionDescendants_whenCorrectRequest_andHeaderContentIsXml_thenResp list.add(new Region()); // Call method - geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null); + geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null, null); verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -198,11 +198,11 @@ void givenGetRegionDescendants_WhenCorrectRequest_thenResponseIsNotFound() { this.mockUtilsMethodsThenReturnListOfPojo(Boolean.FALSE); // Call method header content = xml - Response response = geoApi.getDescendants("something", MediaType.APPLICATION_JSON, null, null); + Response response = geoApi.getDescendants("something", MediaType.APPLICATION_JSON, null, null, null); Assertions.assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); // Call method header content = json - response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null); + response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null, null); Assertions.assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); verify(mockResponseUtils, never()).produceResponse(Mockito.any(), Mockito.any()); @@ -216,7 +216,7 @@ void givenGetRegionDescendants_WhenCorrectRequest_thenParameterDateIsRight() { list.add(new Region()); // Call method header content = xml - geoApi.getDescendants("something", MediaType.APPLICATION_XML, "2000-01-01", null); + geoApi.getDescendants("something", MediaType.APPLICATION_XML, "2000-01-01", null, null); verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -224,7 +224,7 @@ void givenGetRegionDescendants_WhenCorrectRequest_thenParameterDateIsRight() { void givenGetRegionDescendants_WhenCorrectRequest_thenParameterDateIsBad() { // Call method header content = xml - Response response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, "nimportequoi", null); + Response response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, "nimportequoi", null, null); Assertions.assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } @@ -236,7 +236,7 @@ void givenGetRegionDescendants_WhenCorrectRequest_thenParameterTypeIsNull() { list.add(new Region()); // Call method header content = xml - geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null); + geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, null, null); verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -253,7 +253,7 @@ void givenGetRegionDescendants_WhenCorrectRequest_thenParameterTypeIsRight() { "something", MediaType.APPLICATION_XML, null, - EnumTypeGeographie.ARRONDISSEMENT.getTypeObjetGeo()); + EnumTypeGeographie.ARRONDISSEMENT.getTypeObjetGeo(), null); verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } @@ -261,7 +261,7 @@ void givenGetRegionDescendants_WhenCorrectRequest_thenParameterTypeIsRight() { void givenGetRegionDescendants_WhenCorrectRequest_thenParameterTypeIsBad() { // Call method header content = xml - Response response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, "unTypeQuelconque"); + Response response = geoApi.getDescendants("something", MediaType.APPLICATION_XML, null, "unTypeQuelconque", null); Assertions.assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } From e61423653a913989e0817b2b85489d8d42831580 Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Thu, 20 Jan 2022 16:12:34 +0100 Subject: [PATCH 14/20] Simplify requests --- .../fr/insee/rmes/queries/geo/GeoQueries.java | 24 +++---- ...toireByCodeAndDateAndFiltreNomCommune.ftlh | 71 ------------------- .../getTerritoireByCodeDateNomcommune.ftlh | 66 +++++++++++++++++ 3 files changed, 77 insertions(+), 84 deletions(-) delete mode 100644 src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh create mode 100644 src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index 977cf856..90b7562d 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -307,15 +307,13 @@ private static String getAscendantOrDescendantsQuery( params.put(FILTRE, filtreNom); params.put(COM,com); params.put(ASCENDANT, String.valueOf(ascendant)); - if (typeOrigine.getTypeObjetGeo() == "CollectiviteDOutreMer") { - return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh", params); - } - else if (typeOrigine.getTypeObjetGeo() == "District") { - return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh", params); - } - else { +// +// if (EnumTypeGeographie.DISTRICT.equals(typeOrigine)) { +// return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh", params); +// } +// else { return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDate.ftlh", params); - } + // } } private static String getPreviousOrNextQuery( @@ -348,11 +346,11 @@ private static String getTerritoireFiltre(String code, String date, String filtr Map params = buildCodeAndDateAndFilterParams(code, date, filtreNom,com); params.put("territoire", typeGeo.getTypeObjetGeo()); params.put("chefLieu", typeGeo.getChefLieuPredicate()); - if (typeGeo.getTypeObjetGeo() == "District") { - return buildRequest(QUERIES_FOLDER, "getTerritoireByCodeAndDateDistrict.ftlh", params); - } else { - return buildRequest(QUERIES_FOLDER, "getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh", params); - } +// if (EnumTypeGeographie.DISTRICT.equals(typeGeo)) { +// return buildRequest(QUERIES_FOLDER, "getTerritoireByCodeAndDateDistrict.ftlh", params); +// } else { + return buildRequest(QUERIES_FOLDER, "getTerritoireByCodeDateNomcommune.ftlh", params); + // } } private static Map buildCodeAndDateAndFilterParams(String code, String date, String filtreNom, String com) { diff --git a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh deleted file mode 100644 index dca3d92d..00000000 --- a/src/main/resources/request/geographie/getTerritoireByCodeAndDateAndFiltreNomCommune.ftlh +++ /dev/null @@ -1,71 +0,0 @@ -SELECT DISTINCT ?uri ?code ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?chefLieu -FROM - WHERE { -<#if com != "true"> - ?uri a igeo:${territoire} ; - igeo:codeArticle ?typeArticle ; - (igeo:subdivisionDirecteDe)+ ; - igeo:nom ?intitule ; - igeo:nomSansArticle ?intituleSansArticle . -<#else> - ?uri a igeo:${territoire} ; - igeo:codeArticle ?typeArticle ; - igeo:nom ?intitule ; - igeo:nomSansArticle ?intituleSansArticle . - -<#if code != "none"> - ?uri igeo:codeINSEE '${code}' . - BIND('${code}' as ?code) -<#else> - ?uri igeo:codeINSEE ?code . - - OPTIONAL { - ?evenementCreation igeo:creation ?uri ; - igeo:date ?dateCreation . - } - OPTIONAL { - ?evenementSuppression igeo:suppression ?uri ; - igeo:date ?dateSuppression. - } -<#if chefLieu != "none"> - OPTIONAL { - ?uri igeo:${chefLieu} ?chefLieuRDF . - ?chefLieuRDF igeo:codeINSEE ?chefLieu. - OPTIONAL { - ?evenementCreationChefLieu igeo:creation ?chefLieuRDF ; - igeo:date ?dateCreationChefLieu . - } - OPTIONAL { - ?evenementSuppressionChefLieu igeo:suppression ?chefLieuRDF ; - igeo:date ?dateSuppressionChefLieu. - } - - <#if date != "*"> - FILTER(!BOUND(?dateCreationChefLieu) || ?dateCreationChefLieu <= '${date}'^^xsd:date) - FILTER(!BOUND(?dateSuppressionChefLieu) || ?dateSuppressionChefLieu > '${date}'^^xsd:date) - - - } - -<#if filtreNom != "*"> - BIND( '${filtreNom}' AS ?query). - BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . - BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intituleSansArticle), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNomSansArticle) . - BIND (CONCAT("^", REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?query), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "([^/]+)[/]", "$1-sur-"),"([^\\\\]+)[\\\\]", "$1-sous-"), "[-_']", " "),"[^a-z0-9() ]", ""), "[ ]{2,}", " "), "^st(e)? ", "saint$1 "), "") AS ?formattedQuery) . - FILTER (REGEX(?formattedNom, ?formattedQuery) || REGEX(?formattedNomSansArticle, ?formattedQuery)) - <#if date != "*"> - FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${date}'^^xsd:date) - FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '${date}'^^xsd:date) - - -<#else> - - <#if date != "*"> - FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${date}'^^xsd:date) - FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '${date}'^^xsd:date) - - - - } - ORDER BY ?code - \ No newline at end of file diff --git a/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh new file mode 100644 index 00000000..4c0fc948 --- /dev/null +++ b/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh @@ -0,0 +1,66 @@ +SELECT DISTINCT ?uri ?code ?typeArticle ?intitule ?intituleSansArticle ?dateCreation ?dateSuppression ?chefLieu +FROM + WHERE { + + ?uri a igeo:${territoire} ; + igeo:codeArticle ?typeArticle ; + igeo:nom ?intitule ; + igeo:nomSansArticle ?intituleSansArticle . + +<#if com != "true"> + ?uri (igeo:subdivisionDirecteDe)+ . + + +<#if code != "none"> + ?uri igeo:codeINSEE '${code}' . + BIND('${code}' as ?code) +<#else> + ?uri igeo:codeINSEE ?code . + + + OPTIONAL { + ?evenementCreation igeo:creation ?uri ; + igeo:date ?dateCreation . + } + OPTIONAL { + ?evenementSuppression igeo:suppression ?uri ; + igeo:date ?dateSuppression. + } + +<#if chefLieu != "none"> + OPTIONAL { + ?uri igeo:${chefLieu} ?chefLieuRDF . + ?chefLieuRDF igeo:codeINSEE ?chefLieu. + OPTIONAL { + ?evenementCreationChefLieu igeo:creation ?chefLieuRDF ; + igeo:date ?dateCreationChefLieu . + } + OPTIONAL { + ?evenementSuppressionChefLieu igeo:suppression ?chefLieuRDF ; + igeo:date ?dateSuppressionChefLieu. + } + + <#if date != "*"> + FILTER(!BOUND(?dateCreationChefLieu) || ?dateCreationChefLieu <= '${date}'^^xsd:date) + FILTER(!BOUND(?dateSuppressionChefLieu) || ?dateSuppressionChefLieu > '${date}'^^xsd:date) + + + } + +<#if filtreNom != "*"> + BIND( '${filtreNom}' AS ?query). + BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . + BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intituleSansArticle), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNomSansArticle) . + BIND (CONCAT("^", REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?query), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "([^/]+)[/]", "$1-sur-"),"([^\\\\]+)[\\\\]", "$1-sous-"), "[-_']", " "),"[^a-z0-9() ]", ""), "[ ]{2,}", " "), "^st(e)? ", "saint$1 "), "") AS ?formattedQuery) . + FILTER (REGEX(?formattedNom, ?formattedQuery) || REGEX(?formattedNomSansArticle, ?formattedQuery)) + + +<#if date != "*"> + FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${date}'^^xsd:date) + FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '${date}'^^xsd:date) + + + + } + ORDER BY ?code + \ No newline at end of file From e63b94ec8b375bf2fe7dbe41da18a601374f84ef Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Thu, 20 Jan 2022 16:12:56 +0100 Subject: [PATCH 15/20] Change param to boolean --- .../fr/insee/rmes/api/geo/AbstractGeoApi.java | 5 +++++ .../rmes/api/geo/territoire/CommuneApi.java | 7 ++++--- .../fr/insee/rmes/queries/geo/GeoQueries.java | 17 +++++++---------- .../java/fr/insee/rmes/utils/Constants.java | 3 +-- .../rmes/api/geo/territoire/CommuneApiTest.java | 2 +- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java b/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java index b37b6f10..b592c5e8 100644 --- a/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/AbstractGeoApi.java @@ -85,6 +85,11 @@ protected String formatValidParameterFiltreIfIsNull(String filtreNom) { return (filtreNom != null) ? filtreNom : "*"; } + protected Boolean formatValidParameterBooleanIfIsNull(Boolean bool) { + return (bool != null) ? bool : false; + } + + protected Response generateStatusResponse(boolean objectIsFound, Object o, String header) { if (objectIsFound) { diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java index 12649592..687ed759 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CommuneApi.java @@ -226,8 +226,9 @@ public Response getListe( value = Constants.PARAMETER_FILTRE) String filtreNom, @Parameter(description = LITTERAL_PARAMETER_COM_DESCRIPTION, required = false, - schema = @Schema(allowableValues = {"true","false"},example="false")) @QueryParam( - value = Constants.PARAMETER_STRING) String com + schema = @Schema(type = Constants.TYPE_BOOLEAN, allowableValues = {"true","false"},example="false", defaultValue = "false")) + @QueryParam( + value = Constants.PARAMETER_STRING) Boolean com ) { @@ -240,7 +241,7 @@ public Response getListe( return this .generateResponseListOfTerritoire( sparqlUtils - .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNom),this.formatValidParameterFiltreIfIsNull(com))), + .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNom),this.formatValidParameterBooleanIfIsNull(com))), header, Communes.class, Commune.class); diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index 90b7562d..60f04ab1 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -41,7 +41,7 @@ public static String getCommuneByCodeAndDate(String code, String date) { } public static String getCollectiviteDOutreMerByCodeAndDate(String code,String date) { - return getTerritoireFiltre(code, date,"*", EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER,"true"); + return getTerritoireFiltre(code, date,"*", EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER,true); } public static String getDepartementByCodeAndDate(String code, String date) { @@ -49,7 +49,7 @@ public static String getDepartementByCodeAndDate(String code, String date) { } public static String getDistrictByCodeAndDate(String code,String date) { - return getTerritoireFiltre(code, date,"*",EnumTypeGeographie.DISTRICT,"true"); + return getTerritoireFiltre(code, date,"*",EnumTypeGeographie.DISTRICT,true); } public static String getRegionByCodeAndDate(String code, String date) { @@ -73,7 +73,7 @@ public static String getArrondissementmunicipalByCodeAndDate(String code, String } /* LIST */ - public static String getListCommunes(String date,String filtreNom,String com) { + public static String getListCommunes(String date,String filtreNom,boolean com) { return getTerritoireFiltre(Constants.NONE, date,filtreNom, EnumTypeGeographie.COMMUNE,com); } @@ -328,10 +328,7 @@ private static String getPreviousOrNextQuery( } private static String getTerritoire(String code, String date, EnumTypeGeographie typeGeo) { - Map params = buildCodeAndDateParams(code, date); - params.put("territoire", typeGeo.getTypeObjetGeo()); - params.put("chefLieu", typeGeo.getChefLieuPredicate()); - return buildRequest(QUERIES_FOLDER, "getTerritoireByCodeAndDate.ftlh", params); + return getTerritoireFiltre(code,date,Constants.ABSENT,typeGeo,false); } private static Map buildCodeAndDateParams(String code, String date) { @@ -342,7 +339,7 @@ private static Map buildCodeAndDateParams(String code, String da } - private static String getTerritoireFiltre(String code, String date, String filtreNom, EnumTypeGeographie typeGeo,String com) { + private static String getTerritoireFiltre(String code, String date, String filtreNom, EnumTypeGeographie typeGeo,boolean com) { Map params = buildCodeAndDateAndFilterParams(code, date, filtreNom,com); params.put("territoire", typeGeo.getTypeObjetGeo()); params.put("chefLieu", typeGeo.getChefLieuPredicate()); @@ -353,12 +350,12 @@ private static String getTerritoireFiltre(String code, String date, String filtr // } } - private static Map buildCodeAndDateAndFilterParams(String code, String date, String filtreNom, String com) { + private static Map buildCodeAndDateAndFilterParams(String code, String date, String filtreNom, boolean com) { Map params = new HashMap<>(); params.put(CODE, code); params.put(DATE, date); params.put(FILTRE, filtreNom); - params.put(COM,com); + params.put(COM, String.valueOf(com)); return params; } diff --git a/src/main/java/fr/insee/rmes/utils/Constants.java b/src/main/java/fr/insee/rmes/utils/Constants.java index d753733f..d517bc32 100644 --- a/src/main/java/fr/insee/rmes/utils/Constants.java +++ b/src/main/java/fr/insee/rmes/utils/Constants.java @@ -5,13 +5,12 @@ public class Constants { public static final String NONE = "none"; public static final String TYPE_STRING = "string"; public static final String CODE = "code"; - public static final String TYPE_BOOLEAN = "bolean"; + public static final String TYPE_BOOLEAN = "boolean"; public static final String FORMAT_DATE = "date"; public static final String PARAMETER_DATE = "date"; public static final String PARAMETER_DATE_PROJECTION = "dateProjection"; public static final String PARAMETER_TYPE = "type"; public static final String PARAMETER_FILTRE="filtreNom"; - public static final String PARAMETER_BOOLEAN="com"; public static final String PARAMETER_STRING="com"; public static final String ABSENT="*"; diff --git a/src/test/java/fr/insee/rmes/api/geo/territoire/CommuneApiTest.java b/src/test/java/fr/insee/rmes/api/geo/territoire/CommuneApiTest.java index 4b30bdcf..73777f1e 100644 --- a/src/test/java/fr/insee/rmes/api/geo/territoire/CommuneApiTest.java +++ b/src/test/java/fr/insee/rmes/api/geo/territoire/CommuneApiTest.java @@ -338,7 +338,7 @@ void givenGetListeCommune_WhenCorrectRequest_thenParameterDateIsRight(String dat list.add(new Commune()); // Call method header content = xml - geoApi.getListe(MediaType.APPLICATION_XML, date, date, date);/*modifier suite a changement du nombre de variables */ + geoApi.getListe(MediaType.APPLICATION_XML, date, date, Boolean.TRUE);/*modifier suite a changement du nombre de variables */ verify(mockResponseUtils, times(1)).produceResponse(Mockito.any(), Mockito.any()); } From e93b6eeb7592cac873be19565f22eb89a3dbc668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Fri, 21 Jan 2022 11:12:35 +0100 Subject: [PATCH 16/20] fix : update service list COM --- .../rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java | 2 +- src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java index 011968a1..a7feb277 100644 --- a/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java +++ b/src/main/java/fr/insee/rmes/api/geo/territoire/CollectivitesDOutreMerAPI.java @@ -44,7 +44,7 @@ public class CollectivitesDOutreMerAPI extends AbstractGeoApi { private static final String LITTERAL_PARAMETER_DATE_DESCRIPTION = "Filtre pour renvoyer la collectivite d'outre-mer active à la date donnée. Par défaut, c’est la date courante. (Format : 'AAAA-MM-JJ')"; private static final String LITTERAL_PARAMETER_TYPE_DESCRIPTION = "Filtre sur le type de territoire renvoyé."; - private static final String LITTERAL_CODE_EXAMPLE = "986"; + private static final String LITTERAL_CODE_EXAMPLE = "988"; diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index 60f04ab1..bc70a08b 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -78,7 +78,7 @@ public static String getListCommunes(String date,String filtreNom,boolean com) { } public static String getListCollectivitesDOutreMer(String date) { - return getTerritoire(Constants.NONE, date, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER); + return getTerritoireFiltre(Constants.NONE, date,Constants.ABSENT, EnumTypeGeographie.COLLECTIVITE_D_OUTRE_MER,true); } public static String getListDepartements(String date) { From 8f09ab69cd388fa2886e2ae65c7d2be79a01bd2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Mon, 31 Jan 2022 18:49:20 +0100 Subject: [PATCH 17/20] Update queries to disable auto-escaping on the name of the territory --- .../geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh | 5 ++++- .../getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh | 2 +- .../geographie/getTerritoireByCodeDateNomcommune.ftlh | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh index 0c926632..614695f2 100644 --- a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh +++ b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh @@ -43,8 +43,11 @@ FROM ?evenementSuppression igeo:suppression ?uri ; igeo:date ?dateSuppression. } + + + <#if filtreNom !='*'> - BIND('${filtreNom}' AS ?query). + BIND("${filtreNom ?no_esc}" AS ?query). # Formattage du nom avec article pour comparaison non polluée par majuscules et accents BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . # Formattage du nom sans article pour comparaison non polluée par majuscules et accents diff --git a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh index ce6f9185..4f310537 100644 --- a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh +++ b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh @@ -25,7 +25,7 @@ WHERE { <#if filtreNom !='*'> # ## Début du filtre sur le libellé ## # La chaîne utilisateur dans une variable query - BIND('${filtreNom}' AS ?query). + BIND("${filtreNom ?no_esc}" AS ?query). # Formattage du nom avec article pour comparaison non polluée par majuscules et accents BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . # Formattage du nom sans article pour comparaison non polluée par majuscules et accents diff --git a/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh index 4c0fc948..ba00c65e 100644 --- a/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh +++ b/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh @@ -48,7 +48,7 @@ FROM } <#if filtreNom != "*"> - BIND( '${filtreNom}' AS ?query). + BIND("${filtreNom ?no_esc}" AS ?query). BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intitule), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_\']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNom) . BIND (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?intituleSansArticle), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "[-_']", " "), "[^a-z0-9() ]", ""), "[ ]{2,}", " ") AS ?formattedNomSansArticle) . BIND (CONCAT("^", REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?query), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "([^/]+)[/]", "$1-sur-"),"([^\\\\]+)[\\\\]", "$1-sous-"), "[-_']", " "),"[^a-z0-9() ]", ""), "[ ]{2,}", " "), "^st(e)? ", "saint$1 "), "") AS ?formattedQuery) . From f80cfac574b3db3dde9287831e8bb792d2615b35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Wed, 2 Feb 2022 16:21:50 +0100 Subject: [PATCH 18/20] update query getTerritoireByCodeDateNomCommune --- src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java | 2 +- .../geographie/getTerritoireByCodeDateNomcommune.ftlh | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java index bc70a08b..5f0d2a75 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -328,7 +328,7 @@ private static String getPreviousOrNextQuery( } private static String getTerritoire(String code, String date, EnumTypeGeographie typeGeo) { - return getTerritoireFiltre(code,date,Constants.ABSENT,typeGeo,false); + return getTerritoireFiltre(code,date,Constants.ABSENT,typeGeo,true); } private static Map buildCodeAndDateParams(String code, String date) { diff --git a/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh index ba00c65e..d2f4554d 100644 --- a/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh +++ b/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh @@ -7,9 +7,7 @@ FROM igeo:nom ?intitule ; igeo:nomSansArticle ?intituleSansArticle . -<#if com != "true"> - ?uri (igeo:subdivisionDirecteDe)+ . - + <#if code != "none"> ?uri igeo:codeINSEE '${code}' . @@ -18,6 +16,9 @@ FROM ?uri igeo:codeINSEE ?code . +<#if com != "true"> +filter(substr(?code,1,2) !='98') filter(substr(?code,1,3) != "975"||"977"||"978") + OPTIONAL { ?evenementCreation igeo:creation ?uri ; igeo:date ?dateCreation . From 2d6a89cf5e23904cd4b0550cf9835d72928396cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Thu, 3 Feb 2022 09:14:33 +0100 Subject: [PATCH 19/20] Update getTerritoireByCodeDateNomcommune.ftlh --- .../getTerritoireByCodeDateNomcommune.ftlh | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh index d2f4554d..a3ebf0eb 100644 --- a/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh +++ b/src/main/resources/request/geographie/getTerritoireByCodeDateNomcommune.ftlh @@ -4,20 +4,16 @@ FROM ?uri a igeo:${territoire} ; igeo:codeArticle ?typeArticle ; +<#if com != "true"> + (igeo:subdivisionDirecteDe/a) ?parent; + igeo:nom ?intitule ; igeo:nomSansArticle ?intituleSansArticle . - - - <#if code != "none"> ?uri igeo:codeINSEE '${code}' . BIND('${code}' as ?code) <#else> ?uri igeo:codeINSEE ?code . - - -<#if com != "true"> -filter(substr(?code,1,2) !='98') filter(substr(?code,1,3) != "975"||"977"||"978") OPTIONAL { ?evenementCreation igeo:creation ?uri ; @@ -55,13 +51,14 @@ filter(substr(?code,1,2) !='98') filter(substr(?code,1,3) != "975"||"977"||"978 BIND (CONCAT("^", REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LCASE(?query), "[àáâãäåaaa]", "a"), "ç", "c"), "[èééêë]", "e"), "[ìíîïì]", "i"), "[óôõö]", "o"), "[ùúûü]", "u"), "ÿ", "y"), "[œ]", "oe"), "([^/]+)[/]", "$1-sur-"),"([^\\\\]+)[\\\\]", "$1-sous-"), "[-_']", " "),"[^a-z0-9() ]", ""), "[ ]{2,}", " "), "^st(e)? ", "saint$1 "), "") AS ?formattedQuery) . FILTER (REGEX(?formattedNom, ?formattedQuery) || REGEX(?formattedNomSansArticle, ?formattedQuery)) - +<#if com != "true"> +FILTER(REGEX(STR(?parent), "(Departement|Arrondissement)$")) + <#if date != "*"> FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${date}'^^xsd:date) FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '${date}'^^xsd:date) - } ORDER BY ?code \ No newline at end of file From e13cf18cba572470498876ba2d891d521e706b9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bourgeois?= Date: Tue, 8 Feb 2022 10:02:58 +0100 Subject: [PATCH 20/20] update version --- metadataapi-changeLog.txt | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/metadataapi-changeLog.txt b/metadataapi-changeLog.txt index 77511a61..91fa40e7 100644 --- a/metadataapi-changeLog.txt +++ b/metadataapi-changeLog.txt @@ -1,3 +1,6 @@ +3.1.0 : Ajout des services des collectivités d'Outre-mer (Geo) +3.0.5 : Montée de version log4J +3.0.4 : Montée de version log4J 3.0.3 : Correction des régressions sur l'encodage des retours XML (documentation sims notamment) 3.0.2 : Correction de l'encodage des retours XML (documentation sims notamment) et logs 3.0.1 : Changement des properties pour correspondre à ce qui a été défini en production diff --git a/pom.xml b/pom.xml index 1bad9283..673343e0 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ war Implementation of the RMéS metadata API - 3.0.5 + 3.1.0 API RM\u00e9S