Skip to content

Commit

Permalink
feat: improve redirection for orbeon questionings
Browse files Browse the repository at this point in the history
  • Loading branch information
BettyB979 committed Aug 26, 2024
1 parent 390085f commit 980c2df
Show file tree
Hide file tree
Showing 23 changed files with 391 additions and 528 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,18 @@ public class ApplicationConfig {
@Value("${fr.insee.datacollectionmanagement.api.questioning.url}")
private String questioningUrl;

@Value("${fr.insee.datacollectionmanagement.api.questioning.url.stromaev3.pool1}")
private String questioningUrlStromaeV3Pool1;

@Value("${fr.insee.datacollectionmanagement.api.questioning.url.stromaev2.pool1}")
private String questioningUrlStromaeV2Pool1;

@Value("${fr.insee.datacollectionmanagement.api.questioning.url.stromaev1.pool1}")
private String questioningUrlStromaeV1Pool1;

@Value("${fr.insee.datacollectionmanagement.api.questioning.url.stromaev1.pool2}")
private String questioningUrlStromaeV1Pool2;

@Value("#{'${fr.insee.datacollectionmanagement.public.urls}'}")
String[] publicUrls;
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import fr.insee.survey.datacollectionmanagement.questioning.domain.Upload;
import fr.insee.survey.datacollectionmanagement.questioning.service.QuestioningService;
import fr.insee.survey.datacollectionmanagement.questioning.service.UploadService;
import fr.insee.survey.datacollectionmanagement.questioning.util.UrlRedirectionEnum;
import fr.insee.survey.datacollectionmanagement.questioning.util.UrlTypeEnum;
import fr.insee.survey.datacollectionmanagement.util.EmailValidatorRegex;
import fr.insee.survey.datacollectionmanagement.view.service.ViewService;
import io.swagger.v3.oas.annotations.Operation;
Expand Down Expand Up @@ -46,7 +48,6 @@
import java.util.Set;
import java.util.stream.Collectors;

import static fr.insee.survey.datacollectionmanagement.questioning.util.UrlTypeEnum.values;
import static java.util.stream.Collectors.joining;

@RestController
Expand Down Expand Up @@ -132,9 +133,15 @@ public void putParams(@PathVariable("id") String id, @RequestBody @Valid ParamsD
Campaign campaign = campaignService.findById(StringUtils.upperCase(id));

if (paramsDto.getParamId().equalsIgnoreCase(Parameters.ParameterEnum.URL_TYPE.name())
&& Arrays.stream(values()).noneMatch(p -> p.name().equals(paramsDto.getParamValue()))) {
&& Arrays.stream(UrlTypeEnum.values()).noneMatch(p -> p.name().equals(paramsDto.getParamValue()))) {

throw new NotMatchException(String.format("Only %s are valid values for URL_TYPE", Arrays.stream(values()).map(item -> item.name())
throw new NotMatchException(String.format("Only %s are valid values for URL_TYPE", Arrays.stream(UrlTypeEnum.values()).map(item -> item.name())
.collect(joining(" "))));
}
if (paramsDto.getParamId().equalsIgnoreCase(Parameters.ParameterEnum.URL_REDIRECTION.name())
&& Arrays.stream(UrlRedirectionEnum.values()).noneMatch(p -> p.name().equals(paramsDto.getParamValue()))) {

throw new NotMatchException(String.format("Only %s are valid values for URL_REDIRECTION", Arrays.stream(UrlRedirectionEnum.values()).map(item -> item.name())
.collect(joining(" "))));
}
if (paramsDto.getParamId().equalsIgnoreCase(Parameters.ParameterEnum.MAIL_ASSISTANCE.name())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,7 @@ public class MyQuestioningsController {
public List<MyQuestioningDto> findById(@CurrentSecurityContext(expression = "authentication.name")
String idec) {


List<MyQuestioningDto> listSurveys = mySurveysService.getListMySurveys(idec.toUpperCase());

return listSurveys;
return mySurveysService.getListMySurveys(idec.toUpperCase());

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ public interface MoogService {

List<MoogSearchDto> transformListViewToListMoogSearchDto(List<View> listView);

List<MoogQuestioningEventDto> getMoogEvents(String Campaign, String idSu);
List<MoogQuestioningEventDto> getMoogEvents(String campaign, String idSu);

JSONCollectionWrapper<MoogExtractionRowDto> getExtraction(String idCampaign);

Collection<MoogExtractionRowDto> getSurveyUnitsToFollowUp(String idCampaign);

public String getReadOnlyUrl(String idCampaign, String surveyUnitId) throws NotFoundException;
String getReadOnlyUrl(String idCampaign, String surveyUnitId) throws NotFoundException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,7 @@ public String getReadOnlyUrl(String idCampaign, String surveyUnitId) throws NotF
if (questioning != null) {
String accessBaseUrl = partitioningService.findSuitableParameterValue(part, Parameters.ParameterEnum.URL_REDIRECTION);
String typeUrl = partitioningService.findSuitableParameterValue(part, Parameters.ParameterEnum.URL_TYPE);
String sourceId = campaign.getSurvey().getSource().getId().toLowerCase();
return questioningService.getAccessUrl(accessBaseUrl, typeUrl, UserRoles.REVIEWER, questioning, surveyUnitId, sourceId);
return questioningService.getAccessUrl(accessBaseUrl, typeUrl, UserRoles.REVIEWER, questioning, part);
}
}
String msg = "0 questioning found for campaign " + idCampaign + " and survey unit " + surveyUnitId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,10 @@ public List<MyQuestioningDto> getListMySurveys(String id) {
String surveyUnitId = questioning.getSurveyUnit().getIdSu();
surveyDto.setSurveyWording(survey.getLongWording());
surveyDto.setSurveyObjectives(survey.getLongObjectives());
String accessBaseUrl = partitioningService.findSuitableParameterValue(part, Parameters.ParameterEnum.URL_REDIRECTION);
String pool = partitioningService.findSuitableParameterValue(part, Parameters.ParameterEnum.URL_REDIRECTION);
String typeUrl = partitioningService.findSuitableParameterValue(part, Parameters.ParameterEnum.URL_TYPE);
String sourceId = survey.getSource().getId().toLowerCase();
surveyDto.setAccessUrl(
questioningService.getAccessUrl(accessBaseUrl,typeUrl, UserRoles.INTERVIEWER, questioning, surveyUnitId, sourceId));
questioningService.getAccessUrl(pool, typeUrl, UserRoles.INTERVIEWER, questioning, part));
surveyDto.setIdentificationCode(surveyUnitId);
surveyDto.setOpeningDate(new Timestamp(part.getOpeningDate().getTime()));
surveyDto.setClosingDate(new Timestamp(part.getClosingDate().getTime()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public QuestioningInformationsDto findQuestioningInformationsDtoReviewer(String
if (listParts.isEmpty()) {
throw new NotFoundException(String.format("Questioning not found for campaign %s and survey unit %s", idCampaign, idsu));
}
String partId = listParts.getFirst().getId();
String partId = listParts.get(0).getId();
QuestioningInformations infos = informationsRepository.findQuestioningInformationsReviewer(partId, idsu);
return mapQuestioningInformationsDto(infos);
}
Expand All @@ -57,7 +57,7 @@ public QuestioningInformationsDto findQuestioningInformationsDtoInterviewer(Stri
if (listParts.isEmpty()) {
throw new NotFoundException(String.format("Questioning not found for campaign %s and survey unit %s", idCampaign, idsu));
}
String partId = listParts.getFirst().getId();
String partId = listParts.get(0).getId();
QuestioningInformations infos = informationsRepository.findQuestioningInformationsInterviewer(partId, idsu, contactId);
return mapQuestioningInformationsDto(infos);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,29 @@

public interface QuestioningService {

public Page<Questioning> findAll(Pageable pageable);
Page<Questioning> findAll(Pageable pageable);

public Questioning findbyId(Long id);
Questioning findbyId(Long id);

public Questioning saveQuestioning(Questioning questioning);
Questioning saveQuestioning(Questioning questioning);

public void deleteQuestioning(Long id);
void deleteQuestioning(Long id);

public Set<Questioning> findByIdPartitioning(String idPartitioning);
Set<Questioning> findByIdPartitioning(String idPartitioning);

public Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, String surveyUnitIdSu);
Questioning findByIdPartitioningAndSurveyUnitIdSu(String idPartitioning, String surveyUnitIdSu);

/**
* Delete questionings attached to one partitioning
*
* @param partitioning
* @return nb questioning deleted
*/
public int deleteQuestioningsOfOnePartitioning(Partitioning partitioning);
int deleteQuestioningsOfOnePartitioning(Partitioning partitioning);

public Set<Questioning> findBySurveyUnitIdSu(String idSu);
Set<Questioning> findBySurveyUnitIdSu(String idSu);

public String getAccessUrl(String baseUrl, String typeUrl, String role, Questioning questioning, String surveyUnitId, String sourceId);
String getAccessUrl(String pool, String typeUrl, String role, Questioning questioning, Partitioning part);


}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package fr.insee.survey.datacollectionmanagement.questioning.service.impl;

import fr.insee.survey.datacollectionmanagement.config.ApplicationConfig;
import fr.insee.survey.datacollectionmanagement.constants.UserRoles;
import fr.insee.survey.datacollectionmanagement.exception.NotFoundException;
import fr.insee.survey.datacollectionmanagement.metadata.domain.Partitioning;
import fr.insee.survey.datacollectionmanagement.questioning.domain.Questioning;
Expand All @@ -11,21 +10,20 @@
import fr.insee.survey.datacollectionmanagement.questioning.service.QuestioningEventService;
import fr.insee.survey.datacollectionmanagement.questioning.service.QuestioningService;
import fr.insee.survey.datacollectionmanagement.questioning.service.SurveyUnitService;
import lombok.RequiredArgsConstructor;
import fr.insee.survey.datacollectionmanagement.questioning.util.QuestioningUrlResolver;
import fr.insee.survey.datacollectionmanagement.questioning.util.UrlParameters;
import fr.insee.survey.datacollectionmanagement.questioning.util.UrlTypeEnum;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.web.util.UriComponentsBuilder;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Set;

import static fr.insee.survey.datacollectionmanagement.questioning.util.UrlTypeEnum.*;
import static fr.insee.survey.datacollectionmanagement.questioning.util.UrlRedirectionEnum.POOL1;
import static fr.insee.survey.datacollectionmanagement.questioning.util.UrlTypeEnum.V3;

@Service
@RequiredArgsConstructor
public class QuestioningServiceImpl implements QuestioningService {

private final QuestioningRepository questioningRepository;
Expand All @@ -38,8 +36,17 @@ public class QuestioningServiceImpl implements QuestioningService {

private final ApplicationConfig applicationConfig;

private static final String PATH_LOGOUT = "pathLogout";
private static final String PATH_ASSISTANCE = "pathAssistance";
QuestioningUrlResolver urlResolver;

public QuestioningServiceImpl(QuestioningRepository questioningRepository, SurveyUnitService surveyUnitService, QuestioningEventService questioningEventService, QuestioningAccreditationService questioningAccreditationService, ApplicationConfig applicationConfig) {
this.questioningRepository = questioningRepository;
this.surveyUnitService = surveyUnitService;
this.questioningEventService = questioningEventService;
this.questioningAccreditationService = questioningAccreditationService;
this.applicationConfig = applicationConfig;
urlResolver = new QuestioningUrlResolver(applicationConfig);
}


@Override
public Page<Questioning> findAll(Pageable pageable) {
Expand Down Expand Up @@ -98,91 +105,31 @@ public Set<Questioning> findBySurveyUnitIdSu(String idSu) {
/**
* Generates an access URL based on the provided parameters.
*
* @param baseUrl The base URL for the access.
* @param typeUrl The type of URL (V1 or V2).
* @param pool The pool for access
* @param typeUrl The type of URL (V1 or V2 or V3).
* @param role The user role (REVIEWER or INTERVIEWER).
* @param questioning The questioning object.
* @param surveyUnitId The survey unit ID.
* @param part The part of questioning
* @return The generated access URL.
*/
public String getAccessUrl(String baseUrl, String typeUrl, String role, Questioning questioning, String surveyUnitId, String sourceId) {
// Set default values if baseUrl or typeUrl is empty
baseUrl = StringUtils.defaultIfEmpty(baseUrl, applicationConfig.getQuestioningUrl());
public String getAccessUrl(String pool, String typeUrl, String role, Questioning questioning, Partitioning part) {
pool = StringUtils.defaultIfEmpty(pool, POOL1.name());
typeUrl = StringUtils.defaultIfEmpty(typeUrl, V3.name());

if (typeUrl.equalsIgnoreCase(V1.name())) {
return buildV1Url(baseUrl, role, questioning.getModelName(), surveyUnitId);
}
if (typeUrl.equalsIgnoreCase(V2.name())) {
return buildV2Url(baseUrl, role, questioning.getModelName(), surveyUnitId);
}
if (typeUrl.equalsIgnoreCase(V3.name())) {
return buildV3Url(baseUrl, role, questioning.getModelName(), surveyUnitId, sourceId, questioning.getId());
String baseUrl = urlResolver.resolveUrl(typeUrl, pool);
String sourceId = part.getCampaign().getSurvey().getSource().getId();
UrlParameters params = new UrlParameters(baseUrl, role, questioning, questioning.getSurveyUnit().getIdSu(), sourceId, "");
UrlTypeEnum typeUrlEnum = UrlTypeEnum.valueOf(typeUrl);

switch (typeUrlEnum) {
case V1:
String campaignName = part.getCampaign().getSurvey().getSource().getId() + "-" + part.getCampaign().getSurvey().getYear() + "-" + part.getCampaign().getPeriod();
params.setCampaignName(campaignName);
return urlResolver.buildV1Url(params);
case V2:
return urlResolver.buildV2Url(params);
default:
return urlResolver.buildV3Url(params);
}

return "";
}


/**
* Builds a V1 access URL based on the provided parameters.
*
* @param baseUrl The base URL for the access.
* @param role The user role (REVIEWER or INTERVIEWER).
* @param campaignId The campaign ID.
* @param surveyUnitId The survey unit ID.
* @return The generated V1 access URL.
*/
protected String buildV1Url(String baseUrl, String role, String campaignId, String surveyUnitId) {
if (role.equalsIgnoreCase(UserRoles.REVIEWER)) {
return String.format("%s/visualiser/%s/%s", baseUrl, campaignId, surveyUnitId);
}
if (role.equalsIgnoreCase(UserRoles.INTERVIEWER)) {
return String.format("%s/repondre/%s/%s", baseUrl, campaignId, surveyUnitId);
}
return "";
}

/**
* Builds a V3 access URL based on the provided parameters
*
* @param baseUrl The base URL for the access.
* @param role The user role (REVIEWER or INTERVIEWER).
* @param modelName The model ID.
* @param surveyUnitId The survey unit ID.
* @return The generated V3 access URL.
*/

protected String buildV2Url(String baseUrl, String role, String modelName, String surveyUnitId) {
if (UserRoles.REVIEWER.equalsIgnoreCase(role)) {
return String.format("%s/readonly/questionnaire/%s/unite-enquetee/%s", baseUrl, modelName, surveyUnitId);
}
if (UserRoles.INTERVIEWER.equalsIgnoreCase(role)) {
return String.format("%s/questionnaire/%s/unite-enquetee/%s", baseUrl, modelName, surveyUnitId);
}
return "";
}

/**
* Builds a V3 access URL based on the provided parameters
*
* @param baseUrl The base URL for the access.
* @param role The user role (REVIEWER or INTERVIEWER).
* @param modelName The model ID.
* @param surveyUnitId The survey unit ID.
* @return The generated V3 access URL.
*/
protected String buildV3Url(String baseUrl, String role, String modelName, String surveyUnitId, String sourceId, Long questioningId) {
if (UserRoles.REVIEWER.equalsIgnoreCase(role)) {
return UriComponentsBuilder.fromHttpUrl(String.format("%s/v3/review/questionnaire/%s/unite-enquetee/%s", baseUrl, modelName, surveyUnitId)).toUriString();
}
if (UserRoles.INTERVIEWER.equalsIgnoreCase(role)) {
return UriComponentsBuilder.fromHttpUrl(String.format("%s/v3/questionnaire/%s/unite-enquetee/%s", baseUrl, modelName, surveyUnitId))
.queryParam(PATH_LOGOUT, URLEncoder.encode("/" + sourceId, StandardCharsets.UTF_8))
.queryParam(PATH_ASSISTANCE, URLEncoder.encode("/" + sourceId + "/contacter-assistance/auth?questioningId=" + questioningId, StandardCharsets.UTF_8))
.build().toUriString();
}
return "";
}

}
Loading

0 comments on commit 980c2df

Please sign in to comment.