/** * Gets a tag type entity by its display name and ensure it doesn't already exist. * * @param displayName the tag display name (case insensitive) * * @throws AlreadyExistsException if the tag type entity already exists */ public void assertTagTypeDisplayNameDoesNotExist(String displayName) throws AlreadyExistsException { TagTypeEntity tagTypeEntity = tagTypeDao.getTagTypeByDisplayName(displayName); if (tagTypeEntity != null) { throw new AlreadyExistsException(String.format("Display name \"%s\" already exists for tag type \"%s\".", displayName, tagTypeEntity.getCode())); } } }
/** * Creates and persists a new tag type entity. * * @param request the tag type create request * * @return the newly created tag type entity */ private TagTypeEntity createTagTypeEntity(TagTypeCreateRequest request) { TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode(request.getTagTypeKey().getTagTypeCode()); tagTypeEntity.setDisplayName(request.getDisplayName()); tagTypeEntity.setOrderNumber(request.getTagTypeOrder()); tagTypeEntity.setDescription(request.getDescription()); return tagTypeDao.saveAndRefresh(tagTypeEntity); }
/** * Creates the tag type registration from the persisted entity. * * @param tagTypeEntity the tag type registration entity * @param includeDisplayName specifies to include the display name field * @param includeTagTypeOrder specifies to include the tag type order field * @param includeDescription specifies to include the description field * * @return the tag type registration */ private TagType createTagTypeFromEntity(TagTypeEntity tagTypeEntity, boolean includeDisplayName, boolean includeTagTypeOrder, boolean includeDescription) { TagType tagType = new TagType(); TagTypeKey tagTypeKey = new TagTypeKey(); tagType.setTagTypeKey(tagTypeKey); tagTypeKey.setTagTypeCode(tagTypeEntity.getCode()); if (includeDisplayName) { tagType.setDisplayName(tagTypeEntity.getDisplayName()); } if (includeTagTypeOrder) { tagType.setTagTypeOrder(tagTypeEntity.getOrderNumber()); } if (includeDescription) { tagType.setDescription(tagTypeEntity.getDescription()); } return tagType; }
/** * Update and persist the tag type per specified update request. * * @param tagTypeEntity the tag type entity * @param request the tag type update request */ private void updateTagTypeEntity(TagTypeEntity tagTypeEntity, TagTypeUpdateRequest request) { // Update the tag type entity fields. tagTypeEntity.setDisplayName(request.getDisplayName()); tagTypeEntity.setOrderNumber(request.getTagTypeOrder()); tagTypeEntity.setDescription(request.getDescription()); // Persist and refresh the entity. tagTypeDao.saveAndRefresh(tagTypeEntity); }
@Test public void testGetTagChildrenEntities() { // Create a tag type entity TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode(TAG_TYPE_CODE); // Create a tag entity TagEntity tagEntity = new TagEntity(); tagEntity.setTagType(tagTypeEntity); tagEntity.setTagCode(TAG_CODE); tagEntity.setDisplayName(TAG_DISPLAY_NAME); // Create a parent tag entities array list List<TagEntity> parentTagEntities = new ArrayList<>(); parentTagEntities.add(tagEntity); // Setup when clauses when(configurationHelper.getProperty(ConfigurationValue.MAX_ALLOWED_TAG_NESTING, Integer.class)).thenReturn(1); when(tagDao.getChildrenTags(parentTagEntities)).thenReturn(parentTagEntities); // Call the method under test List<TagEntity> result = tagDaoHelper.getTagChildrenEntities(tagEntity); // Confirm the result value assertThat("Result not equal to parent tag entities list.", result, is(equalTo(parentTagEntities))); // Setup verify clauses verify(configurationHelper).getProperty(ConfigurationValue.MAX_ALLOWED_TAG_NESTING, Integer.class); verify(tagDao).getChildrenTags(parentTagEntities); verifyNoMoreInteractions(configurationHelper, tagDao); }
@Test public void testAssertDisplayNameDoesNotExistForTag() { // Create a tag type entity TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode(TAG_TYPE_CODE); // Create a tag entity TagEntity tagEntity = new TagEntity(); tagEntity.setTagType(tagTypeEntity); tagEntity.setTagCode(TAG_CODE); tagEntity.setDisplayName(TAG_DISPLAY_NAME); // Setup when clauses when(tagDao.getTagByTagTypeAndDisplayName(TAG_CODE, TAG_DISPLAY_NAME)).thenReturn(tagEntity); // Call method under test try { tagDaoHelper.assertDisplayNameDoesNotExistForTag(TAG_CODE, TAG_DISPLAY_NAME); fail("Expected to throw an exception."); } catch (AlreadyExistsException alreadyExistsException) { // Confirm the exception message is correct assertThat("Exception message is not correct.", alreadyExistsException.getMessage(), is(equalTo(String .format("Display name \"%s\" already exists for a tag with tag type \"%s\" and tag code \"%s\".", TAG_DISPLAY_NAME, tagEntity.getTagType().getCode(), tagEntity.getTagCode())))); } // Setup verify clauses verify(tagDao).getTagByTagTypeAndDisplayName(TAG_CODE, TAG_DISPLAY_NAME); verifyNoMoreInteractions(configurationHelper, tagDao); }
@Test public void testGetTagTypeByDisplayName() { // Create a tag type entity. tagTypeDaoTestHelper.createTagTypeEntity(TAG_TYPE, TAG_TYPE_DISPLAY_NAME, TAG_TYPE_ORDER, TAG_TYPE_DESCRIPTION); // Retrieve the tag type entity. TagTypeEntity resultTagTypeEntity = tagTypeDao.getTagTypeByDisplayName(TAG_TYPE_DISPLAY_NAME); // Validate the results. assertEquals(TAG_TYPE, resultTagTypeEntity.getCode()); assertEquals(TAG_TYPE_DISPLAY_NAME, resultTagTypeEntity.getDisplayName()); assertEquals(new Integer(1), resultTagTypeEntity.getOrderNumber()); }
if (!StringUtils.equalsIgnoreCase(tagTypeEntity.getDisplayName(), request.getDisplayName())) List<BusinessObjectDefinitionEntity> businessObjectDefinitionEntities = businessObjectDefinitionDao.getBusinessObjectDefinitions(tagEntities); LOGGER.info("Modify the business object definitions in the search index associated with the tag type being updated." + " tagTypeCode=\"{}\", businessObjectDefinitionIds=[{}], searchIndexUpdateType=\"{}\"", tagTypeEntity.getCode(), businessObjectDefinitionEntities.stream().map(businessObjectDefinitionEntity -> String.valueOf(businessObjectDefinitionEntity.getId())) .collect(Collectors.joining(", ")), SEARCH_INDEX_UPDATE_TYPE_UPDATE); tagTypeEntity.getCode(), tagEntities.stream().map(tag -> String.format("{tagTypeCode=\"%s\", tagCode=\"%s\"}", tag.getTagType().getCode(), tag.getTagCode())) .collect(Collectors.joining(", ")), SEARCH_INDEX_UPDATE_TYPE_UPDATE); searchIndexUpdateHelper.modifyTagsInSearchIndex(tagEntities, SEARCH_INDEX_UPDATE_TYPE_UPDATE);
@Test public void testGetTagEntity() { // Create a tag type entity TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode(TAG_TYPE_CODE); // Create a tag entity TagEntity tagEntity = new TagEntity(); tagEntity.setTagType(tagTypeEntity); tagEntity.setTagCode(TAG_CODE); tagEntity.setDisplayName(TAG_DISPLAY_NAME); // Create a tag key TagKey tagKey = new TagKey(TAG_TYPE_CODE, TAG_CODE); // Setup when clauses when(tagDao.getTagByKey(tagKey)).thenReturn(tagEntity); // Call method under test TagEntity result = tagDaoHelper.getTagEntity(tagKey); // Confirm the result value assertThat("Result not equal to tag entity.", result, is(equalTo(tagEntity))); // Setup verify clauses verify(tagDao).getTagByKey(tagKey); verifyNoMoreInteractions(configurationHelper, tagDao); }
@Test public void testGetTagTypeByKey() { // Create a tag type entity. tagTypeDaoTestHelper.createTagTypeEntity(TAG_TYPE, TAG_TYPE_DISPLAY_NAME, TAG_TYPE_ORDER, TAG_TYPE_DESCRIPTION); // Retrieve the tag type entity. TagTypeEntity resultTagTypeEntity = tagTypeDao.getTagTypeByKey(new TagTypeKey(TAG_TYPE)); // Validate the results. assertEquals(TAG_TYPE, resultTagTypeEntity.getCode()); assertEquals(TAG_TYPE_DISPLAY_NAME, resultTagTypeEntity.getDisplayName()); assertEquals(new Integer(1), resultTagTypeEntity.getOrderNumber()); }
/** * Update and persist the tag type per specified update request. * * @param tagTypeEntity the tag type entity * @param request the tag type update request */ private void updateTagTypeEntity(TagTypeEntity tagTypeEntity, TagTypeUpdateRequest request) { // Update the tag type entity fields. tagTypeEntity.setDisplayName(request.getDisplayName()); tagTypeEntity.setOrderNumber(request.getTagTypeOrder()); tagTypeEntity.setDescription(request.getDescription()); // Persist and refresh the entity. tagTypeDao.saveAndRefresh(tagTypeEntity); }
if (!StringUtils.equalsIgnoreCase(tagTypeEntity.getDisplayName(), request.getDisplayName())) List<BusinessObjectDefinitionEntity> businessObjectDefinitionEntities = businessObjectDefinitionDao.getBusinessObjectDefinitions(tagEntities); LOGGER.info("Modify the business object definitions in the search index associated with the tag type being updated." + " tagTypeCode=\"{}\", businessObjectDefinitionIds=[{}], searchIndexUpdateType=\"{}\"", tagTypeEntity.getCode(), businessObjectDefinitionEntities.stream().map(businessObjectDefinitionEntity -> String.valueOf(businessObjectDefinitionEntity.getId())) .collect(Collectors.joining(", ")), SEARCH_INDEX_UPDATE_TYPE_UPDATE); tagTypeEntity.getCode(), tagEntities.stream().map(tag -> String.format("{tagTypeCode=\"%s\", tagCode=\"%s\"}", tag.getTagType().getCode(), tag.getTagCode())) .collect(Collectors.joining(", ")), SEARCH_INDEX_UPDATE_TYPE_UPDATE); searchIndexUpdateHelper.modifyTagsInSearchIndex(tagEntities, SEARCH_INDEX_UPDATE_TYPE_UPDATE);
/** * Gets a tag type entity by its display name and ensure it doesn't already exist. * * @param displayName the tag display name (case insensitive) * * @throws AlreadyExistsException if the tag type entity already exists */ public void assertTagTypeDisplayNameDoesNotExist(String displayName) throws AlreadyExistsException { TagTypeEntity tagTypeEntity = tagTypeDao.getTagTypeByDisplayName(displayName); if (tagTypeEntity != null) { throw new AlreadyExistsException(String.format("Display name \"%s\" already exists for tag type \"%s\".", displayName, tagTypeEntity.getCode())); } } }
/** * Creates and persists a new tag type entity. * * @param request the tag type create request * * @return the newly created tag type entity */ private TagTypeEntity createTagTypeEntity(TagTypeCreateRequest request) { TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode(request.getTagTypeKey().getTagTypeCode()); tagTypeEntity.setDisplayName(request.getDisplayName()); tagTypeEntity.setOrderNumber(request.getTagTypeOrder()); tagTypeEntity.setDescription(request.getDescription()); return tagTypeDao.saveAndRefresh(tagTypeEntity); }
@Test public void testValidateParentTagEntityWithTagEntityEqualToParentTagEntity() { // Create a tag type entity TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode(TAG_TYPE_CODE); // Create a tag entity TagEntity tagEntity = new TagEntity(); tagEntity.setTagType(tagTypeEntity); tagEntity.setTagCode(TAG_CODE); tagEntity.setDisplayName(TAG_DISPLAY_NAME); // Setup when clauses when(configurationHelper.getProperty(ConfigurationValue.MAX_ALLOWED_TAG_NESTING, Integer.class)).thenReturn(0); // Call the method under test try { tagDaoHelper.validateParentTagEntity(tagEntity, tagEntity); fail("Expected to throw an exception."); } catch (IllegalArgumentException illegalArgumentException) { // Confirm the exception message is correct assertThat("Exception message is not correct.", illegalArgumentException.getMessage(), is(equalTo("Parent tag key cannot be the requested tag key or any of its children’s tag keys."))); } // Setup verify clauses verify(configurationHelper).getProperty(ConfigurationValue.MAX_ALLOWED_TAG_NESTING, Integer.class); verifyNoMoreInteractions(configurationHelper, tagDao); }
/** * Creates the tag type registration from the persisted entity. * * @param tagTypeEntity the tag type registration entity * @param includeDisplayName specifies to include the display name field * @param includeTagTypeOrder specifies to include the tag type order field * @param includeDescription specifies to include the description field * * @return the tag type registration */ private TagType createTagTypeFromEntity(TagTypeEntity tagTypeEntity, boolean includeDisplayName, boolean includeTagTypeOrder, boolean includeDescription) { TagType tagType = new TagType(); TagTypeKey tagTypeKey = new TagTypeKey(); tagType.setTagTypeKey(tagTypeKey); tagTypeKey.setTagTypeCode(tagTypeEntity.getCode()); if (includeDisplayName) { tagType.setDisplayName(tagTypeEntity.getDisplayName()); } if (includeTagTypeOrder) { tagType.setTagTypeOrder(tagTypeEntity.getOrderNumber()); } if (includeDescription) { tagType.setDescription(tagTypeEntity.getDescription()); } return tagType; }
@Override public BusinessObjectDefinitionTagEntity getBusinessObjectDefinitionTagByParentEntities(BusinessObjectDefinitionEntity businessObjectDefinitionEntity, TagEntity tagEntity) { // Create the criteria builder and the criteria. CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<BusinessObjectDefinitionTagEntity> criteria = builder.createQuery(BusinessObjectDefinitionTagEntity.class); // The criteria root is the business object definition tag. Root<BusinessObjectDefinitionTagEntity> businessObjectDefinitionTagEntityRoot = criteria.from(BusinessObjectDefinitionTagEntity.class); // Create the standard restrictions (i.e. the standard where clauses). List<Predicate> predicates = new ArrayList<>(); predicates.add(builder .equal(businessObjectDefinitionTagEntityRoot.get(BusinessObjectDefinitionTagEntity_.businessObjectDefinition), businessObjectDefinitionEntity)); predicates.add(builder.equal(businessObjectDefinitionTagEntityRoot.get(BusinessObjectDefinitionTagEntity_.tag), tagEntity)); // Add the clauses for the query. criteria.select(businessObjectDefinitionTagEntityRoot).where(builder.and(predicates.toArray(new Predicate[predicates.size()]))); return executeSingleResultQuery(criteria, String.format( "Found more than one business object definition tag instance with parameters {namespace=\"%s\", businessObjectDefinitionName=\"%s\"," + " tagType=\"%s\", tagCode=\"%s\"}.", businessObjectDefinitionEntity.getNamespace().getCode(), businessObjectDefinitionEntity.getName(), tagEntity.getTagType().getCode(), tagEntity.getTagCode())); }
/** * Creates and persists a new tag type entity. * * @param typeCode the tag type code * @param displayName the display name * @param orderNumber the sorting number * @param description the description * * @return the newly created tag type entity. */ public TagTypeEntity createTagTypeEntity(String typeCode, String displayName, Integer orderNumber, String description) { TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode(typeCode); tagTypeEntity.setOrderNumber(orderNumber); tagTypeEntity.setDisplayName(displayName); tagTypeEntity.setDescription(description); return tagTypeDao.saveAndRefresh(tagTypeEntity); }
@Test public void testValidateParentTagEntity() { // Create a tag type entity TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode(TAG_TYPE_CODE); // Create a tag entity TagEntity tagEntity = new TagEntity(); tagEntity.setTagType(tagTypeEntity); tagEntity.setTagCode(TAG_CODE); tagEntity.setDisplayName(TAG_DISPLAY_NAME); // Create a parent tag entity TagEntity parentTagEntity = new TagEntity(); parentTagEntity.setTagType(tagTypeEntity); parentTagEntity.setTagCode(TAG_CODE_2); parentTagEntity.setDisplayName(TAG_DISPLAY_NAME_2); parentTagEntity.setChildrenTagEntities(Lists.newArrayList(tagEntity)); // Set the parent tag entity on the child tag entity tagEntity.setParentTagEntity(parentTagEntity); // Setup when clauses when(configurationHelper.getProperty(ConfigurationValue.MAX_ALLOWED_TAG_NESTING, Integer.class)).thenReturn(1); // Call the method under test tagDaoHelper.validateParentTagEntity(tagEntity, parentTagEntity); // Setup verify clauses verify(configurationHelper).getProperty(ConfigurationValue.MAX_ALLOWED_TAG_NESTING, Integer.class); verifyNoMoreInteractions(configurationHelper, tagDao); }
@Override public BusinessObjectDefinitionTagEntity getBusinessObjectDefinitionTagByParentEntities(BusinessObjectDefinitionEntity businessObjectDefinitionEntity, TagEntity tagEntity) { // Create the criteria builder and the criteria. CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<BusinessObjectDefinitionTagEntity> criteria = builder.createQuery(BusinessObjectDefinitionTagEntity.class); // The criteria root is the business object definition tag. Root<BusinessObjectDefinitionTagEntity> businessObjectDefinitionTagEntityRoot = criteria.from(BusinessObjectDefinitionTagEntity.class); // Create the standard restrictions (i.e. the standard where clauses). List<Predicate> predicates = new ArrayList<>(); predicates.add(builder .equal(businessObjectDefinitionTagEntityRoot.get(BusinessObjectDefinitionTagEntity_.businessObjectDefinition), businessObjectDefinitionEntity)); predicates.add(builder.equal(businessObjectDefinitionTagEntityRoot.get(BusinessObjectDefinitionTagEntity_.tag), tagEntity)); // Add the clauses for the query. criteria.select(businessObjectDefinitionTagEntityRoot).where(builder.and(predicates.toArray(new Predicate[predicates.size()]))); return executeSingleResultQuery(criteria, String.format( "Found more than one business object definition tag instance with parameters {namespace=\"%s\", businessObjectDefinitionName=\"%s\"," + " tagType=\"%s\", tagCode=\"%s\"}.", businessObjectDefinitionEntity.getNamespace().getCode(), businessObjectDefinitionEntity.getName(), tagEntity.getTagType().getCode(), tagEntity.getTagCode())); }