/** * Gets a storage unit status entity by the code and ensure it exists. * * @param code the storage unit status code (case insensitive) * * @return the storage unit status entity * @throws ObjectNotFoundException if the status entity doesn't exist */ public StorageUnitStatusEntity getStorageUnitStatusEntity(String code) throws ObjectNotFoundException { StorageUnitStatusEntity storageUnitStatusEntity = storageUnitStatusDao.getStorageUnitStatusByCode(code); if (storageUnitStatusEntity == null) { throw new ObjectNotFoundException(String.format("Storage unit status \"%s\" doesn't exist.", code)); } return storageUnitStatusEntity; } }
/** * Gets a storage unit status entity by the code and ensure it exists. * * @param code the storage unit status code (case insensitive) * * @return the storage unit status entity * @throws ObjectNotFoundException if the status entity doesn't exist */ public StorageUnitStatusEntity getStorageUnitStatusEntity(String code) throws ObjectNotFoundException { StorageUnitStatusEntity storageUnitStatusEntity = storageUnitStatusDao.getStorageUnitStatusByCode(code); if (storageUnitStatusEntity == null) { throw new ObjectNotFoundException(String.format("Storage unit status \"%s\" doesn't exist.", code)); } return storageUnitStatusEntity; } }
@Test public void testGetStorageUnitStatusByCode() { // Create database entities required for testing. storageUnitStatusDaoTestHelper.createStorageUnitStatusEntity(STORAGE_UNIT_STATUS, DESCRIPTION, STORAGE_UNIT_STATUS_AVAILABLE_FLAG_SET); storageUnitStatusDaoTestHelper.createStorageUnitStatusEntity(STORAGE_UNIT_STATUS_2, DESCRIPTION_2, NO_STORAGE_UNIT_STATUS_AVAILABLE_FLAG_SET); // Retrieve the relative storage unit status entities and validate the results. assertEquals(STORAGE_UNIT_STATUS, storageUnitStatusDao.getStorageUnitStatusByCode(STORAGE_UNIT_STATUS).getCode()); assertEquals(STORAGE_UNIT_STATUS_2, storageUnitStatusDao.getStorageUnitStatusByCode(STORAGE_UNIT_STATUS_2).getCode()); // Test case insensitivity for the storage unit status code. assertEquals(STORAGE_UNIT_STATUS, storageUnitStatusDao.getStorageUnitStatusByCode(STORAGE_UNIT_STATUS.toUpperCase()).getCode()); assertEquals(STORAGE_UNIT_STATUS, storageUnitStatusDao.getStorageUnitStatusByCode(STORAGE_UNIT_STATUS.toLowerCase()).getCode()); // Confirm negative results when using non-existing storage unit status code. assertNull(storageUnitStatusDao.getStorageUnitStatusByCode("I_DO_NOT_EXIST")); } }
/** * Creates and persists a new storage unit entity. * * @param storageEntity the storage entity * @param businessObjectDataEntity the business object data entity * @param storageUnitStatus the storage unit status * @param directoryPath the storage directory path * * @return the newly created storage unit entity. */ public StorageUnitEntity createStorageUnitEntity(StorageEntity storageEntity, BusinessObjectDataEntity businessObjectDataEntity, String storageUnitStatus, String directoryPath) { // Create a storage unit status entity, if not exists. StorageUnitStatusEntity storageUnitStatusEntity = storageUnitStatusDao.getStorageUnitStatusByCode(storageUnitStatus); if (storageUnitStatusEntity == null) { storageUnitStatusEntity = storageUnitStatusDaoTestHelper.createStorageUnitStatusEntity(storageUnitStatus); } return createStorageUnitEntity(storageEntity, businessObjectDataEntity, storageUnitStatusEntity, directoryPath); }
@Test public void testGenerateBusinessObjectDataDdlIncludeAllRegisteredSubPartitionsSecondSubPartitionValidNonAvailableStorageUnitBdataArchived() { // Create two VALID sub-partitions both with "available" storage units. List<StorageUnitEntity> storageUnitEntities = businessObjectDataServiceTestHelper .createDatabaseEntitiesForBusinessObjectDataDdlTestingTwoPartitionLevels( Arrays.asList(Arrays.asList(PARTITION_VALUE, SUB_PARTITION_VALUE_1), Arrays.asList(PARTITION_VALUE, SUB_PARTITION_VALUE_2))); // Update the second sub-partition storage unit status to ARCHIVED. storageUnitEntities.get(1).setStatus(storageUnitStatusDao.getStorageUnitStatusByCode(StorageUnitStatusEntity.ARCHIVED)); // Try to retrieve business object data DDL with "IncludeAllRegisteredSubPartitions" option enabled. try { businessObjectDataService.generateBusinessObjectDataDdl( new BusinessObjectDataDdlRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FileTypeEntity.TXT_FILE_TYPE, FORMAT_VERSION, Arrays.asList( new PartitionValueFilter(FIRST_PARTITION_COLUMN_NAME, Arrays.asList(PARTITION_VALUE), NO_PARTITION_VALUE_RANGE, NO_LATEST_BEFORE_PARTITION_VALUE, NO_LATEST_AFTER_PARTITION_VALUE)), NO_STANDALONE_PARTITION_VALUE_FILTER, NO_DATA_VERSION, NO_STORAGE_NAMES, STORAGE_NAME, BusinessObjectDataDdlOutputFormatEnum.HIVE_13_DDL, TABLE_NAME, NO_CUSTOM_DDL_NAME, INCLUDE_DROP_TABLE_STATEMENT, INCLUDE_IF_NOT_EXISTS_OPTION, INCLUDE_DROP_PARTITIONS, NO_ALLOW_MISSING_DATA, INCLUDE_ALL_REGISTERED_SUBPARTITIONS, NO_SUPPRESS_SCAN_FOR_UNREGISTERED_SUBPARTITIONS)); fail("Suppose to throw an ObjectNotFoundException when second sub-partition has a non-available storage unit status."); } catch (ObjectNotFoundException e) { assertEquals(String.format("Business object data {namespace: \"%s\", businessObjectDefinitionName: \"%s\", businessObjectFormatUsage: \"%s\", " + "businessObjectFormatFileType: \"%s\", businessObjectFormatVersion: %d, partitionValue: \"%s\", " + "subpartitionValues: \"%s\", businessObjectDataVersion: %d} is not available in \"%s\" storage(s).", NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FileTypeEntity.TXT_FILE_TYPE, FORMAT_VERSION, PARTITION_VALUE, SUB_PARTITION_VALUE_2, DATA_VERSION, STORAGE_NAME), e.getMessage()); } }
@Test public void testGenerateBusinessObjectDataDdlIncludeAllRegisteredSubPartitionsSecondSubPartitionDeletedBdataArchived() { // Create two VALID sub-partitions both with "available" storage units in a non-Glacier storage. List<StorageUnitEntity> storageUnitEntities = businessObjectDataServiceTestHelper .createDatabaseEntitiesForBusinessObjectDataDdlTestingTwoPartitionLevels( Arrays.asList(Arrays.asList(PARTITION_VALUE, SUB_PARTITION_VALUE_1), Arrays.asList(PARTITION_VALUE, SUB_PARTITION_VALUE_2))); // Update the second sub-partition business object data status to DELETED. storageUnitEntities.get(1).getBusinessObjectData() .setStatus(businessObjectDataStatusDao.getBusinessObjectDataStatusByCode(BusinessObjectDataStatusEntity.DELETED)); // Update the second sub-partition storage unit status to ARCHIVED. storageUnitEntities.get(1).setStatus(storageUnitStatusDao.getStorageUnitStatusByCode(StorageUnitStatusEntity.ARCHIVED)); // Retrieve business object data DDL with "IncludeAllRegisteredSubPartitions" option enabled. BusinessObjectDataDdl resultBusinessObjectDataDdl = businessObjectDataService.generateBusinessObjectDataDdl( new BusinessObjectDataDdlRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FileTypeEntity.TXT_FILE_TYPE, FORMAT_VERSION, Arrays.asList( new PartitionValueFilter(FIRST_PARTITION_COLUMN_NAME, Arrays.asList(PARTITION_VALUE), NO_PARTITION_VALUE_RANGE, NO_LATEST_BEFORE_PARTITION_VALUE, NO_LATEST_AFTER_PARTITION_VALUE)), NO_STANDALONE_PARTITION_VALUE_FILTER, NO_DATA_VERSION, NO_STORAGE_NAMES, STORAGE_NAME, BusinessObjectDataDdlOutputFormatEnum.HIVE_13_DDL, TABLE_NAME, NO_CUSTOM_DDL_NAME, INCLUDE_DROP_TABLE_STATEMENT, INCLUDE_IF_NOT_EXISTS_OPTION, INCLUDE_DROP_PARTITIONS, NO_ALLOW_MISSING_DATA, INCLUDE_ALL_REGISTERED_SUBPARTITIONS, NO_SUPPRESS_SCAN_FOR_UNREGISTERED_SUBPARTITIONS)); // Validate the response object. Both sub-partitions should. Only the first sub-partition should be present in the generated DDL. assertEquals(new BusinessObjectDataDdl(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FileTypeEntity.TXT_FILE_TYPE, FORMAT_VERSION, Arrays.asList( new PartitionValueFilter(FIRST_PARTITION_COLUMN_NAME, Arrays.asList(PARTITION_VALUE), NO_PARTITION_VALUE_RANGE, NO_LATEST_BEFORE_PARTITION_VALUE, NO_LATEST_AFTER_PARTITION_VALUE)), NO_STANDALONE_PARTITION_VALUE_FILTER, NO_DATA_VERSION, NO_STORAGE_NAMES, STORAGE_NAME, BusinessObjectDataDdlOutputFormatEnum.HIVE_13_DDL, TABLE_NAME, NO_CUSTOM_DDL_NAME, businessObjectDataServiceTestHelper .getExpectedBusinessObjectDataDdlTwoPartitionLevels(Arrays.asList(Arrays.asList(PARTITION_VALUE, SUB_PARTITION_VALUE_1)))), resultBusinessObjectDataDdl); }
@Test public void testGenerateBusinessObjectDataDdlIncludeAllRegisteredSubPartitionsSecondSubPartitionValidNonAvailableStorageUnit() { // Create two VALID sub-partitions both with "available" storage units in a non-Glacier storage. List<StorageUnitEntity> storageUnitEntities = businessObjectDataServiceTestHelper .createDatabaseEntitiesForBusinessObjectDataDdlTestingTwoPartitionLevels( Arrays.asList(Arrays.asList(PARTITION_VALUE, SUB_PARTITION_VALUE_1), Arrays.asList(PARTITION_VALUE, SUB_PARTITION_VALUE_2))); // Update the second sub-partition storage unit status to DISABLED. storageUnitEntities.get(1).setStatus(storageUnitStatusDao.getStorageUnitStatusByCode(StorageUnitStatusEntity.DISABLED)); // Try to retrieve business object data DDL with "IncludeAllRegisteredSubPartitions" option enabled. try { businessObjectDataService.generateBusinessObjectDataDdl( new BusinessObjectDataDdlRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FileTypeEntity.TXT_FILE_TYPE, FORMAT_VERSION, Arrays.asList( new PartitionValueFilter(FIRST_PARTITION_COLUMN_NAME, Arrays.asList(PARTITION_VALUE), NO_PARTITION_VALUE_RANGE, NO_LATEST_BEFORE_PARTITION_VALUE, NO_LATEST_AFTER_PARTITION_VALUE)), NO_STANDALONE_PARTITION_VALUE_FILTER, NO_DATA_VERSION, NO_STORAGE_NAMES, STORAGE_NAME, BusinessObjectDataDdlOutputFormatEnum.HIVE_13_DDL, TABLE_NAME, NO_CUSTOM_DDL_NAME, INCLUDE_DROP_TABLE_STATEMENT, INCLUDE_IF_NOT_EXISTS_OPTION, INCLUDE_DROP_PARTITIONS, NO_ALLOW_MISSING_DATA, INCLUDE_ALL_REGISTERED_SUBPARTITIONS, NO_SUPPRESS_SCAN_FOR_UNREGISTERED_SUBPARTITIONS)); fail("Suppose to throw an ObjectNotFoundException when second sub-partition has a non-available storage unit status."); } catch (ObjectNotFoundException e) { assertEquals(String.format("Business object data {namespace: \"%s\", businessObjectDefinitionName: \"%s\", businessObjectFormatUsage: \"%s\", " + "businessObjectFormatFileType: \"%s\", businessObjectFormatVersion: %d, partitionValue: \"%s\", " + "subpartitionValues: \"%s\", businessObjectDataVersion: %d} is not available in \"%s\" storage(s).", NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FileTypeEntity.TXT_FILE_TYPE, FORMAT_VERSION, PARTITION_VALUE, SUB_PARTITION_VALUE_2, DATA_VERSION, STORAGE_NAME), e.getMessage()); } }
StorageUnitStatusEntity storageUnitStatusEntity = storageUnitStatusDao.getStorageUnitStatusByCode(StorageUnitStatusEntity.ENABLED);
StorageUnitStatusEntity storageUnitStatusEntity = storageUnitStatusDao.getStorageUnitStatusByCode(StorageUnitStatusEntity.ENABLED);
storageUnitEntities.get(1).setStatus(storageUnitStatusDao.getStorageUnitStatusByCode(StorageUnitStatusEntity.ARCHIVED));
StorageUnitStatusEntity storageUnitStatusEntity = storageUnitStatusDao.getStorageUnitStatusByCode(StorageUnitStatusEntity.ENABLED);
StorageUnitStatusEntity storageUnitStatusEntity = storageUnitStatusDao.getStorageUnitStatusByCode(storageUnitStatus); if (storageUnitStatusEntity == null)
if (StringUtils.isNotBlank(newStorageUnitStatus)) newStorageUnitStatusEntity = storageUnitStatusDao.getStorageUnitStatusByCode(newStorageUnitStatus); if (newStorageUnitStatusEntity == null) if (StringUtils.isNotBlank(oldStorageUnitStatus)) oldStorageUnitStatusEntity = storageUnitStatusDao.getStorageUnitStatusByCode(oldStorageUnitStatus); if (oldStorageUnitStatusEntity == null)
storageUnitEntity.setStorageFiles(storageFiles); storageUnitEntity.setBusinessObjectData(businessObjectDataEntity); storageUnitEntity.setStatus(storageUnitStatusDao.getStorageUnitStatusByCode(StorageUnitStatusEntity.ENABLED)); storageUnits.add(storageUnitEntity); businessObjectDataEntity.setStorageUnits(storageUnits);