Skip to content

Commit

Permalink
Merge pull request #58 from InseeFr/acceptance
Browse files Browse the repository at this point in the history
Acceptance
  • Loading branch information
JeromeMBourgeois authored Feb 14, 2022
2 parents c069dc7 + 0162243 commit f05789c
Show file tree
Hide file tree
Showing 9 changed files with 248 additions and 3 deletions.
1 change: 1 addition & 0 deletions metadataapi-changeLog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
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
3.0.4 : Montée de version log4J
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<packaging>war</packaging>
<name>Implementation of the RMéS metadata API</name>

<version>3.1.0</version>
<version>3.2.0</version>

<properties>
<title>API RM\u00e9S</title>
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/fr/insee/rmes/api/geo/ConstGeoApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public class ConstGeoApi {
public static final String TAG_NAME = "geographie";
public static final String TAG_DESCRIPTION = "Geographie API";

public static final String PATH_CIRCO_TER = PATH_SEPARATOR + "circonscriptionTerritoriale";
public static final String PATH_COMMUNE = PATH_SEPARATOR + "commune";
public static final String PATH_PAYS = PATH_SEPARATOR + "pays";
public static final String PATH_REGION = PATH_SEPARATOR + "region";
Expand Down Expand Up @@ -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_CIRCO_TER = "986[1-3]{2}";
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}";
Expand All @@ -55,6 +57,7 @@ public class ConstGeoApi {
public static final String PATTERN_ARRONDISSEMENT = "(([013-8][0-9])|(2[0-9AB])|(9[0-5])|(97[1-6]))[0-9]";
public static final String PATTERN_ARRONDISSEMENT_MUNICIPAL = "";

public static final String PATTERN_CIRCO_TER_DESCRIPTION = "Code de la circonscription territoriale (cinq caractères)";
public static final String PATTERN_COMMUNE_DESCRIPTION = "Code de la commune (cinq 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)";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
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.CirconscriptionTerritoriale;
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 CirconscriptionTerritorialeApi extends AbstractGeoApi {

private static Logger logger = LogManager.getLogger(CirconscriptionTerritorialeApi.class);
private static final String CODE_PATTERNCIRCO_TER = "/{code: " + ConstGeoApi.PATTERN_CIRCO_TER + "}";
private static final String LITTERAL_ID_OPERATION = "getcogdistrict";
private static final String LITTERAL_OPERATION_SUMMARY =
"Informations sur une circonscription territoriale identifiée par son code (cinq caractères)";
private static final String LITTERAL_RESPONSE_DESCRIPTION = "circonscription territoriale d'une collectivité d'outre-mer";
private static final String LITTERAL_PARAMETER_DATE_DESCRIPTION =
"Filtre pour renvoyer la circonscription territoriale 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 = "98611";


@Path(ConstGeoApi.PATH_CIRCO_TER + CODE_PATTERNCIRCO_TER)
@GET
@Produces({
MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML
})
@Operation(
operationId = LITTERAL_ID_OPERATION,
summary = LITTERAL_OPERATION_SUMMARY,
responses = {
@ApiResponse(
content = @Content(schema = @Schema(implementation = CirconscriptionTerritoriale.class)),
description = LITTERAL_RESPONSE_DESCRIPTION)
})
public Response getByCode(
@Parameter(
description = ConstGeoApi.PATTERN_CIRCO_TER_DESCRIPTION,
required = true,
schema = @Schema(
pattern = ConstGeoApi.PATTERN_CIRCO_TER,
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.getCirconscriptionTerritorialeByCodeAndDate(code, this.formatValidParameterDateIfIsNull(date))),
header,
new CirconscriptionTerritoriale(code));
}
}

@Path(ConstGeoApi.PATH_CIRCO_TER + CODE_PATTERNCIRCO_TER + 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 la circonscription territoriale",
responses = {
@ApiResponse(
content = @Content(schema = @Schema(type = ARRAY, implementation = Territoire.class)),
description = LITTERAL_RESPONSE_DESCRIPTION)
})
public Response getAscendants(
@Parameter(
description = ConstGeoApi.PATTERN_CIRCO_TER_DESCRIPTION,
required = true,
schema = @Schema(
pattern = ConstGeoApi.PATTERN_CIRCO_TER,
type = Constants.TYPE_STRING, example="98611")) @PathParam(Constants.CODE) String code,
@Parameter(hidden = true) @HeaderParam(HttpHeaders.ACCEPT) String header,
@Parameter(
description = "Filtre pour renvoyer les territoires contenant la circonscription territoriale 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 circonscription territoriale {}", code);

if ( ! this.verifyParametersTypeAndDateAreValid(typeTerritoire, date)) {
return this.generateBadRequestResponse();
}
else {
return this
.generateResponseListOfTerritoire(
sparqlUtils
.executeSparqlQuery(
GeoQueries
.getAscendantsCirconscriptionTerritoriale(
code,
this.formatValidParameterDateIfIsNull(date),
this.formatValidParametertypeTerritoireIfIsNull(typeTerritoire))),
header,
Territoires.class,
Territoire.class);
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -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.CirconscriptionTerritoriale;
import fr.insee.rmes.modeles.geo.territoire.CollectiviteDOutreMer;
import fr.insee.rmes.modeles.geo.territoire.Commune;
import fr.insee.rmes.modeles.geo.territoire.CommuneAssociee;
Expand All @@ -21,6 +22,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.CirconscriptionsTerritoriales;
import fr.insee.rmes.modeles.geo.territoires.CollectivitesDOutreMer;
import fr.insee.rmes.modeles.geo.territoires.Communes;
import fr.insee.rmes.modeles.geo.territoires.CommunesAssociees;
Expand All @@ -47,7 +49,8 @@ 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("District",District.class,Districts.class,Constants.NONE);
DISTRICT("District",District.class,Districts.class,Constants.NONE),
CIRCONSCRIPTION_TERRITORIALE("CirconscriptionTerritoriale",CirconscriptionTerritoriale.class,CirconscriptionsTerritoriales.class,Constants.NONE);

private String typeObjetGeo;
private Class<? extends Territoire> classNameOfGeoType;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
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 = "CirconscriptionTerritoriale")
@JacksonXmlRootElement(localName = "CirconscriptionTerritoriale")
@XmlAccessorType(XmlAccessType.FIELD)
@Schema(description = "Objet représentant une circonscription territoriale")

public class CirconscriptionTerritoriale extends Territoire {

public CirconscriptionTerritoriale() {
this.type = EnumTypeGeographie.CIRCONSCRIPTION_TERRITORIALE.getTypeObjetGeo();
this.intituleSansArticle = new IntituleSansArticle();
}

public CirconscriptionTerritoriale(String code) {
this.type = EnumTypeGeographie.CIRCONSCRIPTION_TERRITORIALE.getTypeObjetGeo();
this.code = code;
this.intituleSansArticle = new IntituleSansArticle();
}

public CirconscriptionTerritoriale(
String code,
String uri,
String intitule,
String type,
String dateCreation,
String dateSuppression,
IntituleSansArticle intituleSansArticle,
String typeArticle) {
super(code, uri, intitule, type, dateCreation, dateSuppression, intituleSansArticle);
this.setTypeArticle(typeArticle);
}



}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
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.CirconscriptionTerritoriale;
import io.swagger.v3.oas.annotations.media.Schema;

@JacksonXmlRootElement(localName = "CirconscriptionsTerritoriales")
@XmlAccessorType(XmlAccessType.FIELD)
@Schema(name = "CirconscriptionsTerritoriales", description = "Tableau représentant les circonscriptions territoriales")

public class CirconscriptionsTerritoriales extends Territoires {

private List<CirconscriptionTerritoriale> circonscriptionsTerritoriales = null;

public CirconscriptionsTerritoriales() {}

public CirconscriptionsTerritoriales(List<CirconscriptionTerritoriale> circonscriptionsTerritoriales) {
this.circonscriptionsTerritoriales = circonscriptionsTerritoriales;
}

@JacksonXmlProperty(isAttribute = true, localName = "CirconscriptionTerritoriale")
@JacksonXmlElementWrapper(useWrapping = false)
public List<CirconscriptionTerritoriale> getCirconscriptionsTerritoriales() {
return circonscriptionsTerritoriales;
}

public void setCirconscriptionsTerritoriales(List<CirconscriptionTerritoriale> circonscriptionsTerritoriales) {
this.circonscriptionsTerritoriales = circonscriptionsTerritoriales;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public List<CollectiviteDOutreMer> getCollectivitesDOutreMer() {
return collectivitesDOutreMer;
}

public void setCommunes(List<CollectiviteDOutreMer> collectivitesDOutreMer) {
public void setCollectivitesDOutreMer(List<CollectiviteDOutreMer> collectivitesDOutreMer) {
this.collectivitesDOutreMer = collectivitesDOutreMer;
}

Expand Down
8 changes: 8 additions & 0 deletions src/main/java/fr/insee/rmes/queries/geo/GeoQueries.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ 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);
}

public static String getCirconscriptionTerritorialeByCodeAndDate(String code,String date) {
return getTerritoireFiltre(code, date,"*", EnumTypeGeographie.CIRCONSCRIPTION_TERRITORIALE,true);
}

public static String getDepartementByCodeAndDate(String code, String date) {
return getTerritoire(code, date, EnumTypeGeographie.DEPARTEMENT);
Expand Down Expand Up @@ -129,6 +133,10 @@ public static String getAscendantsDepartement(String code, String date, String t
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 getAscendantsCirconscriptionTerritoriale(String code, String date, String type) {
return getAscendantOrDescendantsQuery(code, date, type, EnumTypeGeographie.CIRCONSCRIPTION_TERRITORIALE,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);
Expand Down

0 comments on commit f05789c

Please sign in to comment.