Skip to content

Commit

Permalink
feat: first version sorting objects (#863)
Browse files Browse the repository at this point in the history
* feat: first version sorting objects

* fix: wrong merge

* review

* fix: solve sonar issue

* fix: solve sonar issue

* feat: sort all labels

* feat: add unit test

* feat: add test

* fix: solve sonar issue

* feat: solve sonar issue

* Update src/main/java/fr/insee/rmes/utils/DiacriticSorter.java

Co-authored-by: Simon Demazière <simon.demaziere@insee.fr>

* feat: add javadoc

* fix: sonar issue

* refactor (remove repeated appendLabel methods using @RecordBuilder)
- Add record-builder annotation processor : https://github.com/Randgalt/record-builder/
- Add ugly interface with generic method fr.insee.rmes.model.AppendableLabel#appendLabel : can do better

* fix (bad class added as an error)

* refactor (don't use anymore businessProcessor as a argument for public sort method of DiacriticSorter)
- comment in pull request
- remove duplicates variables businessProcessor in service implementations

* fix (DiacriticSorter NPE when a sort is null)
null sort keyx are replaced by empty string

* test (add tests to reach 80%)

* test (add tests to reach 80%)
last 0.2 % !!!

---------

Co-authored-by: Simon Demazière <simon.demaziere@insee.fr>
Co-authored-by: Fabrice B <fabrice.bibonne@insee.fr>
  • Loading branch information
3 people authored Feb 6, 2025
1 parent 9f63130 commit c9c4ce3
Show file tree
Hide file tree
Showing 80 changed files with 1,329 additions and 227 deletions.
21 changes: 21 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
<saxon.version>12.5</saxon.version>
<minio.version>8.5.14</minio.version>
<testcontainers-minio.version>1.20.4</testcontainers-minio.version>
<record.builder.version>44</record.builder.version>

<!-- SONAR -->
<sonar.organization>inseefr</sonar.organization>
Expand Down Expand Up @@ -267,11 +268,31 @@
<scope>test</scope>
</dependency>

<dependency>
<groupId>io.soabase.record-builder</groupId>
<artifactId>record-builder-core</artifactId>
<version>${record.builder.version}</version>
<scope>provided</scope>
</dependency>

</dependencies>

<build>
<sourceDirectory>src/main/java</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>io.soabase.record-builder</groupId>
<artifactId>record-builder-processor</artifactId>
<version>${record.builder.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,27 @@
package fr.insee.rmes.bauhaus_services;

import fr.insee.rmes.exceptions.RmesException;
import fr.insee.rmes.model.classification.PartialClassification;
import fr.insee.rmes.model.classification.PartialClassificationFamily;
import fr.insee.rmes.model.classification.PartialClassificationSeries;

import java.util.List;

public interface ClassificationsService {

String getFamilies() throws RmesException;
List<PartialClassificationFamily> getFamilies() throws RmesException;

String getFamily(String id) throws RmesException;

String getFamilyMembers(String id) throws RmesException;

String getSeries() throws RmesException;
List<PartialClassificationSeries> getSeries() throws RmesException;

String getOneSeries(String id) throws RmesException;

String getSeriesMembers(String id) throws RmesException;

String getClassifications() throws RmesException;
List<PartialClassification> getClassifications() throws RmesException;

String getClassification(String id) throws RmesException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import fr.insee.rmes.config.swagger.model.code_list.CodeList;
import fr.insee.rmes.config.swagger.model.code_list.Page;
import fr.insee.rmes.exceptions.RmesException;
import fr.insee.rmes.model.codeslists.PartialCodesList;

import java.util.List;

Expand All @@ -16,7 +17,7 @@ public interface CodeListService {

String getCodeUri(String notationCodeList, String notationCode) throws RmesException;

List<CodeList> getAllCodesLists(boolean partial) throws RmesException, JsonProcessingException;
List<PartialCodesList> getAllCodesLists(boolean partial) throws RmesException, JsonProcessingException;

String getCodesListByIRI(String iri) throws RmesException;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package fr.insee.rmes.bauhaus_services;

import fr.insee.rmes.exceptions.RmesException;
import fr.insee.rmes.model.concepts.PartialCollection;
import fr.insee.rmes.webservice.concepts.ConceptsCollectionsResources;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.ResponseEntity;

import java.util.List;

public interface ConceptsCollectionService {
String getCollections() throws RmesException;
List<PartialCollection> getCollections() throws RmesException;

String getCollectionsDashboard() throws RmesException;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package fr.insee.rmes.bauhaus_services;

import fr.insee.rmes.exceptions.RmesException;
import fr.insee.rmes.model.concepts.ConceptForAdvancedSearch;
import fr.insee.rmes.model.concepts.MembersLg;
import fr.insee.rmes.model.concepts.PartialConcept;
import fr.insee.rmes.webservice.concepts.ConceptsCollectionsResources;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.ResponseEntity;
Expand All @@ -18,10 +20,10 @@
*/

public interface ConceptsService {
String getConcepts() throws RmesException ;

List<PartialConcept> getConcepts() throws RmesException ;

String getConceptsSearch() throws RmesException;
List<ConceptForAdvancedSearch> getConceptsSearch() throws RmesException;

String getConceptsToValidate() throws RmesException;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package fr.insee.rmes.bauhaus_services;

import fr.insee.rmes.exceptions.RmesException;
import fr.insee.rmes.model.operations.Indicator;
import fr.insee.rmes.model.operations.Operation;
import fr.insee.rmes.model.operations.Series;
import fr.insee.rmes.model.operations.*;

import java.util.List;

public interface OperationsService {

/******************************************************************************************
* FAMILIES
* *******************************************************************************************/

String getFamilies() throws RmesException;
List<PartialOperationFamily> getFamilies() throws RmesException;

String getFamiliesForSearch() throws RmesException;

Expand All @@ -29,7 +29,7 @@ public interface OperationsService {
* SERIES
* *******************************************************************************************/

String getSeries() throws RmesException;
List<PartialOperationSeries> getSeries() throws RmesException;

String getSeriesForSearch() throws RmesException;

Expand All @@ -54,7 +54,7 @@ public interface OperationsService {
* OPERATIONS
* *******************************************************************************************/

String getOperations() throws RmesException ;
List<PartialOperation> getOperations() throws RmesException ;

Operation getOperationById(String id) throws RmesException ;

Expand All @@ -74,7 +74,7 @@ public interface OperationsService {
* *******************************************************************************************/


String getIndicators() throws RmesException;
List<PartialOperationIndicator> getIndicators() throws RmesException;

String getIndicatorsWithSims() throws RmesException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,12 @@
import fr.insee.rmes.exceptions.RmesUnauthorizedException;
import fr.insee.rmes.model.ValidationStatus;
import fr.insee.rmes.model.classification.Classification;
import fr.insee.rmes.model.classification.PartialClassification;
import fr.insee.rmes.model.classification.PartialClassificationFamily;
import fr.insee.rmes.model.classification.PartialClassificationSeries;
import fr.insee.rmes.persistance.ontologies.INSEE;
import fr.insee.rmes.persistance.sparql_queries.classifications.*;
import fr.insee.rmes.utils.DiacriticSorter;
import fr.insee.rmes.utils.XhtmlToMarkdownUtils;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Model;
Expand All @@ -27,6 +31,7 @@
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.List;

@Service
public class ClassificationsImpl implements ClassificationsService {
Expand All @@ -47,9 +52,14 @@ public ClassificationsImpl(StampsRestrictionsService stampsRestrictionsService,
}

@Override
public String getFamilies() throws RmesException {
public List<PartialClassificationFamily> getFamilies() throws RmesException {
logger.info("Starting to get classification families");
return repoGestion.getResponseAsArray(ClassifFamiliesQueries.familiesQuery()).toString();
var families = repoGestion.getResponseAsArray(ClassifFamiliesQueries.familiesQuery());

return DiacriticSorter.sort(families.toString(),
PartialClassificationFamily[].class,
PartialClassificationFamily::label
);
}

@Override
Expand All @@ -65,9 +75,15 @@ public String getFamilyMembers(String id) throws RmesException {
}

@Override
public String getSeries() throws RmesException {
public List<PartialClassificationSeries> getSeries() throws RmesException {
logger.info("Starting to get classifications series");
return repoGestion.getResponseAsArray(ClassifSeriesQueries.seriesQuery()).toString();
var series = repoGestion.getResponseAsArray(ClassifSeriesQueries.seriesQuery());


return DiacriticSorter.sortGroupingByIdConcatenatingAltLabels(series.toString(),
PartialClassificationSeries[].class,
PartialClassificationSeries::label
);
}

@Override
Expand All @@ -83,9 +99,15 @@ public String getSeriesMembers(String id) throws RmesException {
}

@Override
public String getClassifications() throws RmesException {
public List<PartialClassification> getClassifications() throws RmesException {
logger.info("Starting to get classifications");
return repoGestion.getResponseAsArray(ClassificationsQueries.classificationsQuery()).toString();
var collections = repoGestion.getResponseAsArray(ClassificationsQueries.classificationsQuery());


return DiacriticSorter.sortGroupingByIdConcatenatingAltLabels(collections.toString(),
PartialClassification[].class,
PartialClassification::label
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@
import fr.insee.rmes.exceptions.RmesException;
import fr.insee.rmes.exceptions.errors.CodesListErrorCodes;
import fr.insee.rmes.model.ValidationStatus;
import fr.insee.rmes.model.codeslists.PartialCodesList;
import fr.insee.rmes.persistance.ontologies.INSEE;
import fr.insee.rmes.persistance.sparql_queries.code_list.CodeListQueries;
import fr.insee.rmes.utils.DateUtils;
import fr.insee.rmes.utils.Deserializer;
import fr.insee.rmes.utils.DiacriticSorter;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Model;
Expand All @@ -34,6 +36,7 @@
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class CodeListServiceImpl extends RdfService implements CodeListService {

Expand Down Expand Up @@ -229,9 +232,8 @@ public List<CodeList> getDetailedCodesListForSearch(boolean partial) throws Rmes
}

ObjectMapper objectMapper = new ObjectMapper();
List<CodeList> listCodeList = objectMapper.readValue(lists.toString(), new TypeReference<>() {
});
return listCodeList;
return objectMapper.readValue(lists.toString(), new TypeReference<>() {
});
}


Expand Down Expand Up @@ -474,12 +476,12 @@ public String getCodeUri(String notationCodeList, String notationCode) throws Rm
}

@Override
public List<CodeList> getAllCodesLists(boolean partial) throws RmesException, JsonProcessingException {
String listCodeListJson = repoGestion.getResponseAsArray(CodeListQueries.getAllCodesLists(partial)).toString();
ObjectMapper objectMapper = new ObjectMapper();
List<CodeList> listCodeListResponse = objectMapper.readValue(listCodeListJson, new TypeReference<>() {
});
return listCodeListResponse;
public List<PartialCodesList> getAllCodesLists(boolean partial) throws RmesException, JsonProcessingException {
var codeslists = repoGestion.getResponseAsArray(CodeListQueries.getAllCodesLists(partial));
return DiacriticSorter.sort(codeslists.toString(),
PartialCodesList[].class,
PartialCodesList::labelLg1
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import fr.insee.rmes.bauhaus_services.rdf_utils.RdfService;
import fr.insee.rmes.exceptions.RmesException;
import fr.insee.rmes.model.concepts.CollectionForExport;
import fr.insee.rmes.model.concepts.PartialCollection;
import fr.insee.rmes.persistance.sparql_queries.concepts.CollectionsQueries;
import fr.insee.rmes.utils.DiacriticSorter;
import fr.insee.rmes.utils.FilesUtils;
import fr.insee.rmes.utils.XMLUtils;
import fr.insee.rmes.webservice.concepts.ConceptsCollectionsResources;
Expand Down Expand Up @@ -42,8 +44,13 @@ public ConceptsCollectionServiceImpl(


@Override
public String getCollections() throws RmesException{
return repoGestion.getResponseAsArray(CollectionsQueries.collectionsQuery()).toString();
public List<PartialCollection> getCollections() throws RmesException{
var collections = repoGestion.getResponseAsArray(CollectionsQueries.collectionsQuery());

return DiacriticSorter.sort(collections.toString(),
PartialCollection[].class,
PartialCollection::label
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,10 @@
import fr.insee.rmes.exceptions.RmesBadRequestException;
import fr.insee.rmes.exceptions.RmesException;
import fr.insee.rmes.exceptions.RmesUnauthorizedException;
import fr.insee.rmes.model.concepts.CollectionForExport;
import fr.insee.rmes.model.concepts.CollectionForExportOld;
import fr.insee.rmes.model.concepts.ConceptForExport;
import fr.insee.rmes.model.concepts.MembersLg;
import fr.insee.rmes.model.concepts.*;
import fr.insee.rmes.persistance.sparql_queries.concepts.CollectionsQueries;
import fr.insee.rmes.persistance.sparql_queries.concepts.ConceptsQueries;
import fr.insee.rmes.utils.DiacriticSorter;
import fr.insee.rmes.utils.FilesUtils;
import fr.insee.rmes.utils.XMLUtils;
import fr.insee.rmes.webservice.concepts.ConceptsCollectionsResources;
Expand Down Expand Up @@ -63,16 +61,28 @@ public ConceptsImpl(ConceptsUtils conceptsUtils, CollectionsUtils collectionsUti


@Override
public String getConcepts() throws RmesException{
public List<PartialConcept> getConcepts() throws RmesException {
logger.info("Starting to get concepts list");
String resQuery = repoGestion.getResponseAsArray(ConceptsQueries.conceptsQuery()).toString();
return QueryUtils.correctEmptyGroupConcat(resQuery);

var concepts = repoGestion.getResponseAsArray(ConceptsQueries.conceptsQuery());

return DiacriticSorter.sortGroupingByIdConcatenatingAltLabels(concepts.toString(),
PartialConcept[].class,
PartialConcept::label
);

}

@Override
public String getConceptsSearch() throws RmesException{
public List<ConceptForAdvancedSearch> getConceptsSearch() throws RmesException{
logger.info("Starting to get concepts list for advanced search");
return repoGestion.getResponseAsArray(ConceptsQueries.conceptsSearchQuery()).toString();
var concepts = repoGestion.getResponseAsArray(ConceptsQueries.conceptsSearchQuery());


return DiacriticSorter.sortGroupingByIdConcatenatingAltLabels(concepts.toString(),
ConceptForAdvancedSearch[].class,
ConceptForAdvancedSearch::label
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,10 @@ public JSONObject getConceptById(String id) throws RmesException{
JSONArray altLabelLg1 = repoGestion.getResponseAsArray(ConceptsQueries.altLabel(id, config.getLg1()));
JSONArray altLabelLg2 = repoGestion.getResponseAsArray(ConceptsQueries.altLabel(id, config.getLg2()));
if(!altLabelLg1.isEmpty()) {
concept.put(Constants.ALT_LABEL_LG1, JSONUtils.extractFieldToArray(altLabelLg1, "altLabel"));
concept.put(Constants.ALT_LABEL_LG1, JSONUtils.extractFieldToArray(altLabelLg1, "altLabels"));
}
if(!altLabelLg2.isEmpty()) {
concept.put(Constants.ALT_LABEL_LG2, JSONUtils.extractFieldToArray(altLabelLg2, "altLabel"));
concept.put(Constants.ALT_LABEL_LG2, JSONUtils.extractFieldToArray(altLabelLg2, "altLabels"));
}
return concept;
}
Expand Down
Loading

0 comments on commit c9c4ce3

Please sign in to comment.