test_class.declarator: businessObjectDataDaoHelper
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private BusinessObjectDataDaoHelper businessObjectDataDaoHelper;
test_class.type: BusinessObjectDataDaoHelper
test_class.var_name: businessObjectDataDaoHelper
test_class.declarator: businessObjectDataHelper
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private BusinessObjectDataHelper businessObjectDataHelper;
test_class.type: BusinessObjectDataHelper
test_class.var_name: businessObjectDataHelper
test_class.declarator: businessObjectDataInitiateDestroyHelperServiceImpl
test_class.modifier: @InjectMocks
      private
test_class.original_string: @InjectMocks
      private BusinessObjectDataInitiateDestroyHelperServiceImpl businessObjectDataInitiateDestroyHelperServiceImpl;
test_class.type: BusinessObjectDataInitiateDestroyHelperServiceImpl
test_class.var_name: businessObjectDataInitiateDestroyHelperServiceImpl
test_class.declarator: businessObjectFormatDao
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private BusinessObjectFormatDao businessObjectFormatDao;
test_class.type: BusinessObjectFormatDao
test_class.var_name: businessObjectFormatDao
test_class.declarator: businessObjectFormatHelper
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private BusinessObjectFormatHelper businessObjectFormatHelper;
test_class.type: BusinessObjectFormatHelper
test_class.var_name: businessObjectFormatHelper
test_class.declarator: configurationHelper
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private ConfigurationHelper configurationHelper;
test_class.type: ConfigurationHelper
test_class.var_name: configurationHelper
test_class.declarator: herdDao
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private HerdDao herdDao;
test_class.type: HerdDao
test_class.var_name: herdDao
test_class.declarator: herdStringHelper
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private HerdStringHelper herdStringHelper;
test_class.type: HerdStringHelper
test_class.var_name: herdStringHelper
test_class.declarator: s3KeyPrefixHelper
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private S3KeyPrefixHelper s3KeyPrefixHelper;
test_class.type: S3KeyPrefixHelper
test_class.var_name: s3KeyPrefixHelper
test_class.declarator: s3Service
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private S3Service s3Service;
test_class.type: S3Service
test_class.var_name: s3Service
test_class.declarator: storageFileHelper
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private StorageFileHelper storageFileHelper;
test_class.type: StorageFileHelper
test_class.var_name: storageFileHelper
test_class.declarator: storageHelper
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private StorageHelper storageHelper;
test_class.type: StorageHelper
test_class.var_name: storageHelper
test_class.declarator: storageUnitDao
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private StorageUnitDao storageUnitDao;
test_class.type: StorageUnitDao
test_class.var_name: storageUnitDao
test_class.declarator: storageUnitDaoHelper
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private StorageUnitDaoHelper storageUnitDaoHelper;
test_class.type: StorageUnitDaoHelper
test_class.var_name: storageUnitDaoHelper
test_class.file: herd-code/herd-service/src/test/java/org/finra/herd/service/impl/BusinessObjectDataInitiateDestroyHelperServiceImplTest.java
test_class.identifier: BusinessObjectDataInitiateDestroyHelperServiceImplTest
test_class.superclass: extends AbstractServiceTest
test_case.body: @Test
      public void testValidateBusinessObjectDataNoRetentionInformation()
      {
          // Create a version-less business object format key.
          BusinessObjectFormatKey businessObjectFormatKey =
              new BusinessObjectFormatKey(BDEF_NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, NO_FORMAT_VERSION);
  
          // Create a business object data key.
          BusinessObjectDataKey businessObjectDataKey =
              new BusinessObjectDataKey(BDEF_NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, INITIAL_FORMAT_VERSION, PARTITION_VALUE,
                  NO_SUBPARTITION_VALUES, DATA_VERSION);
  
          // Create a retention type entity.
          RetentionTypeEntity retentionTypeEntity = new RetentionTypeEntity();
  
          // Create a business object format entity which is not the latest format version.
          BusinessObjectFormatEntity businessObjectFormatEntity = new BusinessObjectFormatEntity();
          businessObjectFormatEntity.setBusinessObjectFormatVersion(INITIAL_FORMAT_VERSION);
          businessObjectFormatEntity.setLatestVersion(false);
  
          // Create a latest version business object format entity with missing retention type.
          BusinessObjectFormatEntity latestVersionBusinessObjectFormatEntity = new BusinessObjectFormatEntity();
          latestVersionBusinessObjectFormatEntity.setBusinessObjectFormatVersion(INITIAL_FORMAT_VERSION);
          latestVersionBusinessObjectFormatEntity.setLatestVersion(true);
          latestVersionBusinessObjectFormatEntity.setRetentionType(null);
          latestVersionBusinessObjectFormatEntity.setRetentionPeriodInDays(RETENTION_PERIOD_DAYS);
  
          // Create a business object data entity.
          BusinessObjectDataEntity businessObjectDataEntity = new BusinessObjectDataEntity();
          businessObjectDataEntity.setBusinessObjectFormat(businessObjectFormatEntity);
          businessObjectDataEntity.setPartitionValue(PARTITION_VALUE);
  
          // Create a current timestamp.
          Timestamp currentTimestamp = new Timestamp(new Date().getTime());
  
          // Mock the external calls.
          when(businessObjectFormatDao.getBusinessObjectFormatByAltKey(businessObjectFormatKey)).thenReturn(latestVersionBusinessObjectFormatEntity);
          when(businessObjectFormatHelper.businessObjectFormatKeyToString(businessObjectFormatKey)).thenReturn(BUSINESS_OBJECT_FORMAT_KEY_AS_STRING);
          when(herdDao.getCurrentTimestamp()).thenReturn(currentTimestamp);
  
          // Try to call the method under test.
          try
          {
              businessObjectDataInitiateDestroyHelperServiceImpl.validateBusinessObjectData(businessObjectDataEntity, businessObjectDataKey);
              fail();
          }
          catch (IllegalArgumentException e)
          {
              assertEquals(String.format("Retention information is not configured for the business object format. Business object format: {%s}",
                  BUSINESS_OBJECT_FORMAT_KEY_AS_STRING), e.getMessage());
          }
  
          // Update the latest business object format version to have retention type - PARTITION_VALUE specified but without a retention period.
          retentionTypeEntity.setCode(RetentionTypeEntity.PARTITION_VALUE);
          latestVersionBusinessObjectFormatEntity.setRetentionType(retentionTypeEntity);
          latestVersionBusinessObjectFormatEntity.setRetentionPeriodInDays(null);
  
          // Try to call the method under test.
          try
          {
              businessObjectDataInitiateDestroyHelperServiceImpl.validateBusinessObjectData(businessObjectDataEntity, businessObjectDataKey);
              fail();
          }
          catch (IllegalArgumentException e)
          {
              assertEquals(String.format("Retention period in days must be specified for %s retention type.", RetentionTypeEntity.PARTITION_VALUE),
                  e.getMessage());
          }
  
          // Update the latest business object format version to have retention type - BDATA_RETENTION_DATE specified but with a retention period.
          // Retention period in days value must only be specified for PARTITION_VALUE retention type.
          retentionTypeEntity.setCode(RetentionTypeEntity.BDATA_RETENTION_DATE);
          latestVersionBusinessObjectFormatEntity.setRetentionType(retentionTypeEntity);
          latestVersionBusinessObjectFormatEntity.setRetentionPeriodInDays(RETENTION_PERIOD_DAYS);
  
          // Try to call the method under test.
          try
          {
              businessObjectDataInitiateDestroyHelperServiceImpl.validateBusinessObjectData(businessObjectDataEntity, businessObjectDataKey);
              fail();
          }
          catch (IllegalArgumentException e)
          {
              assertEquals(String.format("A retention period in days cannot be specified for %s retention type.", RetentionTypeEntity.BDATA_RETENTION_DATE),
                  e.getMessage());
          }
  
          // Verify the external calls.
          verify(businessObjectFormatDao, times(3)).getBusinessObjectFormatByAltKey(businessObjectFormatKey);
          verify(businessObjectFormatHelper, times(1)).businessObjectFormatKeyToString(businessObjectFormatKey);
          verify(herdDao, times(3)).getCurrentTimestamp();
          verifyNoMoreInteractionsHelper();
      }
