@Override
    public void delete(final Map<Path, TransferStatus> files, final PasswordCallback prompt, final Callback callback) throws BackgroundException {
        final List<Path> containers = new ArrayList<Path>();
        for(Path file : files.keySet()) {
            if(containerService.isContainer(file)) {
                containers.add(file);
            }
            else {
                callback.delete(file);
                try {
                    final BlobRequestOptions options = new BlobRequestOptions();
                    session.getClient().getContainerReference(containerService.getContainer(file).getName())
                            .getBlockBlobReference(containerService.getKey(file)).delete(
                                    DeleteSnapshotsOption.INCLUDE_SNAPSHOTS, AccessCondition.generateEmptyCondition(), options, context);
                }
                catch(StorageException e) {
                    switch(e.getHttpStatusCode()) {
                        case HttpStatus.SC_NOT_FOUND:
                            if(file.isPlaceholder()) {
                                // Ignore failure with no placeholder object found
                                return;
                            }
                    }
                    throw new AzureExceptionMappingService().map("Cannot delete {0}", e, file);
                }
                catch(URISyntaxException e) {
                    throw new NotfoundException(e.getMessage(), e);
                }
            }
        }
        for(Path file : containers) {
            callback.delete(file);
            try {
                final BlobRequestOptions options = new BlobRequestOptions();
                session.getClient().getContainerReference(containerService.getContainer(file).getName()).delete(
                        AccessCondition.generateEmptyCondition(), options, context);
            }
            catch(StorageException e) {
                throw new AzureExceptionMappingService().map("Cannot delete {0}", e, file);
            }
            catch(URISyntaxException e) {
                throw new NotfoundException(e.getMessage(), e);
            }
        }
    }
@Test
    public void testDeletePlaceholder() throws Exception {
        final Path container = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
        final Path test = new AzureDirectoryFeature(session, null).mkdir(new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)), new TransferStatus());
        assertTrue(new AzureFindFeature(session, null).find(test));
        new AzureDeleteFeature(session, null).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
        assertFalse(new AzureFindFeature(session, null).find(test));
    }