Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions sdk/storage/azure-storage-file-share/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,15 @@
## 12.32.0-beta.1 (Unreleased)

### Features Added
- Added support for NFS List Files and Directories V2. `ShareDirectoryClient.listFilesAndDirectories` now returns
symbolic links, block devices, character devices, FIFOs and sockets in addition to files and directories.
- Added `ShareFileItem.getLinkCount()`, `ShareFileItem.getFileType()`, `ShareFileItem.getLinkText()`,
`ShareFileItem.getDeviceMajor()` and `ShareFileItem.getDeviceMinor()`.
- Added `ShareFileItemProperties.getOwner()`, `ShareFileItemProperties.getGroup()` and
`ShareFileItemProperties.getFileMode()`.
- Added `NfsFileType.BLOCK_DEVICE`, `NfsFileType.CHARACTER_DEVICE`, `NfsFileType.SOCKET` and `NfsFileType.FIFO`.
- Added `ShareListFilesAndDirectoriesOptions.setIncludePermissions`, `setIncludeLinkCount`, `setIncludeNfsAttributes`
and `setIncludeAll`.

### Breaking Changes

Expand Down
2 changes: 1 addition & 1 deletion sdk/storage/azure-storage-file-share/assets.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"AssetsRepo": "Azure/azure-sdk-assets",
"AssetsRepoPrefixPath": "java",
"TagPrefix": "java/storage/azure-storage-file-share",
"Tag": "java/storage/azure-storage-file-share_1e9eb49640"
"Tag": "java/storage/azure-storage-file-share_741d1f4fbd"
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@
import reactor.core.publisher.Mono;