test_case.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImplTest.testValidateBusinessObjectDataNoRetentionInformation()
test_case.full_signature: @Test public void testValidateBusinessObjectDataNoRetentionInformation()
test_case.identifier: testValidateBusinessObjectDataNoRetentionInformation
test_case.invocations: setBusinessObjectFormatVersion setLatestVersion setBusinessObjectFormatVersion setLatestVersion setRetentionType setRetentionPeriodInDays setBusinessObjectFormat setPartitionValue getTime thenReturn when getBusinessObjectFormatByAltKey thenReturn when businessObjectFormatKeyToString thenReturn when getCurrentTimestamp validateBusinessObjectData fail assertEquals format getMessage setCode setRetentionType setRetentionPeriodInDays validateBusinessObjectData fail assertEquals format getMessage setCode setRetentionType setRetentionPeriodInDays validateBusinessObjectData fail assertEquals format getMessage getBusinessObjectFormatByAltKey verify times businessObjectFormatKeyToString verify times getCurrentTimestamp verify times verifyNoMoreInteractionsHelper
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testValidateBusinessObjectDataNoRetentionInformation()
focal_class.declarator: SUPPORTED_STORAGE_UNIT_STATUSES = Collections.unmodifiableList(Arrays
          .asList(StorageUnitStatusEntity.ENABLED, StorageUnitStatusEntity.ARCHIVED, StorageUnitStatusEntity.RESTORED, StorageUnitStatusEntity.DISABLING,
              StorageUnitStatusEntity.DISABLED))
