From 9f98a356b4f940990c4993d701d0e5f82b314a61 Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Tue, 22 Feb 2022 16:42:06 +0100 Subject: [PATCH 1/9] Check date for chefLieu --- .../getAllProjectionByTypeDate.ftlh | 34 +++++++++++++- ...AscendantsOrDescendantsByCodeTypeDate.ftlh | 17 ++++++- ...endantsOrDescendantsByCodeTypeDateCOM.ftlh | 46 ------------------- ...tsOrDescendantsByCodeTypeDateDistrict.ftlh | 30 ------------ .../getPreviousOrNextByCodeTypeDate.ftlh | 17 ++++++- .../getTerritoireByCodeAndDateDistrict.ftlh | 34 -------------- 6 files changed, 64 insertions(+), 114 deletions(-) delete mode 100644 src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh delete mode 100644 src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh delete mode 100644 src/main/resources/request/geographie/getTerritoireByCodeAndDateDistrict.ftlh diff --git a/src/main/resources/request/geographie/getAllProjectionByTypeDate.ftlh b/src/main/resources/request/geographie/getAllProjectionByTypeDate.ftlh index b11b3348..5b0964b0 100644 --- a/src/main/resources/request/geographie/getAllProjectionByTypeDate.ftlh +++ b/src/main/resources/request/geographie/getAllProjectionByTypeDate.ftlh @@ -12,7 +12,22 @@ WHERE { OPTIONAL { - ?origine ((igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion)/igeo:codeINSEE) ?chefLieuOrigine . + ?uri (igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion) ?chefLieuRDF . + ?chefLieuRDF igeo:codeINSEE ?chefLieuOrigine . + + 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) + } @@ -56,7 +71,22 @@ WHERE { } OPTIONAL { - ?uri ((igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion)/igeo:codeINSEE) ?chefLieu. + ?uri (igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion) ?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) + } FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${dateProjection}'^^xsd:date) diff --git a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh index 614695f2..1090f351 100644 --- a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh +++ b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDate.ftlh @@ -21,7 +21,22 @@ FROM OPTIONAL { - ?uri ((igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion)/igeo:codeINSEE) ?chefLieu. + ?uri (igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion) ?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) + } OPTIONAL { diff --git a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh deleted file mode 100644 index 4f310537..00000000 --- a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateCOM.ftlh +++ /dev/null @@ -1,46 +0,0 @@ -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:${typeOrigine} ; - igeo:codeINSEE '${code}' ; - (^igeo:subdivisionDirecteDe)+ ?ressource . - ?ressource a ?typeRDF; -<#if type != 'none'> - a igeo:${type}; - - 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#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.} - 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 ?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 - 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/getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh b/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh deleted file mode 100644 index 9be5faf7..00000000 --- a/src/main/resources/request/geographie/getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh +++ /dev/null @@ -1,30 +0,0 @@ -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/getPreviousOrNextByCodeTypeDate.ftlh b/src/main/resources/request/geographie/getPreviousOrNextByCodeTypeDate.ftlh index 7f43e918..192cae44 100644 --- a/src/main/resources/request/geographie/getPreviousOrNextByCodeTypeDate.ftlh +++ b/src/main/resources/request/geographie/getPreviousOrNextByCodeTypeDate.ftlh @@ -51,7 +51,22 @@ WHERE { } OPTIONAL { - ?uri ((igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion)/igeo:codeINSEE) ?chefLieu. + ?uri (igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion) ?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) + } diff --git a/src/main/resources/request/geographie/getTerritoireByCodeAndDateDistrict.ftlh b/src/main/resources/request/geographie/getTerritoireByCodeAndDateDistrict.ftlh deleted file mode 100644 index 8262b94e..00000000 --- a/src/main/resources/request/geographie/getTerritoireByCodeAndDateDistrict.ftlh +++ /dev/null @@ -1,34 +0,0 @@ -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 From 1ba6e847bcca04d94b66ec10afffbd1d2b419c54 Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Wed, 23 Feb 2022 09:12:51 +0100 Subject: [PATCH 2/9] Fix issue --- .../fr/insee/rmes/queries/geo/GeoQueries.java | 11 +---------- .../geographie/getProjectionByCodeTypeDate.ftlh | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 11 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 25a127a2..0dc1056c 100644 --- a/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java +++ b/src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java @@ -315,13 +315,8 @@ private static String getAscendantOrDescendantsQuery( params.put(FILTRE, filtreNom); params.put(COM,com); params.put(ASCENDANT, String.valueOf(ascendant)); -// -// if (EnumTypeGeographie.DISTRICT.equals(typeOrigine)) { -// return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDateDistrict.ftlh", params); -// } -// else { return buildRequest(QUERIES_FOLDER, "getAscendantsOrDescendantsByCodeTypeDate.ftlh", params); - // } + } private static String getPreviousOrNextQuery( @@ -351,11 +346,7 @@ 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 (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, boolean com) { diff --git a/src/main/resources/request/geographie/getProjectionByCodeTypeDate.ftlh b/src/main/resources/request/geographie/getProjectionByCodeTypeDate.ftlh index 6dffd3e4..3a7f2f70 100644 --- a/src/main/resources/request/geographie/getProjectionByCodeTypeDate.ftlh +++ b/src/main/resources/request/geographie/getProjectionByCodeTypeDate.ftlh @@ -58,7 +58,22 @@ WHERE { } OPTIONAL { - ?uri ((igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion)/igeo:codeINSEE) ?chefLieu. + ?uri (igeo:sousPrefecture|igeo:prefecture|igeo:prefectureDeRegion) ?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) + } FILTER(!BOUND(?dateCreation) || ?dateCreation <= '${dateProjection}'^^xsd:date) From 62e02751539682bed982c94fa7ad676ec14fed5c Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Wed, 20 Apr 2022 15:48:01 +0200 Subject: [PATCH 3/9] Initialize ehCache for naf (ssClasse) and communes --- pom.xml | 6 ++ .../insee/rmes/api/AbstractMetadataApi.java | 7 +- .../rmes/api/classifications/CodesAPI.java | 20 +++-- .../rmes/api/geo/territoire/CommuneApi.java | 24 +++++- .../fr/insee/rmes/config/CacheHelper.java | 79 +++++++++++++++++++ .../CirconscriptionTerritoriale.java | 2 - 6 files changed, 124 insertions(+), 14 deletions(-) create mode 100644 src/main/java/fr/insee/rmes/config/CacheHelper.java diff --git a/pom.xml b/pom.xml index cd753911..1b4e2fcc 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,12 @@ ${jersey.version} + + + org.ehcache + ehcache + 3.10.0 + diff --git a/src/main/java/fr/insee/rmes/api/AbstractMetadataApi.java b/src/main/java/fr/insee/rmes/api/AbstractMetadataApi.java index dc70b2a1..dbd4a6a2 100644 --- a/src/main/java/fr/insee/rmes/api/AbstractMetadataApi.java +++ b/src/main/java/fr/insee/rmes/api/AbstractMetadataApi.java @@ -6,6 +6,7 @@ import javax.ws.rs.core.MediaType; +import fr.insee.rmes.config.CacheHelper; import fr.insee.rmes.utils.CSVUtils; import fr.insee.rmes.utils.ResponseUtils; import fr.insee.rmes.utils.SparqlUtils; @@ -29,12 +30,14 @@ public abstract class AbstractMetadataApi { protected CSVUtils csvUtils; protected ResponseUtils responseUtils; + + protected CacheHelper cacheHelper; - public AbstractMetadataApi() { - + protected AbstractMetadataApi() { this.sparqlUtils = new SparqlUtils(); this.csvUtils = new CSVUtils(); this.responseUtils = new ResponseUtils(); + this.cacheHelper = CacheHelper.getInstance(); } /** diff --git a/src/main/java/fr/insee/rmes/api/classifications/CodesAPI.java b/src/main/java/fr/insee/rmes/api/classifications/CodesAPI.java index 8bd5349c..38ae1561 100644 --- a/src/main/java/fr/insee/rmes/api/classifications/CodesAPI.java +++ b/src/main/java/fr/insee/rmes/api/classifications/CodesAPI.java @@ -166,12 +166,20 @@ public Response getSousClasseNAF2008( @Parameter(hidden = true) @HeaderParam("Accept") String header) { logger.debug("Received GET request for NAF sub-class {}", code); - SousClasseNAF2008 sousClasse = new SousClasseNAF2008(code); - String csvResult = sparqlUtils.executeSparqlQuery(Naf2008Queries.getSousClasseNAF2008(code)); - sousClasse = (SousClasseNAF2008) csvUtils.populatePOJO(csvResult, sousClasse); - - if (sousClasse.getUri() == null) { - return Response.status(Status.NOT_FOUND).entity("").build(); + //Check if element is not already in cache + SousClasseNAF2008 sousClasse = cacheHelper.getSousClasseNaf2008CacheFromCacheManager().get(code); + + if(sousClasse == null) { + sousClasse = new SousClasseNAF2008(code); + String csvResult = sparqlUtils.executeSparqlQuery(Naf2008Queries.getSousClasseNAF2008(code)); + sousClasse = (SousClasseNAF2008) csvUtils.populatePOJO(csvResult, sousClasse); + + if (sousClasse.getUri() == null) { + return Response.status(Status.NOT_FOUND).entity("").build(); + } + + //Add element in cache + cacheHelper.getSousClasseNaf2008CacheFromCacheManager().put(code, sousClasse); } return Response.ok(responseUtils.produceResponse(sousClasse, header)).build(); } 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 687ed759..bc571db8 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 @@ -1,5 +1,8 @@ package fr.insee.rmes.api.geo.territoire; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.Path; @@ -237,15 +240,28 @@ public Response getListe( if ( ! this.verifyParameterDateIsRightWithHistory(date)) { return this.generateBadRequestResponse(); } - else { + boolean today = date == null || date.equals(DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDateTime.now())); + + String communesCsv = null; + + if (today) { //Check if element is not already in cache + communesCsv = cacheHelper.getActualCommunesCacheFromCacheManager().get("all"); + } + + if (communesCsv == null) { + communesCsv = sparqlUtils + .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNom),this.formatValidParameterBooleanIfIsNull(com))); + if (today) { //store list in cache + cacheHelper.getActualCommunesCacheFromCacheManager().put("all", communesCsv); + } + } return this .generateResponseListOfTerritoire( - sparqlUtils - .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNom),this.formatValidParameterBooleanIfIsNull(com))), + communesCsv, header, Communes.class, Commune.class); - } + } @Path(ConstGeoApi.PATH_COMMUNE + CODE_PATTERN + ConstGeoApi.PATH_SUIVANT) diff --git a/src/main/java/fr/insee/rmes/config/CacheHelper.java b/src/main/java/fr/insee/rmes/config/CacheHelper.java new file mode 100644 index 00000000..315eb1af --- /dev/null +++ b/src/main/java/fr/insee/rmes/config/CacheHelper.java @@ -0,0 +1,79 @@ +package fr.insee.rmes.config; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.ehcache.Cache; +import org.ehcache.CacheManager; +import org.ehcache.config.builders.CacheConfigurationBuilder; +import org.ehcache.config.builders.CacheManagerBuilder; +import org.ehcache.config.builders.ResourcePoolsBuilder; + +import fr.insee.rmes.modeles.classification.naf2008.SousClasseNAF2008; + +public final class CacheHelper { + + private static CacheHelper instance; //CacheHelper is a singleton + private static Logger logger = LogManager.getLogger(CacheHelper.class); + + private CacheHelper() { + cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build(); + cacheManager.init(); + + createSousClasseNaf2008Cache(); + createActualCommunesCache(); + logger.debug("All caches are initialized"); + } + + private CacheManager cacheManager; + + public static CacheHelper getInstance(){ + if(instance == null) { + instance = new CacheHelper(); + } + return instance; + } + + /******************************* + * Sous classe NAF 2008 + **********************************/ + private void createSousClasseNaf2008Cache() { + logger.debug("Init cache sousClasseNaf2008Cache"); + cacheManager + .createCache("sousClasseNaf2008Cache", CacheConfigurationBuilder + .newCacheConfigurationBuilder(String.class, SousClasseNAF2008.class,ResourcePoolsBuilder.heap(800))); + } + + public Cache getSousClasseNaf2008CacheFromCacheManager() { + logger.debug("getSousClasseNaf2008CacheFromCacheManager"); + return cacheManager.getCache("sousClasseNaf2008Cache", String.class, SousClasseNAF2008.class); + } + + + /******************************* + * Communes + **********************************/ + + private void createActualCommunesCache() { + logger.debug("Init cache actualCommunesCache"); + cacheManager + .createCache("actualCommunesCache", CacheConfigurationBuilder + .newCacheConfigurationBuilder(String.class, String.class,ResourcePoolsBuilder.heap(1))); + } + + public Cache getActualCommunesCacheFromCacheManager() { + logger.debug("getActualCommunesCacheFromCacheManager"); + return cacheManager.getCache("actualCommunesCache", String.class, String.class); + } + +/* + private void removeCache(String cacheToRemove) { + cacheManager.removeCache(cacheToRemove); + } + + private void closeCacheManager() { + cacheManager.close(); + } +*/ + + +} diff --git a/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java b/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java index 1b8cf0f9..cdd96a4d 100644 --- a/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java +++ b/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java @@ -4,8 +4,6 @@ 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; From 62583b444ca98a2c6928d4d2b1672c7b2ab6d881 Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Wed, 20 Apr 2022 15:49:04 +0200 Subject: [PATCH 4/9] Change to java 11 --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 1b4e2fcc..7564d098 100644 --- a/pom.xml +++ b/pom.xml @@ -14,8 +14,8 @@ API sur les m\u00e9tadonn\u00e9es de l'Insee - 1.8 - 1.8 + 11 + 11 2.29.1 2.10.1 4.0.3 @@ -39,7 +39,7 @@ java 0.8.5 3.7.0.1746 - -Xms256m -Xmx512m -XX:MaxPermSize=128m -ea -Dfile.encoding=UTF-8 + -Xms256m -Xmx512m -ea -Dfile.encoding=UTF-8 @@ -86,7 +86,7 @@ org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j18-impl ${log.version} From c950fd59ceb8ac72274e97254f41e1b058310c6f Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Fri, 22 Apr 2022 16:39:54 +0200 Subject: [PATCH 5/9] Revert "Initialize ehCache for naf (ssClasse) and communes" This reverts commit 62e02751539682bed982c94fa7ad676ec14fed5c. --- pom.xml | 6 -- .../insee/rmes/api/AbstractMetadataApi.java | 7 +- .../rmes/api/classifications/CodesAPI.java | 20 ++--- .../rmes/api/geo/territoire/CommuneApi.java | 24 +----- .../fr/insee/rmes/config/CacheHelper.java | 79 ------------------- .../CirconscriptionTerritoriale.java | 2 + 6 files changed, 14 insertions(+), 124 deletions(-) delete mode 100644 src/main/java/fr/insee/rmes/config/CacheHelper.java diff --git a/pom.xml b/pom.xml index 7564d098..18f9045f 100644 --- a/pom.xml +++ b/pom.xml @@ -65,12 +65,6 @@ ${jersey.version} - - - org.ehcache - ehcache - 3.10.0 - diff --git a/src/main/java/fr/insee/rmes/api/AbstractMetadataApi.java b/src/main/java/fr/insee/rmes/api/AbstractMetadataApi.java index dbd4a6a2..dc70b2a1 100644 --- a/src/main/java/fr/insee/rmes/api/AbstractMetadataApi.java +++ b/src/main/java/fr/insee/rmes/api/AbstractMetadataApi.java @@ -6,7 +6,6 @@ import javax.ws.rs.core.MediaType; -import fr.insee.rmes.config.CacheHelper; import fr.insee.rmes.utils.CSVUtils; import fr.insee.rmes.utils.ResponseUtils; import fr.insee.rmes.utils.SparqlUtils; @@ -30,14 +29,12 @@ public abstract class AbstractMetadataApi { protected CSVUtils csvUtils; protected ResponseUtils responseUtils; - - protected CacheHelper cacheHelper; - protected AbstractMetadataApi() { + public AbstractMetadataApi() { + this.sparqlUtils = new SparqlUtils(); this.csvUtils = new CSVUtils(); this.responseUtils = new ResponseUtils(); - this.cacheHelper = CacheHelper.getInstance(); } /** diff --git a/src/main/java/fr/insee/rmes/api/classifications/CodesAPI.java b/src/main/java/fr/insee/rmes/api/classifications/CodesAPI.java index 38ae1561..8bd5349c 100644 --- a/src/main/java/fr/insee/rmes/api/classifications/CodesAPI.java +++ b/src/main/java/fr/insee/rmes/api/classifications/CodesAPI.java @@ -166,20 +166,12 @@ public Response getSousClasseNAF2008( @Parameter(hidden = true) @HeaderParam("Accept") String header) { logger.debug("Received GET request for NAF sub-class {}", code); - //Check if element is not already in cache - SousClasseNAF2008 sousClasse = cacheHelper.getSousClasseNaf2008CacheFromCacheManager().get(code); - - if(sousClasse == null) { - sousClasse = new SousClasseNAF2008(code); - String csvResult = sparqlUtils.executeSparqlQuery(Naf2008Queries.getSousClasseNAF2008(code)); - sousClasse = (SousClasseNAF2008) csvUtils.populatePOJO(csvResult, sousClasse); - - if (sousClasse.getUri() == null) { - return Response.status(Status.NOT_FOUND).entity("").build(); - } - - //Add element in cache - cacheHelper.getSousClasseNaf2008CacheFromCacheManager().put(code, sousClasse); + SousClasseNAF2008 sousClasse = new SousClasseNAF2008(code); + String csvResult = sparqlUtils.executeSparqlQuery(Naf2008Queries.getSousClasseNAF2008(code)); + sousClasse = (SousClasseNAF2008) csvUtils.populatePOJO(csvResult, sousClasse); + + if (sousClasse.getUri() == null) { + return Response.status(Status.NOT_FOUND).entity("").build(); } return Response.ok(responseUtils.produceResponse(sousClasse, header)).build(); } 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 bc571db8..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 @@ -1,8 +1,5 @@ package fr.insee.rmes.api.geo.territoire; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.Path; @@ -240,28 +237,15 @@ public Response getListe( if ( ! this.verifyParameterDateIsRightWithHistory(date)) { return this.generateBadRequestResponse(); } - boolean today = date == null || date.equals(DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDateTime.now())); - - String communesCsv = null; - - if (today) { //Check if element is not already in cache - communesCsv = cacheHelper.getActualCommunesCacheFromCacheManager().get("all"); - } - - if (communesCsv == null) { - communesCsv = sparqlUtils - .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNom),this.formatValidParameterBooleanIfIsNull(com))); - if (today) { //store list in cache - cacheHelper.getActualCommunesCacheFromCacheManager().put("all", communesCsv); - } - } + else { return this .generateResponseListOfTerritoire( - communesCsv, + sparqlUtils + .executeSparqlQuery(GeoQueries.getListCommunes(this.formatValidParameterDateIfIsNull(date), this.formatValidParameterFiltreIfIsNull(filtreNom),this.formatValidParameterBooleanIfIsNull(com))), header, Communes.class, Commune.class); - + } } @Path(ConstGeoApi.PATH_COMMUNE + CODE_PATTERN + ConstGeoApi.PATH_SUIVANT) diff --git a/src/main/java/fr/insee/rmes/config/CacheHelper.java b/src/main/java/fr/insee/rmes/config/CacheHelper.java deleted file mode 100644 index 315eb1af..00000000 --- a/src/main/java/fr/insee/rmes/config/CacheHelper.java +++ /dev/null @@ -1,79 +0,0 @@ -package fr.insee.rmes.config; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.ehcache.Cache; -import org.ehcache.CacheManager; -import org.ehcache.config.builders.CacheConfigurationBuilder; -import org.ehcache.config.builders.CacheManagerBuilder; -import org.ehcache.config.builders.ResourcePoolsBuilder; - -import fr.insee.rmes.modeles.classification.naf2008.SousClasseNAF2008; - -public final class CacheHelper { - - private static CacheHelper instance; //CacheHelper is a singleton - private static Logger logger = LogManager.getLogger(CacheHelper.class); - - private CacheHelper() { - cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build(); - cacheManager.init(); - - createSousClasseNaf2008Cache(); - createActualCommunesCache(); - logger.debug("All caches are initialized"); - } - - private CacheManager cacheManager; - - public static CacheHelper getInstance(){ - if(instance == null) { - instance = new CacheHelper(); - } - return instance; - } - - /******************************* - * Sous classe NAF 2008 - **********************************/ - private void createSousClasseNaf2008Cache() { - logger.debug("Init cache sousClasseNaf2008Cache"); - cacheManager - .createCache("sousClasseNaf2008Cache", CacheConfigurationBuilder - .newCacheConfigurationBuilder(String.class, SousClasseNAF2008.class,ResourcePoolsBuilder.heap(800))); - } - - public Cache getSousClasseNaf2008CacheFromCacheManager() { - logger.debug("getSousClasseNaf2008CacheFromCacheManager"); - return cacheManager.getCache("sousClasseNaf2008Cache", String.class, SousClasseNAF2008.class); - } - - - /******************************* - * Communes - **********************************/ - - private void createActualCommunesCache() { - logger.debug("Init cache actualCommunesCache"); - cacheManager - .createCache("actualCommunesCache", CacheConfigurationBuilder - .newCacheConfigurationBuilder(String.class, String.class,ResourcePoolsBuilder.heap(1))); - } - - public Cache getActualCommunesCacheFromCacheManager() { - logger.debug("getActualCommunesCacheFromCacheManager"); - return cacheManager.getCache("actualCommunesCache", String.class, String.class); - } - -/* - private void removeCache(String cacheToRemove) { - cacheManager.removeCache(cacheToRemove); - } - - private void closeCacheManager() { - cacheManager.close(); - } -*/ - - -} diff --git a/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java b/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java index cdd96a4d..1b8cf0f9 100644 --- a/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java +++ b/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java @@ -4,6 +4,8 @@ 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; From d742b31406e04e4a707513d3cdbe7ceb33fd6c6a Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Mon, 25 Apr 2022 09:25:08 +0200 Subject: [PATCH 6/9] Fix issue with war packaging --- pom.xml | 5 +++++ .../modeles/geo/territoire/CirconscriptionTerritoriale.java | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 18f9045f..0f2c56f9 100644 --- a/pom.xml +++ b/pom.xml @@ -208,6 +208,11 @@ + + org.apache.maven.plugins + maven-war-plugin + 3.3.2 + org.sonarsource.scanner.maven sonar-maven-plugin diff --git a/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java b/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java index 1b8cf0f9..cdd96a4d 100644 --- a/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java +++ b/src/main/java/fr/insee/rmes/modeles/geo/territoire/CirconscriptionTerritoriale.java @@ -4,8 +4,6 @@ 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; From 083578215053568738042729350a68258b4b6955 Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Mon, 25 Apr 2022 16:00:53 +0200 Subject: [PATCH 7/9] Change version to 2.3.1 --- metadataapi-changeLog.txt | 1 + pom.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/metadataapi-changeLog.txt b/metadataapi-changeLog.txt index 619c8e64..5b9ee442 100644 --- a/metadataapi-changeLog.txt +++ b/metadataapi-changeLog.txt @@ -1,3 +1,4 @@ +3.2.1 : Passage à Java 11 3.2.0 : Ajout des services pour les circonscriptions territoriales (Geo) 3.1.0 : Ajout des services des collectivités d'Outre-mer (Geo) 3.0.5 : Montée de version log4J diff --git a/pom.xml b/pom.xml index 0f2c56f9..a1ac5b01 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ war Implementation of the RMéS metadata API - 3.2.0 + 3.2.1 API RM\u00e9S From 6ce3f2eb515541727aafd3832e30f9f6203902a8 Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Thu, 19 May 2022 10:17:15 +0200 Subject: [PATCH 8/9] Exclude legacy file --- pom.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cd753911..ff2c46b1 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,9 @@ src/main/java/fr/insee/rmes/queries/**/*, - src/main/java/fr/insee/rmes/modeles/**/* + src/main/java/fr/insee/rmes/modeles/**/*, + src/main/java/fr/insee/rmes/utils/XmlUtils.java + ${project.groupId}:${project.artifactId} Metadata-API jacoco From c5675ac073d604487616e2710363bac1c7b1e1c0 Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Thu, 19 May 2022 16:13:58 +0200 Subject: [PATCH 9/9] Change version to 3.3.0 --- metadataapi-changeLog.txt | 3 ++- pom.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/metadataapi-changeLog.txt b/metadataapi-changeLog.txt index 5b9ee442..a4872599 100644 --- a/metadataapi-changeLog.txt +++ b/metadataapi-changeLog.txt @@ -1,4 +1,5 @@ -3.2.1 : Passage à Java 11 +3.3.0 : Passage à Java 11 + Correctif sur les chef lieu +3.2.1 : Passage à Java 11 pour les tests de charge (non mis en production 3.2.0 : Ajout des services pour les circonscriptions territoriales (Geo) 3.1.0 : Ajout des services des collectivités d'Outre-mer (Geo) 3.0.5 : Montée de version log4J diff --git a/pom.xml b/pom.xml index 5823c952..08a0bef5 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ war Implementation of the RMéS metadata API - 3.2.1 + 3.3.0 API RM\u00e9S