/** * Private method to convert a tag entity list to a list of JSON strings. * * @param tagEntities the list of tags * * @return Map of key, business object definition ids, and value, business object definition entity as JSON string */ private Map<String, String> convertTagEntityListToJSONStringMap(List<TagEntity> tagEntities) { Map<String, String> tagJSONMap = new HashMap<>(); tagEntities.forEach(tagEntity -> { String jsonString = tagHelper.safeObjectMapperWriteValueAsString(tagEntity); if (StringUtils.isNotEmpty(jsonString)) { tagJSONMap.put(tagEntity.getId().toString(), jsonString); } }); return tagJSONMap; }
/** * Method to remove tags in the index that don't exist in the database * * @param indexName the name of the index * @param documentType the document type * @param tagEntityList list of tags in the database */ private void removeAnyIndexDocumentsThatAreNotInTagsList(final String indexName, final String documentType, List<TagEntity> tagEntityList) { // Get a list of tag ids from the list of tag entities in the database List<String> databaseTagIdList = new ArrayList<>(); tagEntityList.forEach(tagEntity -> databaseTagIdList.add(tagEntity.getId().toString())); // Get a list of tag ids in the search index List<String> indexDocumentTagIdList = indexFunctionsDao.getIdsInIndex(indexName, documentType); // Remove the database ids from the index ids indexDocumentTagIdList.removeAll(databaseTagIdList); // If there are any ids left in the index list they need to be removed indexDocumentTagIdList.forEach(id -> indexFunctionsDao.deleteDocumentById(indexName, documentType, id)); }
/** * Method to remove tags in the index that don't exist in the database * * @param indexName the name of the index * @param documentType the document type * @param tagEntityList list of tags in the database */ private void removeAnyIndexDocumentsThatAreNotInTagsList(final String indexName, final String documentType, List<TagEntity> tagEntityList) { // Get a list of tag ids from the list of tag entities in the database List<String> databaseTagIdList = new ArrayList<>(); tagEntityList.forEach(tagEntity -> databaseTagIdList.add(tagEntity.getId().toString())); // Get a list of tag ids in the search index List<String> indexDocumentTagIdList = indexFunctionsDao.getIdsInIndex(indexName, documentType); // Remove the database ids from the index ids indexDocumentTagIdList.removeAll(databaseTagIdList); // If there are any ids left in the index list they need to be removed indexDocumentTagIdList.forEach(id -> indexFunctionsDao.deleteDocumentById(indexName, documentType, id)); }
/** * Modify a list of tags * * @param tagEntityList the tag entities to modify * @param modificationType the type of modification */ public void modifyTagsInSearchIndex(List<TagEntity> tagEntityList, String modificationType) { List<Integer> tagIds = new ArrayList<>(); tagEntityList.forEach(tagEntity -> tagIds.add(tagEntity.getId())); processMessage(jsonHelper.objectToJson(new SearchIndexUpdateDto(MESSAGE_TYPE_TAG_UPDATE, tagIds, modificationType))); }
/** * Modify a list of tags * * @param tagEntityList the tag entities to modify * @param modificationType the type of modification */ public void modifyTagsInSearchIndex(List<TagEntity> tagEntityList, String modificationType) { List<Integer> tagIds = new ArrayList<>(); tagEntityList.forEach(tagEntity -> tagIds.add(tagEntity.getId())); processMessage(jsonHelper.objectToJson(new SearchIndexUpdateDto(MESSAGE_TYPE_TAG_UPDATE, tagIds, modificationType))); }
/** * Modify a tag * * @param tagEntity the tag entity to modify * @param modificationType the type of modification */ public void modifyTagInSearchIndex(TagEntity tagEntity, String modificationType) { List<Integer> tagIds = new ArrayList<>(); tagIds.add(tagEntity.getId()); processMessage(jsonHelper.objectToJson(new SearchIndexUpdateDto(MESSAGE_TYPE_TAG_UPDATE, tagIds, modificationType))); }
/** * Modify a tag * * @param tagEntity the tag entity to modify * @param modificationType the type of modification */ public void modifyTagInSearchIndex(TagEntity tagEntity, String modificationType) { List<Integer> tagIds = new ArrayList<>(); tagIds.add(tagEntity.getId()); processMessage(jsonHelper.objectToJson(new SearchIndexUpdateDto(MESSAGE_TYPE_TAG_UPDATE, tagIds, modificationType))); }
@Test public void testGetTagsByIds() { // Create two tag type entities List<TagTypeEntity> tagTypeEntities = Arrays .asList(tagTypeDaoTestHelper.createTagTypeEntity(TAG_TYPE, TAG_TYPE_DISPLAY_NAME, TAG_TYPE_ORDER, TAG_DESCRIPTION), tagTypeDaoTestHelper.createTagTypeEntity(TAG_TYPE_2, TAG_TYPE_DISPLAY_NAME_2, TAG_TYPE_ORDER_2, TAG_DESCRIPTION_2)); // Create two root tag entities for each tag type List<TagEntity> tagEntities = Arrays.asList(tagDaoTestHelper.createTagEntity(tagTypeEntities.get(0), TAG_CODE, TAG_DISPLAY_NAME, TAG_DESCRIPTION), tagDaoTestHelper.createTagEntity(tagTypeEntities.get(0), TAG_CODE_2, TAG_DISPLAY_NAME_2, TAG_DESCRIPTION_2), tagDaoTestHelper.createTagEntity(tagTypeEntities.get(1), TAG_CODE_3, TAG_DISPLAY_NAME_3, TAG_DESCRIPTION_3), tagDaoTestHelper.createTagEntity(tagTypeEntities.get(1), TAG_CODE_4, TAG_DISPLAY_NAME_4, TAG_DESCRIPTION_4)); List<Integer> tagIds = new ArrayList<>(); tagEntities.forEach(tagEntity -> tagIds.add(tagEntity.getId())); // Get all tags. assertEquals(Arrays.asList(tagEntities.get(0), tagEntities.get(1), tagEntities.get(2), tagEntities.get(3)), tagDao.getTagsByIds(tagIds)); }
@Test public void testUpdateTagNoChangesToDisplayNameExceptForCase() { // Create a tag key. TagKey tagKey = new TagKey(TAG_TYPE, TAG_CODE); // Create and persist a tag entity. TagEntity tagEntity = tagDaoTestHelper.createTagEntity(tagKey, TAG_DISPLAY_NAME.toUpperCase(), TAG_DESCRIPTION); // Update the tag without changing it's display name except for the case. Tag updatedTag = tagService .updateTag(tagKey, new TagUpdateRequest(TAG_DISPLAY_NAME.toLowerCase(), TAG_SEARCH_SCORE_MULTIPLIER_2, TAG_DESCRIPTION_2, NO_PARENT_TAG_KEY)); // Validate the returned object. assertEquals( new Tag(tagEntity.getId(), tagKey, TAG_DISPLAY_NAME.toLowerCase(), TAG_SEARCH_SCORE_MULTIPLIER_2, TAG_DESCRIPTION_2, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), updatedTag); }
@Test public void testGetTagUpperCaseParameters() { // Create and persist a tag entity. TagEntity tagEntity = tagDaoTestHelper.createTagEntity(TAG_TYPE, TAG_CODE, TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION); // Get the tag using uppercase input parameters. Tag resultTag = tagService.getTag(new TagKey(TAG_TYPE.toUpperCase(), TAG_CODE.toUpperCase())); // Validate the returned object. assertEquals( new Tag(tagEntity.getId(), new TagKey(TAG_TYPE, TAG_CODE), TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), resultTag); }
@Test public void testGetTagLowerCaseParameters() { // Create and persist a tag entity. TagEntity tagEntity = tagDaoTestHelper.createTagEntity(TAG_TYPE, TAG_CODE, TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION); // Get the tag using lower case input parameters. Tag resultTag = tagService.getTag(new TagKey(TAG_TYPE.toLowerCase(), TAG_CODE.toLowerCase())); // Validate the returned object. assertEquals( new Tag(tagEntity.getId(), new TagKey(TAG_TYPE, TAG_CODE), TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), resultTag); }
@Test public void testUpdateTagNoChangesToDisplayName() { // Create a tag key. TagKey tagKey = new TagKey(TAG_TYPE, TAG_CODE); // Create and persist a tag entity. TagEntity tagEntity = tagDaoTestHelper.createTagEntity(tagKey, TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION); // Update the tag without changing it's display name except for the case. Tag updatedTag = tagService.updateTag(tagKey, new TagUpdateRequest(TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER_2, TAG_DESCRIPTION_2, NO_PARENT_TAG_KEY)); // Validate the returned object. assertEquals(new Tag(tagEntity.getId(), tagKey, TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER_2, TAG_DESCRIPTION_2, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), updatedTag); }
@Test public void testGetTag() { // Create and persist a tag entity. TagEntity tagEntity = tagDaoTestHelper.createTagEntity(TAG_TYPE, TAG_CODE, TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION); // Retrieve the tag. Tag resultTag = tagService.getTag(new TagKey(TAG_TYPE, TAG_CODE)); // Validate the returned object. assertEquals( new Tag(tagEntity.getId(), new TagKey(TAG_TYPE, TAG_CODE), TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), resultTag); }
@Test public void testGetTagTrimParameters() { // Create and persist a tag entity. TagEntity tagEntity = tagDaoTestHelper.createTagEntity(TAG_TYPE, TAG_CODE, TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION); // Retrieve the tag using input parameters with leading and trailing empty spaces. Tag resultTag = tagService.getTag(new TagKey(addWhitespace(TAG_TYPE), addWhitespace(TAG_CODE))); // Validate the returned object. assertEquals( new Tag(tagEntity.getId(), new TagKey(TAG_TYPE, TAG_CODE), TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), resultTag); }
@Test public void testCreateTagMissingOptionalParametersPassedAsWhitespace() { // Create and persist a tag type entity. tagTypeDaoTestHelper.createTagTypeEntity(TAG_TYPE, TAG_TYPE_DISPLAY_NAME, TAG_TYPE_ORDER, TAG_TYPE_DESCRIPTION); // Create a tag key. TagKey tagKey = new TagKey(TAG_TYPE, TAG_CODE); // Create a tag with description passed in as whitespace. Tag tag = tagService.createTag(new TagCreateRequest(tagKey, TAG_DISPLAY_NAME, NO_TAG_SEARCH_SCORE_MULTIPLIER, BLANK_TEXT, NO_PARENT_TAG_KEY)); // Get the tag entity. TagEntity tagEntity = tagDao.getTagByKey(tagKey); assertNotNull(tagEntity); // Validate the response object. assertEquals( new Tag(tagEntity.getId(), tagKey, TAG_DISPLAY_NAME, NO_TAG_SEARCH_SCORE_MULTIPLIER, BLANK_TEXT, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), tag); }
@Test public void testUpdateTag() { // Create a parent tag key. TagKey parentTagKey = new TagKey(TAG_TYPE, TAG_CODE); // Create a parent tag entity. tagDaoTestHelper.createTagEntity(parentTagKey, TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION); // Create a tag key. TagKey tagKey = new TagKey(TAG_TYPE, TAG_CODE_2); // Create and persist a tag entity without a parent tag. TagEntity tagEntity = tagDaoTestHelper.createTagEntity(tagKey, TAG_DISPLAY_NAME_2, TAG_SEARCH_SCORE_MULTIPLIER_2, TAG_DESCRIPTION_2); // Update the tag. Tag updatedTag = tagService.updateTag(tagKey, new TagUpdateRequest(TAG_DISPLAY_NAME_3, TAG_SEARCH_SCORE_MULTIPLIER_3, TAG_DESCRIPTION_3, parentTagKey)); // Validate the returned object. assertEquals(new Tag(tagEntity.getId(), tagKey, TAG_DISPLAY_NAME_3, TAG_SEARCH_SCORE_MULTIPLIER_3, TAG_DESCRIPTION_3, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), parentTagKey, NO_TAG_HAS_CHILDREN_FLAG), updatedTag); }
@Test public void testCreateTagMissingOptionalParametersPassedAsNulls() { // Create and persist a tag type entity. tagTypeDaoTestHelper.createTagTypeEntity(TAG_TYPE, TAG_TYPE_DISPLAY_NAME, TAG_TYPE_ORDER, TAG_TYPE_DESCRIPTION); // Create a tag key. TagKey tagKey = new TagKey(TAG_TYPE, TAG_CODE); // Create a tag with description passed in as null. Tag tag = tagService.createTag(new TagCreateRequest(tagKey, TAG_DISPLAY_NAME, NO_TAG_SEARCH_SCORE_MULTIPLIER, NO_TAG_DESCRIPTION, NO_PARENT_TAG_KEY)); // Get the tag entity. TagEntity tagEntity = tagDao.getTagByKey(tagKey); assertNotNull(tagEntity); // Validate the response object. assertEquals(new Tag(tagEntity.getId(), tagKey, TAG_DISPLAY_NAME, NO_TAG_SEARCH_SCORE_MULTIPLIER, NO_TAG_DESCRIPTION, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), tag); }
@Test public void testUpdateTagMissingOptionalParametersPassedAsWhitespace() { // Create a parent tag key. TagKey parentTagKey = new TagKey(TAG_TYPE, TAG_CODE); // Create a parent tag entity. TagEntity parentTagEntity = tagDaoTestHelper.createTagEntity(parentTagKey, TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION); // Create a tag key. TagKey tagKey = new TagKey(TAG_TYPE, TAG_CODE_2); // Create and persist a tag entity with a parent tag. TagEntity tagEntity = tagDaoTestHelper.createTagEntity(tagKey, TAG_DISPLAY_NAME_2, TAG_SEARCH_SCORE_MULTIPLIER_2, TAG_DESCRIPTION_2, parentTagEntity); // Update the tag with description passed as whitespace. Tag updatedTag = tagService.updateTag(tagKey, new TagUpdateRequest(TAG_DISPLAY_NAME_3, NO_TAG_SEARCH_SCORE_MULTIPLIER, BLANK_TEXT, NO_PARENT_TAG_KEY)); // Validate the returned object. assertEquals(new Tag(tagEntity.getId(), tagKey, TAG_DISPLAY_NAME_3, NO_TAG_SEARCH_SCORE_MULTIPLIER, BLANK_TEXT, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), updatedTag); }
@Test public void testUpdateTagDisplayNameAlreadyExistsForOtherTagType() { // Create and persist a tag entity. TagEntity tagEntity = tagDaoTestHelper.createTagEntity(TAG_TYPE, TAG_CODE, TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION); // Create and persist a second tag entity for the another tag type that would have the display name to be updated to. tagDaoTestHelper.createTagEntity(TAG_TYPE_2, TAG_CODE_2, TAG_DISPLAY_NAME_2, TAG_DESCRIPTION_2); // Update the tag. Tag updatedTag = tagService.updateTag(new TagKey(TAG_TYPE, TAG_CODE), new TagUpdateRequest(TAG_DISPLAY_NAME_2, TAG_SEARCH_SCORE_MULTIPLIER_3, TAG_DESCRIPTION_3, NO_PARENT_TAG_KEY)); // Validate the returned object. assertEquals(new Tag(tagEntity.getId(), new TagKey(TAG_TYPE, TAG_CODE), TAG_DISPLAY_NAME_2, TAG_SEARCH_SCORE_MULTIPLIER_3, TAG_DESCRIPTION_3, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), updatedTag); }
@Test public void testCreateTag() { // Create and persist a tag type entity. tagTypeDaoTestHelper.createTagTypeEntity(TAG_TYPE, TAG_TYPE_DISPLAY_NAME, TAG_TYPE_ORDER, TAG_TYPE_DESCRIPTION); // Create a tag key. TagKey tagKey = new TagKey(TAG_TYPE, TAG_CODE); // Create a tag. Tag tag = tagService.createTag(new TagCreateRequest(tagKey, TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION, NO_PARENT_TAG_KEY)); // Get the tag entity. TagEntity tagEntity = tagDao.getTagByKey(tagKey); assertNotNull(tagEntity); // Validate the response object. assertEquals( new Tag(tagEntity.getId(), new TagKey(TAG_TYPE, TAG_CODE), TAG_DISPLAY_NAME, TAG_SEARCH_SCORE_MULTIPLIER, TAG_DESCRIPTION, tagEntity.getCreatedBy(), tagEntity.getUpdatedBy(), HerdDateUtils.getXMLGregorianCalendarValue(tagEntity.getUpdatedOn()), NO_PARENT_TAG_KEY, NO_TAG_HAS_CHILDREN_FLAG), tag); }