import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -980,22 +979,7 @@ PagedFlux<ShareFileItem> listFilesAndDirectoriesWithOptionalTimeout(ShareListFil
final ShareListFilesAndDirectoriesOptions modifiedOptions
= options == null ? new ShareListFilesAndDirectoriesOptions() : options;

List<ListFilesIncludeType> includeTypes = new ArrayList<>();
if (modifiedOptions.includeAttributes()) {
includeTypes.add(ListFilesIncludeType.ATTRIBUTES);
}
if (modifiedOptions.includeETag()) {
includeTypes.add(ListFilesIncludeType.ETAG);
}
if (modifiedOptions.includeTimestamps()) {
includeTypes.add(ListFilesIncludeType.TIMESTAMPS);
}
if (modifiedOptions.includePermissionKey()) {
includeTypes.add(ListFilesIncludeType.PERMISSION_KEY);
}

// these options must be absent from request if empty or false
final List<ListFilesIncludeType> finalIncludeTypes = includeTypes.isEmpty() ? null : includeTypes;
final List<ListFilesIncludeType> finalIncludeTypes = ModelHelper.getListFilesIncludeTypes(modifiedOptions);

BiFunction<String, Integer, Mono<PagedResponse<ShareFileItem>>> retriever
= (marker, pageSize) -> StorageImplUtils
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@
import com.azure.storage.file.share.sas.ShareServiceSasSignatureValues;

import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -946,22 +945,7 @@ public PagedIterable<ShareFileItem> listFilesAndDirectories(ShareListFilesAndDir
final ShareListFilesAndDirectoriesOptions modifiedOptions
= options == null ? new ShareListFilesAndDirectoriesOptions() : options;

List<ListFilesIncludeType> includeTypes = new ArrayList<>();
if (modifiedOptions.includeAttributes()) {
includeTypes.add(ListFilesIncludeType.ATTRIBUTES);
}
if (modifiedOptions.includeETag()) {
includeTypes.add(ListFilesIncludeType.ETAG);
}
if (modifiedOptions.includeTimestamps()) {
includeTypes.add(ListFilesIncludeType.TIMESTAMPS);
}
if (modifiedOptions.includePermissionKey()) {
includeTypes.add(ListFilesIncludeType.PERMISSION_KEY);
}

// these options must be absent from request if empty or false
final List<ListFilesIncludeType> finalIncludeTypes = includeTypes.isEmpty() ? null : includeTypes;
final List<ListFilesIncludeType> finalIncludeTypes = ModelHelper.getListFilesIncludeTypes(modifiedOptions);

BiFunction<String, Integer, PagedResponse<ShareFileItem>> retriever = (marker, pageSize) -> {
Callable<Response<ListFilesAndDirectoriesSegmentResponse>> operation
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.storage.file.share.implementation.accesshelpers;

import com.azure.storage.file.share.models.NfsFileType;
import com.azure.storage.file.share.models.NtfsFileAttributes;
import com.azure.storage.file.share.models.ShareFileItem;
import com.azure.storage.file.share.models.ShareFileItemProperties;

import java.util.EnumSet;

/**
* Helper class to access private values of {@link ShareFileItem} across package boundaries.
*/
public final class ShareFileItemConstructorProxy {
private static ShareFileItemConstructorAccessor accessor;

private ShareFileItemConstructorProxy() {
}

/**
* Type defining the methods to create a {@link ShareFileItem} instance with non-public properties.
*/
public interface ShareFileItemConstructorAccessor {
/**
* Creates a new instance of {@link ShareFileItem}.
*
* @param name Name of the file or the directory.
* @param isDirectory A boolean set to true if the reference is a directory, false if the reference is a file.
* @param id ID of the file or directory.
* @param properties Properties of the file or directory.
* @param fileAttributes NTFS attributes of the file or directory.
* @param permissionKey Permission key of the file or directory.
* @param fileSize Size of a file.
* @param linkCount The number of hard links to the file or directory.
* @param fileType The type of the file or directory.
* @param linkText The target path of the symbolic link.
* @param deviceMajor The major device number.
* @param deviceMinor The minor device number.
* @return A new instance of {@link ShareFileItem}.
*/
ShareFileItem create(String name, boolean isDirectory, String id, ShareFileItemProperties properties,
EnumSet<NtfsFileAttributes> fileAttributes, String permissionKey, Long fileSize, Long linkCount,
NfsFileType fileType, String linkText, Long deviceMajor, Long deviceMinor);
}

/**
* The method called from {@link ShareFileItem} to set its accessor.
*
* @param accessor The accessor.
*/
public static void setAccessor(final ShareFileItemConstructorAccessor accessor) {
ShareFileItemConstructorProxy.accessor = accessor;
}

/**
* Creates a new instance of {@link ShareFileItem}.
*
* @param name Name of the file or the directory.
* @param isDirectory A boolean set to true if the reference is a directory, false if the reference is a file.
* @param id ID of the file or directory.
* @param properties Properties of the file or directory.
* @param fileAttributes NTFS attributes of the file or directory.
* @param permissionKey Permission key of the file or directory.
* @param fileSize Size of a file.
* @param linkCount The number of hard links to the file or directory.
* @param fileType The type of the file or directory.
* @param linkText The target path of the symbolic link.
* @param deviceMajor The major device number.
* @param deviceMinor The minor device number.
* @return A new instance of {@link ShareFileItem}.
*/
public static ShareFileItem create(String name, boolean isDirectory, String id, ShareFileItemProperties properties,
EnumSet<NtfsFileAttributes> fileAttributes, String permissionKey, Long fileSize, Long linkCount,
NfsFileType fileType, String linkText, Long deviceMajor, Long deviceMinor) {
// This looks odd but is necessary, it is possible to engage the access helper before anywhere else in the
// application accesses ShareFileItem which triggers the accessor to be configured. So, if the accessor
// is null this effectively pokes the class to set up the accessor.
if (accessor == null) {
new ShareFileItem(null, false, null);
}

assert accessor != null;
return accessor.create(name, isDirectory, id, properties, fileAttributes, permissionKey, fileSize, linkCount,
fileType, linkText, deviceMajor, deviceMinor);
}
}
Loading