if (businessObjectIdSet.contains(dataEntity.getId())) businessObjectIdSet.add(dataEntity.getId()); businessObjectData.setId(dataEntity.getId()); businessObjectData.setPartitionValue(dataEntity.getPartitionValue()); businessObjectData.setVersion(dataEntity.getVersion()); businessObjectData.setLatestVersion(dataEntity.getLatestVersion()); BusinessObjectFormatEntity formatEntity = dataEntity.getBusinessObjectFormat(); businessObjectData.setNamespace(formatEntity.getBusinessObjectDefinition().getNamespace().getCode()); businessObjectData.setBusinessObjectDefinitionName(formatEntity.getBusinessObjectDefinition().getName()); businessObjectData.setBusinessObjectFormatVersion(formatEntity.getBusinessObjectFormatVersion()); businessObjectData.setPartitionKey(formatEntity.getPartitionKey()); businessObjectData.setStatus(dataEntity.getStatus().getCode()); if (dataEntity.getPartitionValue2() != null) subpartitions.add(dataEntity.getPartitionValue2()); if (dataEntity.getPartitionValue3() != null) subpartitions.add(dataEntity.getPartitionValue3()); if (dataEntity.getPartitionValue4() != null) subpartitions.add(dataEntity.getPartitionValue4()); if (dataEntity.getPartitionValue5() != null)
/** * Resets business object data entity "created on" field value back by the specified number of days. * * @param businessObjectDataEntity the business object data entity * @param offsetInDays the number of days to reset the business object data "created on" field value */ public void ageBusinessObjectData(BusinessObjectDataEntity businessObjectDataEntity, long offsetInDays) { // Apply the offset in days to business object data "created on" value. businessObjectDataEntity .setCreatedOn(new Timestamp(businessObjectDataEntity.getCreatedOn().getTime() - offsetInDays * 86400000L)); // 24L * 60L * 60L * 1000L businessObjectDataDao.saveAndRefresh(businessObjectDataEntity); }
/** * Gets the sub-partition values for the specified business object data entity. * * @param businessObjectDataEntity the business object data entity. * * @return the list of sub-partition values. */ public List<String> getSubPartitionValues(BusinessObjectDataEntity businessObjectDataEntity) { List<String> subPartitionValues = new ArrayList<>(); List<String> rawSubPartitionValues = new ArrayList<>(); rawSubPartitionValues.add(businessObjectDataEntity.getPartitionValue2()); rawSubPartitionValues.add(businessObjectDataEntity.getPartitionValue3()); rawSubPartitionValues.add(businessObjectDataEntity.getPartitionValue4()); rawSubPartitionValues.add(businessObjectDataEntity.getPartitionValue5()); for (String rawSubPartitionValue : rawSubPartitionValues) { if (rawSubPartitionValue != null) { subPartitionValues.add(rawSubPartitionValue); } else { break; } } return subPartitionValues; }
/** * Gets a unique storage from the given business object data. The given business object data must have one and only one storage unit with a storage, * otherwise this method throws an exception. * * @param businessObjectDataEntity the business object data entity * * @return the unique storage entity */ private StorageEntity getUniqueStorage(BusinessObjectDataEntity businessObjectDataEntity) { Collection<StorageUnitEntity> targetStorageUnits = businessObjectDataEntity.getStorageUnits(); Assert.notEmpty(targetStorageUnits, "No storage units found for business object data ID \"" + businessObjectDataEntity.getId() + "\"."); Assert.isTrue(targetStorageUnits.size() == 1, "More than 1 storage units found for business object data ID \"" + businessObjectDataEntity.getId() + "\"."); return IterableUtils.get(targetStorageUnits, 0).getStorage(); }
BusinessObjectFormatEntity businessObjectFormatEntity = businessObjectDataEntity.getBusinessObjectFormat(); businessObjectData.setNamespace(businessObjectFormatEntity.getBusinessObjectDefinition().getNamespace().getCode()); businessObjectData.setBusinessObjectDefinitionName(businessObjectFormatEntity.getBusinessObjectDefinition().getName()); businessObjectData.setId(businessObjectDataEntity.getId()); businessObjectData.setBusinessObjectFormatUsage(businessObjectFormatEntity.getUsage()); businessObjectData.setBusinessObjectFormatFileType(businessObjectFormatEntity.getFileType().getCode()); businessObjectData.setBusinessObjectFormatVersion(businessObjectFormatEntity.getBusinessObjectFormatVersion()); businessObjectData.setPartitionKey(businessObjectDataEntity.getBusinessObjectFormat().getPartitionKey()); businessObjectData.setPartitionValue(businessObjectDataEntity.getPartitionValue()); businessObjectData.setSubPartitionValues(getSubPartitionValues(businessObjectDataEntity)); businessObjectData.setStatus(businessObjectDataEntity.getStatus().getCode()); businessObjectData.setVersion(businessObjectDataEntity.getVersion()); businessObjectData.setLatestVersion(businessObjectDataEntity.getLatestVersion()); .setStorageUnits(storageUnitHelper.createStorageUnitsFromEntities(businessObjectDataEntity.getStorageUnits(), includeStorageUnitStatusHistory)); for (BusinessObjectDataAttributeEntity attributeEntity : businessObjectDataEntity.getAttributes()) for (BusinessObjectDataEntity parent : businessObjectDataEntity.getBusinessObjectDataParents()) for (BusinessObjectDataEntity parent : businessObjectDataEntity.getBusinessObjectDataChildren()) for (BusinessObjectDataStatusHistoryEntity businessObjectDataStatusHistoryEntity : businessObjectDataEntity.getHistoricalStatuses()) if (businessObjectDataEntity.getRetentionExpiration() != null) businessObjectData.setRetentionExpirationDate(HerdDateUtils.getXMLGregorianCalendarValue(businessObjectDataEntity.getRetentionExpiration()));
/** * Creates a business object data key from a business object data entity. * * @param businessObjectDataEntity the business object data entity. * * @return the business object data key. */ public BusinessObjectDataKey createBusinessObjectDataKeyFromEntity(BusinessObjectDataEntity businessObjectDataEntity) { BusinessObjectDataKey businessObjectDataKey = new BusinessObjectDataKey(); businessObjectDataKey.setNamespace(businessObjectDataEntity.getBusinessObjectFormat().getBusinessObjectDefinition().getNamespace().getCode()); businessObjectDataKey.setBusinessObjectDefinitionName(businessObjectDataEntity.getBusinessObjectFormat().getBusinessObjectDefinition().getName()); businessObjectDataKey.setBusinessObjectFormatUsage(businessObjectDataEntity.getBusinessObjectFormat().getUsage()); businessObjectDataKey.setBusinessObjectFormatFileType(businessObjectDataEntity.getBusinessObjectFormat().getFileType().getCode()); businessObjectDataKey.setBusinessObjectFormatVersion(businessObjectDataEntity.getBusinessObjectFormat().getBusinessObjectFormatVersion()); businessObjectDataKey.setPartitionValue(businessObjectDataEntity.getPartitionValue()); businessObjectDataKey.setSubPartitionValues(getSubPartitionValues(businessObjectDataEntity)); businessObjectDataKey.setBusinessObjectDataVersion(businessObjectDataEntity.getVersion()); return businessObjectDataKey; }
/** * Creates and persists a business object data entity per specified parameters. * * @param businessObjectFormatEntity the business object format entity * @param request the business object data invalidate unregistered request that contains the business object data key * @param businessObjectDataVersion the business object data version * @param latestVersion specifies if this business object data is the latest version * * @return the business object data entity */ private BusinessObjectDataEntity createBusinessObjectDataEntityFromBusinessObjectDataInvalidateUnregisteredRequest( BusinessObjectFormatEntity businessObjectFormatEntity, BusinessObjectDataInvalidateUnregisteredRequest request, int businessObjectDataVersion, boolean latestVersion) { BusinessObjectDataEntity businessObjectDataEntity = new BusinessObjectDataEntity(); businessObjectDataEntity.setBusinessObjectFormat(businessObjectFormatEntity); businessObjectDataEntity.setPartitionValue(request.getPartitionValue()); businessObjectDataEntity.setPartitionValue2(herdCollectionHelper.safeGet(request.getSubPartitionValues(), 0)); businessObjectDataEntity.setPartitionValue3(herdCollectionHelper.safeGet(request.getSubPartitionValues(), 1)); businessObjectDataEntity.setPartitionValue4(herdCollectionHelper.safeGet(request.getSubPartitionValues(), 2)); businessObjectDataEntity.setPartitionValue5(herdCollectionHelper.safeGet(request.getSubPartitionValues(), 3)); businessObjectDataEntity.setVersion(businessObjectDataVersion); businessObjectDataEntity.setLatestVersion(latestVersion); businessObjectDataEntity.setStatus(businessObjectDataStatusDao.getBusinessObjectDataStatusByCode(BusinessObjectDataStatusEntity.VALID)); return businessObjectDataDao.saveAndRefresh(businessObjectDataEntity); } }
/** * Creates a business object data status instance from the business object data entity. * * @param businessObjectDataEntity the business object data entity * * @return the business object data status instance */ private BusinessObjectDataStatus createAvailableBusinessObjectDataStatus(BusinessObjectDataEntity businessObjectDataEntity) { BusinessObjectDataStatus businessObjectDataStatus = new BusinessObjectDataStatus(); businessObjectDataStatus.setBusinessObjectFormatVersion(businessObjectDataEntity.getBusinessObjectFormat().getBusinessObjectFormatVersion()); businessObjectDataStatus.setPartitionValue(businessObjectDataEntity.getPartitionValue()); businessObjectDataStatus.setSubPartitionValues(businessObjectDataHelper.getSubPartitionValues(businessObjectDataEntity)); businessObjectDataStatus.setBusinessObjectDataVersion(businessObjectDataEntity.getVersion()); businessObjectDataStatus.setReason(businessObjectDataEntity.getStatus().getCode()); return businessObjectDataStatus; }
if (!businessObjectDataEntity.getBusinessObjectDataChildren().isEmpty()) for (BusinessObjectDataEntity childBusinessObjectEntity : businessObjectDataEntity.getBusinessObjectDataChildren()) childBusinessObjectEntity.getBusinessObjectDataParents().remove(businessObjectDataEntity); String businessObjectDataChildren = businessObjectDataEntity.getBusinessObjectDataChildren().stream() .map(bData -> String.format("{%s}", businessObjectDataHelper.businessObjectDataEntityAltKeyToString(bData))).collect(Collectors.joining(", ")); businessObjectDataEntity.setBusinessObjectDataChildren(new ArrayList<>()); businessObjectDataDao.save(businessObjectDataEntity); LOGGER.warn(String for (StorageUnitEntity storageUnitEntity : businessObjectDataEntity.getStorageUnits()) .buildS3KeyPrefix(s3KeyPrefixVelocityTemplate, businessObjectDataEntity.getBusinessObjectFormat(), businessObjectDataKey, storageEntity.getName()); if (businessObjectDataEntity.getLatestVersion()) previousVersionBusinessObjectDataEntity.setLatestVersion(true); businessObjectDataDao.saveAndRefresh(previousVersionBusinessObjectDataEntity);
long numberOfS3StorageUnitsAssociatedWithThisBusinessObjectData = businessObjectDataEntity.getStorageUnits().stream() .filter(storageUnitEntity -> storageUnitEntity.getStorage().getStoragePlatform().getName().equals(StoragePlatformEntity.S3)).count(); List<BusinessObjectDataEntity> childrenBusinessObjectDataEntities = businessObjectDataEntity.getBusinessObjectDataChildren(); List<BusinessObjectDataEntity> parentBusinessObjectDataEntities = childBusinessObjectDataEntity.getBusinessObjectDataParents(); parentBusinessObjectDataEntities.remove(businessObjectDataEntity); businessObjectDataDao.saveAndRefresh(childBusinessObjectDataEntity); List<BusinessObjectDataEntity> parentBusinessObjectDataEntities = businessObjectDataEntity.getBusinessObjectDataParents(); List<BusinessObjectDataEntity> childBusinessObjectDataEntities = parentBusinessObjectDataEntity.getBusinessObjectDataChildren(); childBusinessObjectDataEntities.remove(businessObjectDataEntity); businessObjectDataDao.saveAndRefresh(parentBusinessObjectDataEntity); if (businessObjectDataEntity.getLatestVersion()) previousVersionBusinessObjectDataEntity.setLatestVersion(true); businessObjectDataDao.saveAndRefresh(previousVersionBusinessObjectDataEntity);
@Test public void testUpdateBusinessObjectDataAttributesAttributeDeleted() { // Create a business object data attribute entity. BusinessObjectDataAttributeEntity businessObjectDataAttributeEntity = new BusinessObjectDataAttributeEntity(); businessObjectDataAttributeEntity.setName(ATTRIBUTE_NAME); businessObjectDataAttributeEntity.setValue(ATTRIBUTE_VALUE); // Create a business object data entity that contains one attribute entity. BusinessObjectDataEntity businessObjectDataEntity = new BusinessObjectDataEntity(); List<BusinessObjectDataAttributeEntity> businessObjectDataAttributeEntities = new ArrayList<>(); businessObjectDataEntity.setAttributes(businessObjectDataAttributeEntities); businessObjectDataAttributeEntities.add(businessObjectDataAttributeEntity); // Call the method under test. attributeDaoHelper.updateBusinessObjectDataAttributes(businessObjectDataEntity, NO_ATTRIBUTES); // Verify the external calls. verifyNoMoreInteractionsHelper(); // Validate the results. assertEquals(0, CollectionUtils.size(businessObjectDataEntity.getAttributes())); }
velocityContextMap.put("businessObjectDataId", businessObjectDataEntity.getId()); businessObjectFormatHelper.getAttributeDefinitionEntities(businessObjectDataEntity.getBusinessObjectFormat()); if (!attributeDefinitionEntityMap.isEmpty()) for (BusinessObjectDataAttributeEntity attributeEntity : businessObjectDataEntity.getAttributes())
@Test public void testGetBusinessObjectDataUpperCaseParameters() { // Create and persist a business object data entity using lower case values. businessObjectFormatDaoTestHelper.createBusinessObjectFormatEntity(NAMESPACE.toLowerCase(), BDEF_NAME.toLowerCase(), FORMAT_USAGE_CODE.toLowerCase(), FORMAT_FILE_TYPE_CODE.toLowerCase(), FORMAT_VERSION, FORMAT_DESCRIPTION, FORMAT_DOCUMENT_SCHEMA, false, PARTITION_KEY.toLowerCase()); BusinessObjectDataEntity businessObjectDataEntity = businessObjectDataDaoTestHelper .createBusinessObjectDataEntity(NAMESPACE.toLowerCase(), BDEF_NAME.toLowerCase(), FORMAT_USAGE_CODE.toLowerCase(), FORMAT_FILE_TYPE_CODE.toLowerCase(), FORMAT_VERSION, PARTITION_VALUE.toLowerCase(), convertListToLowerCase(SUBPARTITION_VALUES), DATA_VERSION, true, BDATA_STATUS.toLowerCase()); // Retrieve business object data entity using upper case input parameters (except for case-sensitive partition values). // Please note that we do not specify business object data version in order for the business object data status to have an effect. BusinessObjectData resultBusinessObjectData = businessObjectDataService.getBusinessObjectData( new BusinessObjectDataKey(NAMESPACE.toUpperCase(), BDEF_NAME.toUpperCase(), FORMAT_USAGE_CODE.toUpperCase(), FORMAT_FILE_TYPE_CODE.toUpperCase(), FORMAT_VERSION, PARTITION_VALUE.toLowerCase(), convertListToLowerCase(SUBPARTITION_VALUES), NO_DATA_VERSION), PARTITION_KEY.toUpperCase(), BDATA_STATUS.toUpperCase(), NO_INCLUDE_BUSINESS_OBJECT_DATA_STATUS_HISTORY, NO_INCLUDE_STORAGE_UNIT_STATUS_HISTORY); // Validate the returned object. businessObjectDataServiceTestHelper .validateBusinessObjectData(businessObjectDataEntity.getId(), NAMESPACE.toLowerCase(), BDEF_NAME.toLowerCase(), FORMAT_USAGE_CODE.toLowerCase(), FORMAT_FILE_TYPE_CODE.toLowerCase(), FORMAT_VERSION, PARTITION_VALUE.toLowerCase(), convertListToLowerCase(SUBPARTITION_VALUES), DATA_VERSION, true, BDATA_STATUS.toLowerCase(), resultBusinessObjectData); }
new BusinessObjectData(businessObjectDataEntity.getId(), NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, AbstractDaoTest.PARTITION_KEY, PARTITION_VALUE, SUBPARTITION_VALUES, version, businessObjectDataEntity.getLatestVersion(), BData_Status, null, null, null, null, null, null); new BusinessObjectData(businessObjectDataEntity.getId(), NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION_2, AbstractDaoTest.PARTITION_KEY, PARTITION_VALUE, SUBPARTITION_VALUES, version, businessObjectDataEntity.getLatestVersion(), BData_Status, null, null, null, null, null, null);
/** * Gets a list of keys for all existing business object data attributes. * * @param businessObjectDataKey the business object data key * * @return the list of business object data attribute keys */ protected BusinessObjectDataAttributeKeys getBusinessObjectDataAttributesImpl(BusinessObjectDataKey businessObjectDataKey) { // Validate and trim the business object data key. businessObjectDataHelper.validateBusinessObjectDataKey(businessObjectDataKey, true, true); // Retrieve the business object data and ensure it exists. BusinessObjectDataEntity businessObjectDataEntity = businessObjectDataDaoHelper.getBusinessObjectDataEntity(businessObjectDataKey); // Create and populate a list of business object data attribute keys. BusinessObjectDataAttributeKeys businessObjectDataAttributeKeys = new BusinessObjectDataAttributeKeys(); for (BusinessObjectDataAttributeEntity businessObjectDataAttributeEntity : businessObjectDataEntity.getAttributes()) { businessObjectDataAttributeKeys.getBusinessObjectDataAttributeKeys().add(getBusinessObjectDataAttributeKey(businessObjectDataAttributeEntity)); } return businessObjectDataAttributeKeys; }
/** * Update the business object data status. * * @param businessObjectDataEntity the business object data entity * @param status the status */ public void updateBusinessObjectDataStatus(BusinessObjectDataEntity businessObjectDataEntity, String status) { // Retrieve and ensure the status is valid. BusinessObjectDataStatusEntity businessObjectDataStatusEntity = businessObjectDataStatusDaoHelper.getBusinessObjectDataStatusEntity(status); // Save the current status value. String oldStatus = businessObjectDataEntity.getStatus().getCode(); // Update the entity with the new values. businessObjectDataEntity.setStatus(businessObjectDataStatusEntity); // Add an entry to the business object data status history table BusinessObjectDataStatusHistoryEntity businessObjectDataStatusHistoryEntity = new BusinessObjectDataStatusHistoryEntity(); businessObjectDataEntity.getHistoricalStatuses().add(businessObjectDataStatusHistoryEntity); businessObjectDataStatusHistoryEntity.setBusinessObjectData(businessObjectDataEntity); businessObjectDataStatusHistoryEntity.setStatus(businessObjectDataStatusEntity); // Persist the entity. businessObjectDataDao.saveAndRefresh(businessObjectDataEntity); // Sent a business object data status change notification. messageNotificationEventService .processBusinessObjectDataStatusChangeNotificationEvent(businessObjectDataHelper.getBusinessObjectDataKey(businessObjectDataEntity), businessObjectDataStatusEntity.getCode(), oldStatus); }
createStoragePolicySelection = (businessObjectDataEntity.getCreatedOn().compareTo(createdOnThresholdTimestamp) <= 0); if (businessObjectDataEntity.getUpdatedOn().compareTo(updatedOnThresholdTimestamp) <= 0) Date primaryPartitionValue = businessObjectDataHelper.getDateFromString(businessObjectDataEntity.getPartitionValue());
String namespace = businessObjectDataEntity.getBusinessObjectFormat().getBusinessObjectDefinition().getNamespace().getCode(); String bDefName = businessObjectDataEntity.getBusinessObjectFormat().getBusinessObjectDefinition().getName(); String usage = businessObjectDataEntity.getBusinessObjectFormat().getUsage(); String fileTypeCode = businessObjectDataEntity.getBusinessObjectFormat().getFileType().getCode(); int formatVersion = businessObjectDataEntity.getBusinessObjectFormat().getBusinessObjectFormatVersion(); partitionValueRange.setStartPartitionValue(businessObjectDataEntity.getPartitionValue2()); partitionValueRange.setEndPartitionValue(businessObjectDataEntity.getPartitionValue2() + "1"); partitionValueFilter2.setPartitionValueRange(partitionValueRange);
/** * Validate that business object data status is supported by the storage policy feature. * * @param businessObjectDataEntity the business object data entity * @param businessObjectDataKey the business object data key */ private void validateBusinessObjectData(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey) { Assert.isTrue(StoragePolicySelectorServiceImpl.SUPPORTED_BUSINESS_OBJECT_DATA_STATUSES.contains(businessObjectDataEntity.getStatus().getCode()), String .format("Business object data status \"%s\" is not supported by the storage policy feature. Business object data: {%s}", businessObjectDataEntity.getStatus().getCode(), businessObjectDataHelper.businessObjectDataKeyToString(businessObjectDataKey))); }
@Test public void testGetStorageUnitStorageUnitNoExists() { // Create a business object data entity. BusinessObjectDataEntity businessObjectDataEntity = new BusinessObjectDataEntity(); // Mock the external calls. when(storageUnitDao.getStorageUnitsByStoragePlatformAndBusinessObjectData(StoragePlatformEntity.S3, businessObjectDataEntity)) .thenReturn(new ArrayList<>()); when(businessObjectDataHelper.businessObjectDataEntityAltKeyToString(businessObjectDataEntity)).thenReturn(BUSINESS_OBJECT_DATA_KEY_AS_STRING); // Try to call the method under test. try { businessObjectDataInitiateRestoreHelperServiceImpl.getStorageUnit(businessObjectDataEntity); fail(); } catch (IllegalArgumentException e) { assertEquals(String.format("Business object data has no S3 storage unit. Business object data: {%s}", BUSINESS_OBJECT_DATA_KEY_AS_STRING), e.getMessage()); } // Verify the external calls. verify(storageUnitDao).getStorageUnitsByStoragePlatformAndBusinessObjectData(StoragePlatformEntity.S3, businessObjectDataEntity); verify(businessObjectDataHelper).businessObjectDataEntityAltKeyToString(businessObjectDataEntity); verifyNoMoreInteractionsHelper(); }