focal_class.modifier: private static final
focal_class.original_string: private static final List<String> SUPPORTED_STORAGE_UNIT_STATUSES = Collections.unmodifiableList(Arrays
          .asList(StorageUnitStatusEntity.ENABLED, StorageUnitStatusEntity.ARCHIVED, StorageUnitStatusEntity.RESTORED, StorageUnitStatusEntity.DISABLING,
              StorageUnitStatusEntity.DISABLED));
focal_class.type: List<String>
focal_class.var_name: SUPPORTED_STORAGE_UNIT_STATUSES
focal_class.declarator: businessObjectDataDaoHelper
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private BusinessObjectDataDaoHelper businessObjectDataDaoHelper;
focal_class.type: BusinessObjectDataDaoHelper
focal_class.var_name: businessObjectDataDaoHelper
focal_class.declarator: businessObjectDataHelper
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private BusinessObjectDataHelper businessObjectDataHelper;
focal_class.type: BusinessObjectDataHelper
focal_class.var_name: businessObjectDataHelper
focal_class.declarator: businessObjectFormatDao
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private BusinessObjectFormatDao businessObjectFormatDao;
focal_class.type: BusinessObjectFormatDao
focal_class.var_name: businessObjectFormatDao
focal_class.declarator: businessObjectFormatHelper
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private BusinessObjectFormatHelper businessObjectFormatHelper;
focal_class.type: BusinessObjectFormatHelper
focal_class.var_name: businessObjectFormatHelper
focal_class.declarator: configurationHelper
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private ConfigurationHelper configurationHelper;
focal_class.type: ConfigurationHelper
focal_class.var_name: configurationHelper
focal_class.declarator: herdDao
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private HerdDao herdDao;
focal_class.type: HerdDao
focal_class.var_name: herdDao
focal_class.declarator: herdStringHelper
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private HerdStringHelper herdStringHelper;
focal_class.type: HerdStringHelper
focal_class.var_name: herdStringHelper
focal_class.declarator: s3KeyPrefixHelper
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private S3KeyPrefixHelper s3KeyPrefixHelper;
focal_class.type: S3KeyPrefixHelper
focal_class.var_name: s3KeyPrefixHelper
focal_class.declarator: s3Service
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private S3Service s3Service;
focal_class.type: S3Service
focal_class.var_name: s3Service
focal_class.declarator: storageFileHelper
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private StorageFileHelper storageFileHelper;
focal_class.type: StorageFileHelper
focal_class.var_name: storageFileHelper
focal_class.declarator: storageHelper
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private StorageHelper storageHelper;
focal_class.type: StorageHelper
focal_class.var_name: storageHelper
focal_class.declarator: storageUnitDao
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private StorageUnitDao storageUnitDao;
focal_class.type: StorageUnitDao
focal_class.var_name: storageUnitDao
focal_class.declarator: storageUnitDaoHelper
focal_class.modifier: @Autowired
      private
