Skip to content

Commit

Permalink
Merge pull request #1167 from GOKULRAJ136/dev-1.3.x
Browse files Browse the repository at this point in the history
MOSIP-30009 : Added language validation for BlocklistedWords
  • Loading branch information
ckm007 authored Jan 29, 2025
2 parents ec8403c + 28076dc commit 0047b84
Show file tree
Hide file tree
Showing 9 changed files with 143 additions and 97 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*/
public enum LanguageErrorCode {

INVALID_LANGUAGE_CODE("KER-MSD-023", "Invalid language code"),
NO_LANGUAGE_FOUND_EXCEPTION("KER-MSD-24", "Language not found"),
LANGUAGE_FETCH_EXCEPTION("KER-MSD-23", "Error occured while fetching Languages"),
LANGUAGE_CREATE_EXCEPTION("KER-MSD-049", "Error occurred while inserting Language details"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,12 @@
package io.mosip.kernel.masterdata.service.impl;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;

import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;

import io.mosip.kernel.masterdata.dto.response.FilterResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.dao.DataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import io.mosip.kernel.core.dataaccess.exception.DataAccessLayerException;
import io.mosip.kernel.core.datamapper.spi.DataMapper;
import io.mosip.kernel.masterdata.constant.BlocklistedWordsErrorCode;
import io.mosip.kernel.masterdata.constant.MachineErrorCode;
import io.mosip.kernel.masterdata.constant.MasterDataConstant;
import io.mosip.kernel.masterdata.constant.UpdateQueryConstants;
import io.mosip.kernel.masterdata.constant.LanguageErrorCode;
import io.mosip.kernel.masterdata.dto.BlockListedWordsUpdateDto;
import io.mosip.kernel.masterdata.dto.BlocklistedWordsDto;
import io.mosip.kernel.masterdata.dto.getresponse.BlocklistedWordsResponseDto;
Expand All @@ -37,10 +17,10 @@
import io.mosip.kernel.masterdata.dto.request.FilterValueDto;
import io.mosip.kernel.masterdata.dto.request.Pagination;
import io.mosip.kernel.masterdata.dto.request.SearchDto;
import io.mosip.kernel.masterdata.dto.request.SearchFilter;
import io.mosip.kernel.masterdata.dto.request.SearchSort;
import io.mosip.kernel.masterdata.dto.response.ColumnValue;
import io.mosip.kernel.masterdata.dto.response.FilterResponseDto;
import io.mosip.kernel.masterdata.dto.response.FilterResult;
import io.mosip.kernel.masterdata.dto.response.PageResponseDto;
import io.mosip.kernel.masterdata.entity.BlocklistedWords;
import io.mosip.kernel.masterdata.entity.id.WordAndLanguageCodeID;
Expand All @@ -58,8 +38,33 @@
import io.mosip.kernel.masterdata.utils.MetaDataUtils;
import io.mosip.kernel.masterdata.utils.PageUtils;
import io.mosip.kernel.masterdata.validator.FilterColumnValidator;
import io.mosip.kernel.masterdata.validator.FilterTypeEnum;
import io.mosip.kernel.masterdata.validator.FilterTypeValidator;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.dao.DataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.List;
import java.util.Set;
import java.util.HashSet;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.Collections;

/**
* Service implementation class for {@link BlocklistedWordsService}.
Expand Down Expand Up @@ -100,7 +105,10 @@ public class BlocklistedWordsServiceImpl implements BlocklistedWordsService {

@Autowired
private AuditUtil auditUtil;


@Value("${mosip.supported-languages}")
private String supportedLanguages;

/**
* Autowired reference for {@link DataMapper}
*/
Expand All @@ -119,9 +127,10 @@ public class BlocklistedWordsServiceImpl implements BlocklistedWordsService {
@Cacheable(value = "blocklisted-words", key = "'blocklistedword'.concat('-').concat(#langCode)", condition="#langCode != null")
@Override
public BlocklistedWordsResponseDto getAllBlocklistedWordsBylangCode(String langCode) {
validateLangCode(langCode.toLowerCase());
List<BlocklistedWords> words = null;
try {
words = blocklistedWordsRepository.findAllByLangCode(langCode);
words = blocklistedWordsRepository.findAllByLangCode(langCode.toLowerCase());
} catch (DataAccessException accessException) {
throw new MasterDataServiceException(
BlocklistedWordsErrorCode.BLOCKLISTED_WORDS_FETCH_EXCEPTION.getErrorCode(),
Expand All @@ -135,6 +144,18 @@ public BlocklistedWordsResponseDto getAllBlocklistedWordsBylangCode(String langC
BlocklistedWordsErrorCode.NO_BLOCKLISTED_WORDS_FOUND.getErrorMessage());
}

private void validateLangCode(String langCode) {
if (langCode == null || langCode.trim().isEmpty()) {
throw new DataNotFoundException(LanguageErrorCode.NO_LANGUAGE_FOUND_EXCEPTION.getErrorCode(),
LanguageErrorCode.NO_LANGUAGE_FOUND_EXCEPTION.getErrorMessage());
}
Set<String> supportedLanguagesSet = new HashSet<>(Arrays.asList(supportedLanguages.split(",")));
if (!supportedLanguagesSet.contains(langCode)){
throw new DataNotFoundException(LanguageErrorCode.INVALID_LANGUAGE_CODE.getErrorCode(),
LanguageErrorCode.INVALID_LANGUAGE_CODE.getErrorMessage());
}
}

/*
* (non-Javadoc)
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,10 @@
package io.mosip.kernel.masterdata.service.impl;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

import jakarta.transaction.Transactional;

import io.mosip.kernel.masterdata.dto.response.FilterResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.dao.DataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Service;

import io.mosip.kernel.core.dataaccess.exception.DataAccessLayerException;
import io.mosip.kernel.core.util.EmptyCheckUtils;
import io.mosip.kernel.masterdata.constant.DeviceTypeErrorCode;
import io.mosip.kernel.masterdata.constant.DocumentCategoryErrorCode;
import io.mosip.kernel.masterdata.constant.LanguageErrorCode;
import io.mosip.kernel.masterdata.constant.MasterDataConstant;
import io.mosip.kernel.masterdata.dto.DocumentCategoryDto;
import io.mosip.kernel.masterdata.dto.DocumentCategoryPutDto;
Expand All @@ -39,6 +20,7 @@
import io.mosip.kernel.masterdata.dto.request.SearchSort;
import io.mosip.kernel.masterdata.dto.response.ColumnValue;
import io.mosip.kernel.masterdata.dto.response.FilterResponseDto;
import io.mosip.kernel.masterdata.dto.response.FilterResult;
import io.mosip.kernel.masterdata.dto.response.PageResponseDto;
import io.mosip.kernel.masterdata.entity.DocumentCategory;
import io.mosip.kernel.masterdata.entity.ValidDocument;
Expand All @@ -60,6 +42,29 @@
import io.mosip.kernel.masterdata.validator.FilterColumnEnum;
import io.mosip.kernel.masterdata.validator.FilterColumnValidator;
import io.mosip.kernel.masterdata.validator.FilterTypeValidator;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.dao.DataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.Optional;
import java.util.Collections;

/**
* This class have methods to fetch list of valid document category, create
Expand Down Expand Up @@ -107,6 +112,9 @@ public class DocumentCategoryServiceImpl implements DocumentCategoryService {
@Autowired
private MasterdataCreationUtil masterdataCreationUtil;

@Value("${mosip.supported-languages}")
private String supportedLanguages;

/*
* (non-Javadoc)
*
Expand Down Expand Up @@ -151,10 +159,11 @@ public DocumentCategoryResponseDto getAllDocumentCategory() {
@Cacheable(value = "document-category", key = "'documentcategory'.concat('-').concat(#langCode)", condition="#langCode != null")
@Override
public DocumentCategoryResponseDto getAllDocumentCategoryByLaguageCode(String langCode) {
validateLangCode(langCode.toLowerCase());
List<DocumentCategoryDto> documentCategoryDtoList = new ArrayList<>();
try {
documentCategoryList = documentCategoryRepository
.findAllByLangCodeAndIsDeletedFalseOrIsDeletedIsNull(langCode);
.findAllByLangCodeAndIsDeletedFalseOrIsDeletedIsNull(langCode.toLowerCase());
} catch (DataAccessException | DataAccessLayerException e) {
throw new MasterDataServiceException(
DocumentCategoryErrorCode.DOCUMENT_CATEGORY_FETCH_EXCEPTION.getErrorCode(),
Expand All @@ -176,6 +185,18 @@ public DocumentCategoryResponseDto getAllDocumentCategoryByLaguageCode(String la
return documentCategoryResponseDto;
}

private void validateLangCode(String langCode) {
if (langCode == null || langCode.trim().isEmpty()) {
throw new DataNotFoundException(LanguageErrorCode.NO_LANGUAGE_FOUND_EXCEPTION.getErrorCode(),
LanguageErrorCode.NO_LANGUAGE_FOUND_EXCEPTION.getErrorMessage());
}
Set<String> supportedLanguagesSet = new HashSet<>(Arrays.asList(supportedLanguages.split(",")));
if (!supportedLanguagesSet.contains(langCode)){
throw new DataNotFoundException(LanguageErrorCode.INVALID_LANGUAGE_CODE.getErrorCode(),
LanguageErrorCode.INVALID_LANGUAGE_CODE.getErrorMessage());
}
}

/*
* (non-Javadoc)
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,25 @@
package io.mosip.kernel.masterdata.service.impl;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;

import jakarta.transaction.Transactional;

import io.mosip.kernel.masterdata.dto.response.FilterResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.dao.DataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Service;

import io.mosip.kernel.core.dataaccess.exception.DataAccessLayerException;
import io.mosip.kernel.core.util.EmptyCheckUtils;
import io.mosip.kernel.masterdata.constant.ApplicationErrorCode;
import io.mosip.kernel.masterdata.constant.DocumentTypeErrorCode;
import io.mosip.kernel.masterdata.constant.LanguageErrorCode;
import io.mosip.kernel.masterdata.constant.MasterDataConstant;
import io.mosip.kernel.masterdata.dto.DeviceTypeDto;
import io.mosip.kernel.masterdata.dto.DocumentTypeDto;
import io.mosip.kernel.masterdata.dto.DocumentTypePutReqDto;
import io.mosip.kernel.masterdata.dto.MissingCodeDataDto;
import io.mosip.kernel.masterdata.dto.getresponse.DocumentTypeResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.PageDto;
import io.mosip.kernel.masterdata.dto.getresponse.StatusResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.extn.DocumentTypeExtnDto;
import io.mosip.kernel.masterdata.dto.postresponse.CodeResponseDto;
import io.mosip.kernel.masterdata.dto.postresponse.DocumentTypePostResponseDto;
import io.mosip.kernel.masterdata.dto.postresponse.DocumentTypePutResponseDto;
import io.mosip.kernel.masterdata.dto.request.FilterDto;
import io.mosip.kernel.masterdata.dto.request.FilterValueDto;
import io.mosip.kernel.masterdata.dto.request.Pagination;
import io.mosip.kernel.masterdata.dto.request.SearchDto;
import io.mosip.kernel.masterdata.dto.request.SearchSort;
import io.mosip.kernel.masterdata.dto.request.*;
import io.mosip.kernel.masterdata.dto.response.ColumnValue;
import io.mosip.kernel.masterdata.dto.response.FilterResponseDto;
import io.mosip.kernel.masterdata.dto.response.FilterResult;
import io.mosip.kernel.masterdata.dto.response.PageResponseDto;
import io.mosip.kernel.masterdata.entity.DeviceType;
import io.mosip.kernel.masterdata.entity.DocumentType;
Expand All @@ -52,16 +30,26 @@
import io.mosip.kernel.masterdata.repository.DocumentTypeRepository;
import io.mosip.kernel.masterdata.repository.ValidDocumentRepository;
import io.mosip.kernel.masterdata.service.DocumentTypeService;
import io.mosip.kernel.masterdata.utils.AuditUtil;
import io.mosip.kernel.masterdata.utils.ExceptionUtils;
import io.mosip.kernel.masterdata.utils.MapperUtils;
import io.mosip.kernel.masterdata.utils.MasterDataFilterHelper;
import io.mosip.kernel.masterdata.utils.MasterdataCreationUtil;
import io.mosip.kernel.masterdata.utils.MasterdataSearchHelper;
import io.mosip.kernel.masterdata.utils.MetaDataUtils;
import io.mosip.kernel.masterdata.utils.PageUtils;
import io.mosip.kernel.masterdata.utils.*;
import io.mosip.kernel.masterdata.validator.FilterColumnValidator;
import io.mosip.kernel.masterdata.validator.FilterTypeValidator;
import jakarta.transaction.Transactional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.dao.DataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;

/**
* This class have methods to fetch list of valid document type, create document
Expand Down Expand Up @@ -111,6 +99,9 @@ public class DocumentTypeServiceImpl implements DocumentTypeService {

@Autowired
private AuditUtil auditUtil;

@Value("${mosip.supported-languages}")
private String supportedLanguages;

/*
* (non-Javadoc)
Expand Down Expand Up @@ -403,11 +394,12 @@ public PageResponseDto<DocumentTypeExtnDto> searchDocumentTypes(SearchDto dto) {
@Cacheable(value = "document-type", key = "'documenttype'.concat('-').concat(#langCode)", condition = "#langCode != null")
@Override
public DocumentTypeResponseDto getAllDocumentTypeByLaguageCode(String langCode) {
validateLangCode(langCode.toLowerCase());
DocumentTypeResponseDto documentTypeResponseDto = new DocumentTypeResponseDto();
List<DocumentTypeDto> documentTypeDtoList = new ArrayList<>();
List<DocumentType> documentTypesList = null;
try {
documentTypesList = documentTypeRepository.findAllByLangCodeAndIsDeletedFalseOrIsDeletedIsNull(langCode);
documentTypesList = documentTypeRepository.findAllByLangCodeAndIsDeletedFalseOrIsDeletedIsNull(langCode.toLowerCase());
Objects.requireNonNull(documentTypesList);
} catch (DataAccessException | DataAccessLayerException | NullPointerException e) {
throw new MasterDataServiceException(DocumentTypeErrorCode.DOCUMENT_TYPE_FETCH_EXCEPTION.getErrorCode(),
Expand All @@ -428,6 +420,18 @@ public DocumentTypeResponseDto getAllDocumentTypeByLaguageCode(String langCode)
return documentTypeResponseDto;
}

private void validateLangCode(String langCode) {
if (langCode == null || langCode.trim().isEmpty()) {
throw new DataNotFoundException(LanguageErrorCode.NO_LANGUAGE_FOUND_EXCEPTION.getErrorCode(),
LanguageErrorCode.NO_LANGUAGE_FOUND_EXCEPTION.getErrorMessage());
}
Set<String> supportedLanguagesSet = new HashSet<>(Arrays.asList(supportedLanguages.split(",")));
if (!supportedLanguagesSet.contains(langCode)){
throw new DataNotFoundException(LanguageErrorCode.INVALID_LANGUAGE_CODE.getErrorCode(),
LanguageErrorCode.INVALID_LANGUAGE_CODE.getErrorMessage());
}
}

@CacheEvict(value = "document-type", allEntries = true)
@Override
public StatusResponseDto updateDocumentType(String code, boolean isActive) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ auth.server.admin.offline.token.validate=false
aplication.configuration.level.version=1.1.5
mosip.optional-languages=
mosip.mandatory-languages=eng
mosip.supported-languages=eng,ara,fra,tam,hin,kan
auth.server.validate.url=https://dev.mosip.net/v1/authmanager/authorize/admin/validateToken
auth.server.admin.validate.url=https://dev.mosip.net/v1/authmanager/authorize/admin/validateToken

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ public void t013updateBlockListedWordFailTest1() throws Exception {
public void t014getAllBlockListedWordByLangCodeFailTest() throws Exception {

MasterDataTest.checkResponse(mockMvc.perform(MockMvcRequestBuilders.get("/blocklistedwords/eng1")).andReturn(),
"KER-MSD-008");
"KER-MSD-023");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ public void getAllDocumentCategories_Success() throws Exception {
@WithUserDetails("global-admin")
public void testGetAllDocumentCategoriesByLanguageCode_InvalidLanguage_Error() throws Exception {

MasterDataTest.checkResponse(mockMvc.perform(MockMvcRequestBuilders.get("/documentcategories/eng1")).andReturn(),"KER-MSD-014");
MasterDataTest.checkResponse(mockMvc.perform(MockMvcRequestBuilders.get("/documentcategories/eng1")).andReturn(),"KER-MSD-023");
}

@Test
Expand Down
Loading

0 comments on commit 0047b84

Please sign in to comment.