List of usage examples for org.apache.commons.collections4 CollectionUtils isEmpty
public static boolean isEmpty(final Collection<?> coll)
From source file:org.finra.herd.service.impl.BusinessObjectDataInitiateDestroyHelperServiceImpl.java
/** * Retrieves and validates storage unit for the specified business object data. The method makes sure that there is one and only one S3 storage unit. * * @param businessObjectDataEntity the business object data entity * @param businessObjectDataKey the business object data key * * @return the storage unit entity//from ww w.j av a2 s .com */ StorageUnitEntity getAndValidateStorageUnit(BusinessObjectDataEntity businessObjectDataEntity, BusinessObjectDataKey businessObjectDataKey) { // Retrieve all S3 storage units for this business object data. List<StorageUnitEntity> s3StorageUnitEntities = storageUnitDao .getStorageUnitsByStoragePlatformAndBusinessObjectData(StoragePlatformEntity.S3, businessObjectDataEntity); // Validate that business object data has at least one S3 storage unit. if (CollectionUtils.isEmpty(s3StorageUnitEntities)) { throw new IllegalArgumentException( String.format("Business object data has no S3 storage unit. Business object data: {%s}", businessObjectDataHelper.businessObjectDataKeyToString(businessObjectDataKey))); } // Validate that this business object data has no multiple S3 storage units. if (CollectionUtils.size(s3StorageUnitEntities) > 1) { throw new IllegalArgumentException(String.format( "Business object data has multiple (%s) %s storage units. Business object data: {%s}", s3StorageUnitEntities.size(), StoragePlatformEntity.S3, businessObjectDataHelper.businessObjectDataKeyToString(businessObjectDataKey))); } // Get the S3 storage unit. StorageUnitEntity storageUnitEntity = s3StorageUnitEntities.get(0); // Get the storage unit status code. String storageUnitStatus = storageUnitEntity.getStatus().getCode(); // Validate storage unit status. if (!BusinessObjectDataInitiateDestroyHelperServiceImpl.SUPPORTED_STORAGE_UNIT_STATUSES .contains(storageUnitStatus)) { throw new IllegalArgumentException(String.format( "Storage unit status \"%s\" is not supported by the business object data destroy feature. Storage: {%s}, business object data: {%s}", storageUnitStatus, storageUnitEntity.getStorage().getName(), businessObjectDataHelper.businessObjectDataKeyToString(businessObjectDataKey))); } return storageUnitEntity; }
From source file:org.finra.herd.service.impl.BusinessObjectDataInitiateRestoreHelperServiceImpl.java
/** * Retrieves storage unit for the business object data. The method validates that there one and only one storage unit for this business object data in * "ARCHIVED" state./*from w w w . j a v a 2 s . c o m*/ * * @param businessObjectDataEntity the business object data entity * * @return the archived storage unit entity */ protected StorageUnitEntity getStorageUnit(BusinessObjectDataEntity businessObjectDataEntity) { // Retrieve all S3 storage units for this business object data. List<StorageUnitEntity> s3StorageUnitEntities = storageUnitDao .getStorageUnitsByStoragePlatformAndBusinessObjectData(StoragePlatformEntity.S3, businessObjectDataEntity); // Validate that business object data has at least one S3 storage unit. if (CollectionUtils.isEmpty(s3StorageUnitEntities)) { throw new IllegalArgumentException(String.format( "Business object data has no S3 storage unit. Business object data: {%s}", businessObjectDataHelper.businessObjectDataEntityAltKeyToString(businessObjectDataEntity))); } // Validate that this business object data has no multiple S3 storage units. if (CollectionUtils.size(s3StorageUnitEntities) > 1) { throw new IllegalArgumentException(String.format( "Business object data has multiple (%s) %s storage units. Business object data: {%s}", s3StorageUnitEntities.size(), StoragePlatformEntity.S3, businessObjectDataHelper.businessObjectDataEntityAltKeyToString(businessObjectDataEntity))); } // Get the S3 storage unit. StorageUnitEntity storageUnitEntity = s3StorageUnitEntities.get(0); // Get the storage unit status code. String storageUnitStatus = storageUnitEntity.getStatus().getCode(); // Validate that this business object data has its S3 storage unit in "ARCHIVED" state. if (!StorageUnitStatusEntity.ARCHIVED.equals(storageUnitStatus)) { // Get the storage name. String storageName = storageUnitEntity.getStorage().getName(); // Fail with a custom error message if the S3 storage unit is already enabled. if (StorageUnitStatusEntity.ENABLED.equals(storageUnitStatus)) { throw new IllegalArgumentException(String.format( "Business object data is already available in \"%s\" S3 storage. Business object data: {%s}", storageName, businessObjectDataHelper.businessObjectDataEntityAltKeyToString( storageUnitEntity.getBusinessObjectData()))); } // Fail with a custom error message if this business object data is already marked as being restored. else if (StorageUnitStatusEntity.RESTORING.equals(storageUnitStatus)) { throw new IllegalArgumentException(String.format( "Business object data is already being restored in \"%s\" S3 storage. Business object data: {%s}", storageName, businessObjectDataHelper.businessObjectDataEntityAltKeyToString( storageUnitEntity.getBusinessObjectData()))); } // Else, fail and report the actual S3 storage unit status. else { throw new IllegalArgumentException(String.format("Business object data is not archived. " + "S3 storage unit in \"%s\" storage must have \"%s\" status, but it actually has \"%s\" status. Business object data: {%s}", storageName, StorageUnitStatusEntity.ARCHIVED, storageUnitStatus, businessObjectDataHelper.businessObjectDataEntityAltKeyToString( storageUnitEntity.getBusinessObjectData()))); } } return storageUnitEntity; }
From source file:org.finra.herd.service.impl.BusinessObjectDataServiceImpl.java
/** * Retrieves the DDL to initialize the specified type of the database system to perform queries for a range of requested business object data in the * specified storage.//from w w w . ja v a 2s .c o m * * @param request the business object data DDL request * @param skipRequestValidation specifies whether to skip the request validation and trimming * * @return the business object data DDL information */ BusinessObjectDataDdl generateBusinessObjectDataDdlImpl(BusinessObjectDataDdlRequest request, boolean skipRequestValidation) { // Perform the validation. if (!skipRequestValidation) { validateBusinessObjectDataDdlRequest(request); } // Get the business object format entity for the specified parameters and make sure it exists. // Please note that when format version is not specified, we should get back the latest format version. BusinessObjectFormatEntity businessObjectFormatEntity = businessObjectFormatDaoHelper .getBusinessObjectFormatEntity(new BusinessObjectFormatKey(request.getNamespace(), request.getBusinessObjectDefinitionName(), request.getBusinessObjectFormatUsage(), request.getBusinessObjectFormatFileType(), request.getBusinessObjectFormatVersion())); // Validate that format has schema information. Assert.notEmpty(businessObjectFormatEntity.getSchemaColumns(), String.format( "Business object format with namespace \"%s\", business object definition name \"%s\", format usage \"%s\", format file type \"%s\"," + " and format version \"%s\" doesn't have schema information.", businessObjectFormatEntity.getBusinessObjectDefinition().getNamespace().getCode(), businessObjectFormatEntity.getBusinessObjectDefinition().getName(), businessObjectFormatEntity.getUsage(), businessObjectFormatEntity.getFileType().getCode(), businessObjectFormatEntity.getBusinessObjectFormatVersion())); // If it was specified, retrieve the custom DDL and ensure it exists. CustomDdlEntity customDdlEntity = null; if (StringUtils.isNotBlank(request.getCustomDdlName())) { CustomDdlKey customDdlKey = new CustomDdlKey( businessObjectFormatEntity.getBusinessObjectDefinition().getNamespace().getCode(), businessObjectFormatEntity.getBusinessObjectDefinition().getName(), businessObjectFormatEntity.getUsage(), businessObjectFormatEntity.getFileType().getCode(), businessObjectFormatEntity.getBusinessObjectFormatVersion(), request.getCustomDdlName()); customDdlEntity = customDdlDaoHelper.getCustomDdlEntity(customDdlKey); } // Build a list of storage names specified in the request. List<String> storageNames = new ArrayList<>(); if (StringUtils.isNotBlank(request.getStorageName())) { storageNames.add(request.getStorageName()); } if (!CollectionUtils.isEmpty(request.getStorageNames())) { storageNames.addAll(request.getStorageNames()); } // Validate that storage entities, specified in the request, exist, of a proper storage platform type, and have S3 bucket name configured. Map<String, StorageEntity> storageEntities = new HashMap<>(); Map<String, String> s3BucketNames = new HashMap<>(); for (String storageName : storageNames) { StorageEntity storageEntity = storageDaoHelper.getStorageEntity(storageName); // Only S3 storage platform is currently supported. Assert.isTrue(storageEntity.getStoragePlatform().getName().equals(StoragePlatformEntity.S3), String.format("Cannot generate DDL for \"%s\" storage platform.", storageEntity.getStoragePlatform().getName())); // Validate that storage have S3 bucket name configured. Please note that since S3 bucket name attribute value is required we pass a "true" flag. String s3BucketName = storageHelper.getStorageAttributeValueByName( configurationHelper.getProperty(ConfigurationValue.S3_ATTRIBUTE_NAME_BUCKET_NAME), storageEntity, true); // Memorize retrieved values for faster processing. String upperCaseStorageName = storageName.toUpperCase(); storageEntities.put(upperCaseStorageName, storageEntity); s3BucketNames.put(upperCaseStorageName, s3BucketName); } // Create and initialize a business object data DDL object instance. BusinessObjectDataDdl businessObjectDataDdl = createBusinessObjectDataDdl(request); businessObjectDataDdl.setDdl( ddlGeneratorFactory.getDdlGenerator(request.getOutputFormat()).generateCreateTableDdl(request, businessObjectFormatEntity, customDdlEntity, storageNames, storageEntities, s3BucketNames)); return businessObjectDataDdl; }
From source file:org.finra.herd.service.impl.BusinessObjectDataServiceImpl.java
/** * Updates the list of not-available statuses by adding business object data status instances created from discovered "non-available" registered * sub-partitions as per list of "matched" partition filters to the specified list of not-available statuses. * * @param notAvailableStatuses the list of not-available statuses to be updated * @param businessObjectFormatKey the business object format key * @param matchedAvailablePartitionFilters the list of "matched" partition filters * @param availablePartitions the list of already discovered "available" partitions, where each partition consists of primary and optional sub-partition * values/*ww w.ja v a 2s . com*/ * @param storageNames the list of storage names */ private void addNotAvailableBusinessObjectDataStatuses(List<BusinessObjectDataStatus> notAvailableStatuses, BusinessObjectFormatKey businessObjectFormatKey, List<List<String>> matchedAvailablePartitionFilters, List<List<String>> availablePartitions, List<String> storageNames) { // Now try to retrieve latest business object data per list of matched filters regardless of business object data and/or storage unit statuses. // This is done to include all registered sub-partitions in the response. // Business object data availability works across all storage platform types, so the storage platform type is not specified in the herdDao call. // We want to select any existing storage units regardless of their status, so we pass "false" for selectOnlyAvailableStorageUnits parameter. List<StorageUnitAvailabilityDto> matchedNotAvailableStorageUnitEntities = storageUnitDao .getStorageUnitsByPartitionFilters(businessObjectFormatKey, matchedAvailablePartitionFilters, null, null, storageNames, null, null, false); // Exclude all storage units with business object data having "DELETED" status. matchedNotAvailableStorageUnitEntities = storageUnitHelper.excludeBusinessObjectDataStatus( matchedNotAvailableStorageUnitEntities, BusinessObjectDataStatusEntity.DELETED); // Exclude all already discovered "available" partitions. Please note that, since we got here, the list of matched partitions can not be empty. matchedNotAvailableStorageUnitEntities = storageUnitHelper .excludePartitions(matchedNotAvailableStorageUnitEntities, availablePartitions); // Keep processing the matched "not available" storage units only when the list is not empty. if (!CollectionUtils.isEmpty(matchedNotAvailableStorageUnitEntities)) { // Populate the "not available" statuses with all found "not available" registered sub-partitions. addNotAvailableBusinessObjectDataStatuses(notAvailableStatuses, matchedNotAvailableStorageUnitEntities); } }
From source file:org.finra.herd.service.impl.BusinessObjectDataServiceImpl.java
/** * Performs a search and returns a list of business object data key values and relative statuses for a range of requested business object data. * * @param request the business object data availability request * @param skipRequestValidation specifies whether to skip the request validation and trimming * * @return the business object data availability information *//*from w ww .jav a2 s. c o m*/ private BusinessObjectDataAvailability checkBusinessObjectDataAvailabilityImpl( BusinessObjectDataAvailabilityRequest request, boolean skipRequestValidation) { // Perform the validation. if (!skipRequestValidation) { validateBusinessObjectDataAvailabilityRequest(request); } // Get business object format key from the request. BusinessObjectFormatKey businessObjectFormatKey = getBusinessObjectFormatKey(request); // Make sure that specified business object format exists. BusinessObjectFormatEntity businessObjectFormatEntity = businessObjectFormatDaoHelper .getBusinessObjectFormatEntity(businessObjectFormatKey); // Get the list of storage names from the request and validate that specified storage entities exist. List<String> storageNames = getStorageNames(request); storageDaoHelper.validateStorageExistence(storageNames); // Build partition filters based on the specified partition value filters. // Business object data availability works across all storage platform types, so the storage platform type is not specified in the call. List<List<String>> partitionFilters = businessObjectDataDaoHelper.buildPartitionFilters( request.getPartitionValueFilters(), request.getPartitionValueFilter(), businessObjectFormatKey, request.getBusinessObjectDataVersion(), storageNames, null, null, businessObjectFormatEntity); // Retrieve a list of storage unit availability DTOs for the specified partition values. The list will be sorted by partition value that is identified // by partition column position. If a business object data version isn't specified, the latest VALID business object data version is returned. // Business object data availability works across all storage platform types, so the storage platform type is not specified in the herdDao call. // We want to select only "available" storage units, so we pass "true" for selectOnlyAvailableStorageUnits parameter. List<StorageUnitAvailabilityDto> availableStorageUnitAvailabilityDtos = storageUnitDao .getStorageUnitsByPartitionFilters(businessObjectFormatKey, partitionFilters, request.getBusinessObjectDataVersion(), BusinessObjectDataStatusEntity.VALID, storageNames, null, null, true); // Create business object data availability object instance and initialise it with request field values. BusinessObjectDataAvailability businessObjectDataAvailability = createBusinessObjectDataAvailability( request); // Create "available" and "not available" business object data status lists. List<BusinessObjectDataStatus> availableStatuses = new ArrayList<>(); businessObjectDataAvailability.setAvailableStatuses(availableStatuses); List<BusinessObjectDataStatus> notAvailableStatuses = new ArrayList<>(); businessObjectDataAvailability.setNotAvailableStatuses(notAvailableStatuses); // Build a list of matched available partition filters and populate the available statuses list. Please note that each request partition filter // might result in multiple available business object data entities. If storage names are not specified, fail on "duplicate" business object data // (same business object data instance registered with multiple storages). Otherwise, remove possible "duplicates". List<List<String>> matchedAvailablePartitionFilters = new ArrayList<>(); List<List<String>> availablePartitions = new ArrayList<>(); Map<BusinessObjectDataKey, StorageUnitAvailabilityDto> businessObjectDataToStorageUnitMap = new HashMap<>(); for (StorageUnitAvailabilityDto storageUnitAvailabilityDto : availableStorageUnitAvailabilityDtos) { BusinessObjectDataKey businessObjectDataKey = storageUnitAvailabilityDto.getBusinessObjectDataKey(); if (businessObjectDataToStorageUnitMap.containsKey(businessObjectDataKey)) { // If storage names are not specified, fail on a business object data registered in multiple storage. Otherwise, ignore that storage unit. if (CollectionUtils.isEmpty(storageNames)) { throw new IllegalArgumentException(String.format( "Found business object data registered in more than one storage. " + "Please specify storage(s) in the request to resolve this. Business object data {%s}", businessObjectDataHelper.businessObjectDataKeyToString(businessObjectDataKey))); } } else { matchedAvailablePartitionFilters.add(businessObjectDataHelper .getPartitionFilter(businessObjectDataKey, partitionFilters.get(0))); availablePartitions .add(businessObjectDataHelper.getPrimaryAndSubPartitionValues(businessObjectDataKey)); availableStatuses.add(createAvailableBusinessObjectDataStatus(storageUnitAvailabilityDto)); businessObjectDataToStorageUnitMap.put(businessObjectDataKey, storageUnitAvailabilityDto); } } // Check if request specifies to include all registered sub-partitions in the response. boolean includeAllRegisteredSubPartitions = request.getBusinessObjectDataVersion() == null && BooleanUtils.isTrue(request.isIncludeAllRegisteredSubPartitions()); // If request specifies to include all registered sub-partitions in the response, query all // matched partition filters one more time to discover any non-available registered sub-partitions. if (includeAllRegisteredSubPartitions && !CollectionUtils.isEmpty(matchedAvailablePartitionFilters)) { addNotAvailableBusinessObjectDataStatuses(notAvailableStatuses, businessObjectFormatKey, matchedAvailablePartitionFilters, availablePartitions, storageNames); } // Get a list of unmatched partition filters. List<List<String>> unmatchedPartitionFilters = new ArrayList<>(partitionFilters); unmatchedPartitionFilters.removeAll(matchedAvailablePartitionFilters); // We still need to try to retrieve business object data per list of unmatched filters regardless of business object data and/or storage unit statuses. // This is done to populate not-available statuses with legitimate reasons. // Business object data availability works across all storage platform types, so the storage platform type is not specified in the herdDao call. // We want to select any existing storage units regardless of their status, so we pass "false" for selectOnlyAvailableStorageUnits parameter. List<StorageUnitAvailabilityDto> notAvailableStorageUnitAvailabilityDtos = storageUnitDao .getStorageUnitsByPartitionFilters(businessObjectFormatKey, unmatchedPartitionFilters, request.getBusinessObjectDataVersion(), null, storageNames, null, null, false); // Populate the not-available statuses list. addNotAvailableBusinessObjectDataStatuses(notAvailableStatuses, notAvailableStorageUnitAvailabilityDtos); // Build a list of matched "not-available" partition filters. // Please note that each request partition filter might result in multiple available business object data entities. List<List<String>> matchedNotAvailablePartitionFilters = getPartitionFilters( notAvailableStorageUnitAvailabilityDtos, partitionFilters.get(0)); // Update the list of unmatched partition filters. unmatchedPartitionFilters.removeAll(matchedNotAvailablePartitionFilters); // Populate the "not available" statuses per remaining unmatched filters. for (List<String> unmatchedPartitionFilter : unmatchedPartitionFilters) { notAvailableStatuses.add(createNotAvailableBusinessObjectDataStatus(request, unmatchedPartitionFilter, REASON_NOT_REGISTERED)); } return businessObjectDataAvailability; }
From source file:org.finra.herd.service.impl.BusinessObjectDataServiceImpl.java
/** * Gets storage names from the business object data availability request. * * @param request the business object data availability request * * @return the list of storage names/*from ww w. j av a 2s . co m*/ */ private List<String> getStorageNames(BusinessObjectDataAvailabilityRequest request) { List<String> storageNames = new ArrayList<>(); if (StringUtils.isNotBlank(request.getStorageName())) { storageNames.add(request.getStorageName()); } if (!CollectionUtils.isEmpty(request.getStorageNames())) { storageNames.addAll(request.getStorageNames()); } return storageNames; }
From source file:org.finra.herd.service.impl.BusinessObjectDataServiceImpl.java
/** * Validates a business object data availability collection request. This method also trims appropriate request parameters. * * @param businessObjectDataAvailabilityCollectionRequest the request * * @throws IllegalArgumentException if any validation errors were found */// w w w. j a v a 2s .c o m private void validateBusinessObjectDataAvailabilityCollectionRequest( BusinessObjectDataAvailabilityCollectionRequest businessObjectDataAvailabilityCollectionRequest) { Assert.notNull(businessObjectDataAvailabilityCollectionRequest, "A business object data availability collection request must be specified."); Assert.isTrue( !CollectionUtils.isEmpty(businessObjectDataAvailabilityCollectionRequest .getBusinessObjectDataAvailabilityRequests()), "At least one business object data availability request must be specified."); for (BusinessObjectDataAvailabilityRequest request : businessObjectDataAvailabilityCollectionRequest .getBusinessObjectDataAvailabilityRequests()) { validateBusinessObjectDataAvailabilityRequest(request); } }
From source file:org.finra.herd.service.impl.BusinessObjectDataServiceImpl.java
/** * Validates the business object data availability request. This method also trims appropriate request parameters. * * @param request the request/*from ww w .j a v a 2s. co m*/ * * @throws IllegalArgumentException if any validation errors were found */ private void validateBusinessObjectDataAvailabilityRequest(BusinessObjectDataAvailabilityRequest request) { Assert.notNull(request, "A business object data availability request must be specified."); // Validate and trim the request parameters. Assert.hasText(request.getNamespace(), "A namespace must be specified."); request.setNamespace(request.getNamespace().trim()); Assert.hasText(request.getBusinessObjectDefinitionName(), "A business object definition name must be specified."); request.setBusinessObjectDefinitionName(request.getBusinessObjectDefinitionName().trim()); Assert.hasText(request.getBusinessObjectFormatUsage(), "A business object format usage must be specified."); request.setBusinessObjectFormatUsage(request.getBusinessObjectFormatUsage().trim()); Assert.hasText(request.getBusinessObjectFormatFileType(), "A business object format file type must be specified."); request.setBusinessObjectFormatFileType(request.getBusinessObjectFormatFileType().trim()); // Validate the partition value filters. Allow partition value tokens to be specified. businessObjectDataHelper.validatePartitionValueFilters(request.getPartitionValueFilters(), request.getPartitionValueFilter(), true); // Make sure that request does not contain both a list of storage names and a standalone storage name. Assert.isTrue(request.getStorageNames() == null || request.getStorageName() == null, "A list of storage names and a standalone storage name cannot be both specified."); // Trim the standalone storage name, if specified. if (request.getStorageName() != null) { Assert.hasText(request.getStorageName(), "A storage name must be specified."); request.setStorageName(request.getStorageName().trim()); } // Validate and trim the list of storage names. if (!CollectionUtils.isEmpty(request.getStorageNames())) { for (int i = 0; i < request.getStorageNames().size(); i++) { Assert.hasText(request.getStorageNames().get(i), "A storage name must be specified."); request.getStorageNames().set(i, request.getStorageNames().get(i).trim()); } } }
From source file:org.finra.herd.service.impl.BusinessObjectDataServiceImpl.java
/** * Validates a business object data DDL collection request. This method also trims appropriate request parameters. * * @param businessObjectDataDdlCollectionRequest the request * * @throws IllegalArgumentException if any validation errors were found *///from w w w . j a v a 2s . co m private void validateBusinessObjectDataDdlCollectionRequest( BusinessObjectDataDdlCollectionRequest businessObjectDataDdlCollectionRequest) { Assert.notNull(businessObjectDataDdlCollectionRequest, "A business object data DDL collection request must be specified."); Assert.isTrue( !CollectionUtils.isEmpty(businessObjectDataDdlCollectionRequest.getBusinessObjectDataDdlRequests()), "At least one business object data DDL request must be specified."); for (BusinessObjectDataDdlRequest request : businessObjectDataDdlCollectionRequest .getBusinessObjectDataDdlRequests()) { validateBusinessObjectDataDdlRequest(request); } }
From source file:org.finra.herd.service.impl.BusinessObjectDataServiceImpl.java
/** * Validates the business object data DDL request. This method also trims appropriate request parameters. * * @param request the request/*w w w . j av a 2 s .c om*/ * * @throws IllegalArgumentException if any validation errors were found */ private void validateBusinessObjectDataDdlRequest(BusinessObjectDataDdlRequest request) { Assert.notNull(request, "A business object data DDL request must be specified."); // Validate and trim the request parameters. Assert.hasText(request.getNamespace(), "A namespace must be specified."); request.setNamespace(request.getNamespace().trim()); Assert.hasText(request.getBusinessObjectDefinitionName(), "A business object definition name must be specified."); request.setBusinessObjectDefinitionName(request.getBusinessObjectDefinitionName().trim()); Assert.hasText(request.getBusinessObjectFormatUsage(), "A business object format usage must be specified."); request.setBusinessObjectFormatUsage(request.getBusinessObjectFormatUsage().trim()); Assert.hasText(request.getBusinessObjectFormatFileType(), "A business object format file type must be specified."); request.setBusinessObjectFormatFileType(request.getBusinessObjectFormatFileType().trim()); // Validate the partition value filters. Do not allow partition value tokens to be specified. businessObjectDataHelper.validatePartitionValueFilters(request.getPartitionValueFilters(), request.getPartitionValueFilter(), false); // Make sure that request does not contain both a list of storage names and a standalone storage name. Assert.isTrue(request.getStorageNames() == null || request.getStorageName() == null, "A list of storage names and a standalone storage name cannot be both specified."); // Trim the standalone storage name, if specified. if (request.getStorageName() != null) { Assert.hasText(request.getStorageName(), "A storage name must be specified."); request.setStorageName(request.getStorageName().trim()); } // Validate and trim the list of storage names. if (!CollectionUtils.isEmpty(request.getStorageNames())) { for (int i = 0; i < request.getStorageNames().size(); i++) { Assert.hasText(request.getStorageNames().get(i), "A storage name must be specified."); request.getStorageNames().set(i, request.getStorageNames().get(i).trim()); } } Assert.notNull(request.getOutputFormat(), "An output format must be specified."); Assert.hasText(request.getTableName(), "A table name must be specified."); request.setTableName(request.getTableName().trim()); if (StringUtils.isNotBlank(request.getCustomDdlName())) { request.setCustomDdlName(request.getCustomDdlName().trim()); } }