focal_class.original_string: @Autowired
      private StorageUnitDaoHelper storageUnitDaoHelper;
focal_class.type: StorageUnitDaoHelper
focal_class.var_name: storageUnitDaoHelper
focal_class.file: herd-code/herd-service/src/main/java/org/finra/herd/service/impl/BusinessObjectDataInitiateDestroyHelperServiceImpl.java
focal_class.identifier: BusinessObjectDataInitiateDestroyHelperServiceImpl
focal_class.interfaces: implements BusinessObjectDataInitiateDestroyHelperService
focal_class.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.executeInitiateDestroyAfterStep(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.full_signature: @PublishNotificationMessages @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public BusinessObjectData executeInitiateDestroyAfterStep(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.identifier: executeInitiateDestroyAfterStep
focal_class.modifiers: @PublishNotificationMessages @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public
focal_class.parameters: (BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.return: BusinessObjectData
focal_class.signature: BusinessObjectData executeInitiateDestroyAfterStep(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.executeS3SpecificSteps(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.full_signature: @Override @Transactional(propagation = Propagation.NOT_SUPPORTED) public void executeS3SpecificSteps(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.identifier: executeS3SpecificSteps
focal_class.modifiers: @Override @Transactional(propagation = Propagation.NOT_SUPPORTED) public
focal_class.parameters: (BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.return: void
focal_class.signature: void executeS3SpecificSteps(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.prepareToInitiateDestroy(BusinessObjectDataDestroyDto businessObjectDataDestroyDto, BusinessObjectDataKey businessObjectDataKey)
focal_class.full_signature: @PublishNotificationMessages @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public void prepareToInitiateDestroy(BusinessObjectDataDestroyDto businessObjectDataDestroyDto, BusinessObjectDataKey businessObjectDataKey)
focal_class.identifier: prepareToInitiateDestroy
focal_class.modifiers: @PublishNotificationMessages @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public
focal_class.parameters: (BusinessObjectDataDestroyDto businessObjectDataDestroyDto, BusinessObjectDataKey businessObjectDataKey)
focal_class.return: void
focal_class.signature: void prepareToInitiateDestroy(BusinessObjectDataDestroyDto businessObjectDataDestroyDto, BusinessObjectDataKey businessObjectDataKey)
focal_class.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.executeInitiateDestroyAfterStepImpl(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.full_signature:  BusinessObjectData executeInitiateDestroyAfterStepImpl(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.identifier: executeInitiateDestroyAfterStepImpl
focal_class.parameters: (BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.return: BusinessObjectData
focal_class.signature: BusinessObjectData executeInitiateDestroyAfterStepImpl(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.executeS3SpecificStepsImpl(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.full_signature:  void executeS3SpecificStepsImpl(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.identifier: executeS3SpecificStepsImpl
focal_class.parameters: (BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.return: void
focal_class.signature: void executeS3SpecificStepsImpl(BusinessObjectDataDestroyDto businessObjectDataDestroyDto)
focal_class.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.getAndValidateFinalDestroyInDays()
focal_class.full_signature:  int getAndValidateFinalDestroyInDays()
focal_class.identifier: getAndValidateFinalDestroyInDays
focal_class.parameters: ()
focal_class.return: int
focal_class.signature: int getAndValidateFinalDestroyInDays()
focal_class.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.getAndValidateStorageUnit(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_class.full_signature:  StorageUnitEntity getAndValidateStorageUnit(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_class.identifier: getAndValidateStorageUnit
focal_class.parameters: (BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_class.return: StorageUnitEntity
focal_class.signature: StorageUnitEntity getAndValidateStorageUnit(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_class.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.prepareToInitiateDestroyImpl(BusinessObjectDataDestroyDto businessObjectDataDestroyDto, BusinessObjectDataKey businessObjectDataKey)
focal_class.full_signature:  void prepareToInitiateDestroyImpl(BusinessObjectDataDestroyDto businessObjectDataDestroyDto, BusinessObjectDataKey businessObjectDataKey)
focal_class.identifier: prepareToInitiateDestroyImpl
focal_class.parameters: (BusinessObjectDataDestroyDto businessObjectDataDestroyDto, BusinessObjectDataKey businessObjectDataKey)
focal_class.return: void
focal_class.signature: void prepareToInitiateDestroyImpl(BusinessObjectDataDestroyDto businessObjectDataDestroyDto, BusinessObjectDataKey businessObjectDataKey)
focal_class.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.validateBusinessObjectData(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_class.full_signature:  void validateBusinessObjectData(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_class.identifier: validateBusinessObjectData
focal_class.parameters: (BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_class.return: void
focal_class.signature: void validateBusinessObjectData(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_class.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.validateStorage(StorageEntity storageEntity)
focal_class.full_signature:  void validateStorage(StorageEntity storageEntity)
focal_class.identifier: validateStorage
focal_class.parameters: (StorageEntity storageEntity)
focal_class.return: void
focal_class.signature: void validateStorage(StorageEntity storageEntity)
focal_method.body: void validateBusinessObjectData(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
      {
          // Get business object format for this business object data.
          BusinessObjectFormatEntity businessObjectFormatEntity = businessObjectDataEntity.getBusinessObjectFormat();
  
          // Create a version-less key for the business object format.
          BusinessObjectFormatKey businessObjectFormatKey =
              new BusinessObjectFormatKey(businessObjectDataKey.getNamespace(), businessObjectDataKey.getBusinessObjectDefinitionName(),
                  businessObjectDataKey.getBusinessObjectFormatUsage(), businessObjectDataKey.getBusinessObjectFormatFileType(), null);
  
          // Get the latest version of the format to retrieve retention information.
          BusinessObjectFormatEntity latestVersionBusinessObjectFormatEntity = businessObjectFormatEntity.getLatestVersion() ? businessObjectFormatEntity :
              businessObjectFormatDao.getBusinessObjectFormatByAltKey(businessObjectFormatKey);
  
          // Get retention information.
          String retentionType =
              latestVersionBusinessObjectFormatEntity.getRetentionType() != null ? latestVersionBusinessObjectFormatEntity.getRetentionType().getCode() : null;
          Integer retentionPeriodInDays = latestVersionBusinessObjectFormatEntity.getRetentionPeriodInDays();
  
          // Get the current timestamp from the database.
          Timestamp currentTimestamp = herdDao.getCurrentTimestamp();
  
          // Validate that retention information is specified for this business object format.
          if (retentionType != null)
          {
              switch (retentionType)
              {
                  case RetentionTypeEntity.PARTITION_VALUE:
                      Assert.notNull(retentionPeriodInDays,
                          String.format("Retention period in days must be specified for %s retention type.", RetentionTypeEntity.PARTITION_VALUE));
                      Assert.isTrue(retentionPeriodInDays > 0,
                          String.format("A positive retention period in days must be specified for %s retention type.", RetentionTypeEntity.PARTITION_VALUE));
  
                      // Try to convert business object data primary partition value to a timestamp.
                      // If conversion is not successful, the method returns a null value.
                      Date primaryPartitionValue = businessObjectDataHelper.getDateFromString(businessObjectDataEntity.getPartitionValue());
  
                      // If primary partition values is not a date, this business object data is not supported by the business object data destroy feature.
                      if (primaryPartitionValue == null)
                      {
                          throw new IllegalArgumentException(String
                              .format("Primary partition value \"%s\" cannot get converted to a valid date. Business object data: {%s}",
                                  businessObjectDataEntity.getPartitionValue(), businessObjectDataHelper.businessObjectDataKeyToString(businessObjectDataKey)));
                      }
  
                      // Compute the relative primary partition value threshold date based on the current timestamp and retention period value.
                      Date primaryPartitionValueThreshold = new Date(HerdDateUtils.addDays(currentTimestamp, -retentionPeriodInDays).getTime());
  
                      // Validate that this business object data has it's primary partition value before or equal to the threshold date.
                      if (primaryPartitionValue.compareTo(primaryPartitionValueThreshold) > 0)
                      {
                          throw new IllegalArgumentException(String.format(
                              "Business object data fails retention threshold check for retention type \"%s\" with retention period of %d days. " +
                                  "Business object data: {%s}", retentionType, retentionPeriodInDays,
                              businessObjectDataHelper.businessObjectDataKeyToString(businessObjectDataKey)));
                      }
                      break;
                  case RetentionTypeEntity.BDATA_RETENTION_DATE:
                      // Retention period in days value must only be specified for PARTITION_VALUE retention type.
                      Assert.isNull(retentionPeriodInDays, String.format("A retention period in days cannot be specified for %s retention type.", retentionType));
  
                      // Validate that the retention information is specified for business object data with retention type as BDATA_RETENTION_DATE.
                      Assert.notNull(businessObjectDataEntity.getRetentionExpiration(), String
                          .format("Retention information with retention type %s must be specified for the Business Object Data: {%s}", retentionType,
                              businessObjectDataHelper.businessObjectDataKeyToString(businessObjectDataKey)));
  
                      // Validate that the business object data retention expiration date is in the past.
                      if (!(businessObjectDataEntity.getRetentionExpiration().before(currentTimestamp)))
                      {
                          throw new IllegalArgumentException(String.format(
                              "Business object data fails retention threshold check for retention type \"%s\" with retention expiration date %s. " +
                                  "Business object data: {%s}", retentionType, businessObjectDataEntity.getRetentionExpiration(),
                              businessObjectDataHelper.businessObjectDataKeyToString(businessObjectDataKey)));
                      }
                      break;
                  default:
                      throw new IllegalArgumentException(String
                          .format("Retention type \"%s\" is not supported by the business object data destroy feature. Business object format: {%s}",
                              retentionType, businessObjectFormatHelper.businessObjectFormatKeyToString(businessObjectFormatKey)));
              }
          }
          else
          {
              throw new IllegalArgumentException(String
                  .format("Retention information is not configured for the business object format. Business object format: {%s}",
                      businessObjectFormatHelper.businessObjectFormatKeyToString(businessObjectFormatKey)));
          }
      }
focal_method.class_method_signature: BusinessObjectDataInitiateDestroyHelperServiceImpl.validateBusinessObjectData(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_method.full_signature:  void validateBusinessObjectData(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_method.identifier: validateBusinessObjectData
focal_method.invocations: getBusinessObjectFormat getNamespace getBusinessObjectDefinitionName getBusinessObjectFormatUsage getBusinessObjectFormatFileType getLatestVersion getBusinessObjectFormatByAltKey getRetentionType getCode getRetentionType getRetentionPeriodInDays getCurrentTimestamp notNull format isTrue format getDateFromString getPartitionValue format getPartitionValue businessObjectDataKeyToString getTime addDays compareTo format businessObjectDataKeyToString isNull format notNull getRetentionExpiration format businessObjectDataKeyToString before getRetentionExpiration format getRetentionExpiration businessObjectDataKeyToString format businessObjectFormatKeyToString format businessObjectFormatKeyToString
focal_method.parameters: (BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)
focal_method.return: void
focal_method.signature: void validateBusinessObjectData(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey)