/** * Creates new file(s) for a given business object data and storage. <p>Addition of storage files is only allowed for business object data with a * pre-registration status.</p> <p>Requires WRITE permission on namespace</p> * * @param businessObjectDataStorageFilesCreateRequest - the create file request * * @return response */ @RequestMapping(value = "/businessObjectDataStorageFiles", method = RequestMethod.POST, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DATA_STORAGES_FILES_POST) public BusinessObjectDataStorageFilesCreateResponse createBusinessObjectDataStorageFiles( @RequestBody BusinessObjectDataStorageFilesCreateRequest businessObjectDataStorageFilesCreateRequest) { return businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(businessObjectDataStorageFilesCreateRequest); } }
/** * Creates new file(s) for a given business object data and storage. <p>Addition of storage files is only allowed for business object data with a * pre-registration status.</p> <p>Requires WRITE permission on namespace</p> * * @param businessObjectDataStorageFilesCreateRequest - the create file request * * @return response */ @RequestMapping(value = "/businessObjectDataStorageFiles", method = RequestMethod.POST, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_BUSINESS_OBJECT_DATA_STORAGES_FILES_POST) public BusinessObjectDataStorageFilesCreateResponse createBusinessObjectDataStorageFiles( @RequestBody BusinessObjectDataStorageFilesCreateRequest businessObjectDataStorageFilesCreateRequest) { return businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(businessObjectDataStorageFilesCreateRequest); } }
@Override public void executeImpl(DelegateExecution execution) throws Exception { String contentTypeString = activitiHelper.getRequiredExpressionVariableAsString(contentType, execution, "ContentType").trim(); String requestString = activitiHelper.getRequiredExpressionVariableAsString(businessObjectDataStorageFilesCreateRequest, execution, "BusinessObjectDataCreateRequest") .trim(); BusinessObjectDataStorageFilesCreateRequest request = getRequestObject(contentTypeString, requestString, BusinessObjectDataStorageFilesCreateRequest.class); // Call the BusinessObjectDataStorageFiles service. BusinessObjectDataStorageFilesCreateResponse businessObjectDataStorageFilesCreateResponse = businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(request); // Set the JSON response as a workflow variable. setJsonResponseAsWorkflowVariable(businessObjectDataStorageFilesCreateResponse, execution); } }
@Override public void executeImpl(DelegateExecution execution) throws Exception { String contentTypeString = activitiHelper.getRequiredExpressionVariableAsString(contentType, execution, "ContentType").trim(); String requestString = activitiHelper.getRequiredExpressionVariableAsString(businessObjectDataStorageFilesCreateRequest, execution, "BusinessObjectDataCreateRequest") .trim(); BusinessObjectDataStorageFilesCreateRequest request = getRequestObject(contentTypeString, requestString, BusinessObjectDataStorageFilesCreateRequest.class); // Call the BusinessObjectDataStorageFiles service. BusinessObjectDataStorageFilesCreateResponse businessObjectDataStorageFilesCreateResponse = businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(request); // Set the JSON response as a workflow variable. setJsonResponseAsWorkflowVariable(businessObjectDataStorageFilesCreateResponse, execution); } }
@Test public void testCreateBusinessObjectDataStorageFiles() { BusinessObjectDataStorageFilesCreateResponse response = new BusinessObjectDataStorageFilesCreateResponse(); BusinessObjectDataStorageFilesCreateRequest request = new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, null, DATA_VERSION, STORAGE_NAME, null, NO_DISCOVER_STORAGE_FILES); when(businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(request)).thenReturn(response); BusinessObjectDataStorageFilesCreateResponse resultResponse = businessObjectDataStorageFileRestController.createBusinessObjectDataStorageFiles(request); // Verify the external calls. verify(businessObjectDataStorageFileService).createBusinessObjectDataStorageFiles(request); verifyNoMoreInteractions(businessObjectDataStorageFileService); // Validate the returned object. assertEquals(response, resultResponse); } }
@Test public void testCreateBusinessObjectDataStorageFilesUpperCaseParameters() { createDataWithSubPartitions(); // Create business object data storage files using upper case input parameters (except for case-sensitive partition values and storage file paths). BusinessObjectDataStorageFilesCreateRequest request = new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE.toUpperCase(), BDEF_NAME.toUpperCase(), FORMAT_USAGE_CODE.toUpperCase(), FORMAT_FILE_TYPE_CODE.toUpperCase(), FORMAT_VERSION, PARTITION_VALUE, SUB_PARTITION_VALUES, DATA_VERSION, STORAGE_NAME.toUpperCase(), Arrays.asList(createFile(FILE_PATH_2, FILE_SIZE_1_KB, ROW_COUNT_1000)), NO_DISCOVER_STORAGE_FILES); BusinessObjectDataStorageFilesCreateResponse response = businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(request); // Validate the returned object. businessObjectDataServiceTestHelper .validateBusinessObjectDataStorageFilesCreateResponse(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, SUB_PARTITION_VALUES, DATA_VERSION, STORAGE_NAME, request.getStorageFiles(), response); }
@Test public void testCreateBusinessObjectDataStorageFilesLowerCaseParameters() { createDataWithSubPartitions(); // Create business object data storage files using lower case input parameters (except for case-sensitive partition values and storage file paths). BusinessObjectDataStorageFilesCreateRequest request = new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE.toLowerCase(), BDEF_NAME.toLowerCase(), FORMAT_USAGE_CODE.toLowerCase(), FORMAT_FILE_TYPE_CODE.toLowerCase(), FORMAT_VERSION, PARTITION_VALUE, SUB_PARTITION_VALUES, DATA_VERSION, STORAGE_NAME.toLowerCase(), Arrays.asList(createFile(FILE_PATH_2, FILE_SIZE_1_KB, ROW_COUNT_1000)), NO_DISCOVER_STORAGE_FILES); BusinessObjectDataStorageFilesCreateResponse response = businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(request); // Validate the returned object. businessObjectDataServiceTestHelper .validateBusinessObjectDataStorageFilesCreateResponse(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, SUB_PARTITION_VALUES, DATA_VERSION, STORAGE_NAME, request.getStorageFiles(), response); }
@Test public void testCreateBusinessObjectDataStorageFilesS3ManagedS3FileSizeMismatch() throws Exception { createData(null, true, Arrays.asList(testS3KeyPrefix + "/" + FILE_PATH_1)); businessObjectDataServiceTestHelper.prepareTestS3Files(testS3KeyPrefix, localTempPath, Arrays.asList(FILE_PATH_1, FILE_PATH_2)); // Try to add a storage file with file size that does not match to file size reported by S3. try { businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles( new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, null, DATA_VERSION, StorageEntity.MANAGED_STORAGE, Arrays.asList(createFile(testS3KeyPrefix + "/" + FILE_PATH_2, FILE_SIZE_0_BYTE, ROW_COUNT_1000)), NO_DISCOVER_STORAGE_FILES)); fail("Should throw an IllegalArgumentException when a storage file size does not match file size reported by S3."); } catch (IllegalArgumentException e) { assertEquals(String .format("Specified file size of %d bytes for \"%s/%s\" storage file does not match file size of %d bytes reported by S3.", FILE_SIZE_0_BYTE, testS3KeyPrefix, FILE_PATH_2, FILE_SIZE_1_KB), e.getMessage()); } }
@Test public void testCreateBusinessObjectDataStorageFilesAutoDiscoveryStorageFilesSpecified() { // Try to create storage files when discovery of storage files is enabled and storage files are specified. try { businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles( new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, NO_SUBPARTITION_VALUES, DATA_VERSION, StorageEntity.MANAGED_STORAGE, Arrays.asList(createFile(FILE_PATH_1, FILE_SIZE_0_BYTE, ROW_COUNT_1000)), DISCOVER_STORAGE_FILES)); fail("Should throw an IllegalArgumentException when discovery of storage files is enabled and storage files are specified."); } catch (IllegalArgumentException e) { assertEquals("Storage files cannot be specified when discovery of storage files is enabled.", e.getMessage()); } }
/** * This method is to get the coverage for the business object data storage file service method that starts the new transaction. */ @Test public void testBusinessObjectDataStorageFileServiceMethodsNewTx() throws Exception { BusinessObjectDataStorageFilesCreateRequest request = new BusinessObjectDataStorageFilesCreateRequest(); try { businessObjectDataStorageFileServiceImpl.createBusinessObjectDataStorageFiles(request); fail("Should throw a IllegalArgumentException."); } catch (IllegalArgumentException e) { assertEquals("A namespace must be specified.", e.getMessage()); } }
@Test public void testCreateBusinessObjectDataStorageFilesWithStorageDirectoryIncorrectStorageDirectory() { createData("some/path", false); // Try to add a storage file when the storage file path doesn't match the storage directory path. try { businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles( new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, null, DATA_VERSION, STORAGE_NAME, Arrays.asList(createFile("incorrect/path/" + FILE_PATH_2, FILE_SIZE_1_KB, ROW_COUNT_1000)), NO_DISCOVER_STORAGE_FILES)); fail("Should throw an IllegalArgumentException when a storage file path does not match the storage directory path."); } catch (IllegalArgumentException e) { assertEquals(String.format("Storage file path \"incorrect/path/%s\" does not match the storage directory path \"some/path/\".", FILE_PATH_2), e.getMessage()); } }
@Test public void testCreateBusinessObjectDataStorageFilesAutoDiscoveryStorageUnitHasNoStorageDirectoryPath() throws Exception { createData(null, true, Arrays.asList(testS3KeyPrefix + "/" + FILE_PATH_1)); businessObjectDataServiceTestHelper.prepareTestS3Files(testS3KeyPrefix, localTempPath, Arrays.asList(FILE_PATH_1, FILE_PATH_2)); // Try to discover storage files when storage unit has no storage directory path. try { businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles( new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, NO_SUBPARTITION_VALUES, DATA_VERSION, StorageEntity.MANAGED_STORAGE, NO_STORAGE_FILES, DISCOVER_STORAGE_FILES)); fail("Should throw an IllegalArgumentException when storage unit has no storage directory path."); } catch (IllegalArgumentException e) { assertEquals("Business object data has no storage directory path which is required for auto-discovery of storage files.", e.getMessage()); } }
@Test public void testCreateBusinessObjectDataStorageFilesS3Managed() throws Exception { createData(null, true, Arrays.asList(testS3KeyPrefix + "/" + FILE_PATH_1)); businessObjectDataServiceTestHelper.prepareTestS3Files(testS3KeyPrefix, localTempPath, Arrays.asList(FILE_PATH_1, FILE_PATH_2)); BusinessObjectDataStorageFilesCreateRequest request = new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, null, DATA_VERSION, StorageEntity.MANAGED_STORAGE, Arrays.asList(createFile(testS3KeyPrefix + "/" + FILE_PATH_2, FILE_SIZE_1_KB, ROW_COUNT_1000)), NO_DISCOVER_STORAGE_FILES); BusinessObjectDataStorageFilesCreateResponse response = businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(request); // Validate the returned object. businessObjectDataServiceTestHelper .validateBusinessObjectDataStorageFilesCreateResponse(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, NO_SUBPARTITION_VALUES, DATA_VERSION, StorageEntity.MANAGED_STORAGE, request.getStorageFiles(), response); }
@Test public void testCreateBusinessObjectDataStorageFilesS3ManagedStorageUnitHasStorageDirectoryPathSet() throws Exception { // Prepare test data with a storage unit registered with a storage directory path. createData(testS3KeyPrefix, true, Arrays.asList(testS3KeyPrefix + "/" + FILE_PATH_1)); businessObjectDataServiceTestHelper.prepareTestS3Files(testS3KeyPrefix, localTempPath, Arrays.asList(FILE_PATH_1, FILE_PATH_2)); BusinessObjectDataStorageFilesCreateRequest request = new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, null, DATA_VERSION, StorageEntity.MANAGED_STORAGE, Arrays.asList(createFile(testS3KeyPrefix + "/" + FILE_PATH_2, FILE_SIZE_1_KB, ROW_COUNT_1000)), NO_DISCOVER_STORAGE_FILES); BusinessObjectDataStorageFilesCreateResponse response = businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(request); // Validate the returned object. businessObjectDataServiceTestHelper .validateBusinessObjectDataStorageFilesCreateResponse(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, NO_SUBPARTITION_VALUES, DATA_VERSION, StorageEntity.MANAGED_STORAGE, request.getStorageFiles(), response); }
@Test public void testCreateBusinessObjectDataStorageFilesS3ManagedExtraFilesInS3() throws Exception { // Create test data. createData(null, true, Arrays.asList(testS3KeyPrefix + "/" + FILE_PATH_1)); // Create and upload to S3 managed storage a set of test files including an extra // file not to be listed in the create business object data create request. businessObjectDataServiceTestHelper.prepareTestS3Files(testS3KeyPrefix, localTempPath, Arrays.asList(FILE_PATH_1, FILE_PATH_2, FILE_PATH_3)); BusinessObjectDataStorageFilesCreateRequest request = new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, null, DATA_VERSION, StorageEntity.MANAGED_STORAGE, Arrays.asList(createFile(testS3KeyPrefix + "/" + FILE_PATH_2, FILE_SIZE_1_KB, ROW_COUNT_1000)), NO_DISCOVER_STORAGE_FILES); BusinessObjectDataStorageFilesCreateResponse response = businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(request); // Validate the returned object. businessObjectDataServiceTestHelper .validateBusinessObjectDataStorageFilesCreateResponse(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, NO_SUBPARTITION_VALUES, DATA_VERSION, StorageEntity.MANAGED_STORAGE, request.getStorageFiles(), response); }
@Test public void testCreateBusinessObjectDataStorageFilesAutoDiscoveryNoUnregisteredS3FilesExist() throws Exception { // Create test data. createData(testS3KeyPrefix, true, Arrays.asList(testS3KeyPrefix + "/" + FILE_PATH_1)); // Create and upload to S3 managed storage only the already registered file. businessObjectDataServiceTestHelper.prepareTestS3Files(testS3KeyPrefix, localTempPath, Arrays.asList(FILE_PATH_1)); // Try to discover storage files when no unregistered storage files are present in S3. try { businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles( new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, NO_SUBPARTITION_VALUES, DATA_VERSION, StorageEntity.MANAGED_STORAGE, NO_STORAGE_FILES, DISCOVER_STORAGE_FILES)); fail("Should throw an IllegalArgumentException when no unregistered storage files are present in S3."); } catch (IllegalArgumentException e) { assertEquals(String.format("No unregistered storage files were discovered at s3://%s/%s/ location.", storageDaoTestHelper.getS3ManagedBucketName(), testS3KeyPrefix), e.getMessage()); } }
@Test public void testCreateBusinessObjectDataStorageFilesS3ManagedInvalidS3FilePath() throws Exception { createData(null, true); // Try to add a storage file to S3 managed storage when the storage file path doesn't match the expected S3 key prefix. String invalidS3KeyPrefix = "INVALID_S3_KEY_PREFIX"; try { businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles( new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, null, DATA_VERSION, StorageEntity.MANAGED_STORAGE, Arrays.asList(createFile(invalidS3KeyPrefix + "/" + FILE_PATH_1, FILE_SIZE_1_KB, ROW_COUNT_1000)), NO_DISCOVER_STORAGE_FILES)); fail("Should throw an IllegalArgumentException when a storage file path in S3 managed storage does not match the expected S3 key prefix."); } catch (IllegalArgumentException e) { assertEquals(String .format("Specified storage file path \"%s/%s\" does not match the expected S3 key prefix \"%s\".", invalidS3KeyPrefix, FILE_PATH_1, testS3KeyPrefix + "/"), e.getMessage()); } }
@Test public void testCreateBusinessObjectDataStorageFilesAutoDiscovery() throws Exception { createData(testS3KeyPrefix, true, Arrays.asList(testS3KeyPrefix + "/" + FILE_PATH_1)); businessObjectDataServiceTestHelper.prepareTestS3Files(testS3KeyPrefix, localTempPath, Arrays.asList(FILE_PATH_1, FILE_PATH_2)); // Discover storage files in S3 managed storage. BusinessObjectDataStorageFilesCreateResponse response = businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles( new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, NO_SUBPARTITION_VALUES, DATA_VERSION, StorageEntity.MANAGED_STORAGE, NO_STORAGE_FILES, DISCOVER_STORAGE_FILES)); // Validate the returned object. assertEquals( new BusinessObjectDataStorageFilesCreateResponse(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, NO_SUBPARTITION_VALUES, DATA_VERSION, StorageEntity.MANAGED_STORAGE, Arrays.asList(new StorageFile(testS3KeyPrefix + "/" + FILE_PATH_2, FILE_SIZE_1_KB, NO_ROW_COUNT))), response); }
businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles( new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, Arrays.asList(PARTITION_VALUE_2, PARTITION_VALUE_3, PARTITION_VALUE_4, PARTITION_VALUE_5, PARTITION_KEY_2), DATA_VERSION, STORAGE_NAME, businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles( new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, SUB_PARTITION_VALUES, DATA_VERSION, STORAGE_NAME, Arrays.asList(createFile(FILE_PATH_2, FILE_SIZE_1_KB, -1l)), NO_DISCOVER_STORAGE_FILES)); businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles( new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, SUB_PARTITION_VALUES, DATA_VERSION, STORAGE_NAME,
@Test public void testCreateBusinessObjectDataStorageFiles() { createDataWithSubPartitions(); BusinessObjectDataStorageFilesCreateRequest request = new BusinessObjectDataStorageFilesCreateRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, SUB_PARTITION_VALUES, DATA_VERSION, STORAGE_NAME, Arrays.asList(createFile(FILE_PATH_2, FILE_SIZE_1_KB, ROW_COUNT_1000)), NO_DISCOVER_STORAGE_FILES); BusinessObjectDataStorageFilesCreateResponse response = businessObjectDataStorageFileService.createBusinessObjectDataStorageFiles(request); // Validate the returned object. businessObjectDataServiceTestHelper .validateBusinessObjectDataStorageFilesCreateResponse(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, SUB_PARTITION_VALUES, DATA_VERSION, STORAGE_NAME, request.getStorageFiles(), response); }