Copyright Microsoft Corporation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
/** * Copyright Microsoft Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
package com.microsoft.azure.storage.file; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URI; import java.net.URISyntaxException; import java.security.InvalidKeyException; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.xml.stream.XMLStreamException; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.microsoft.azure.storage.AccessCondition; import com.microsoft.azure.storage.Constants; import com.microsoft.azure.storage.DoesServiceRequest; import com.microsoft.azure.storage.IPRange; import com.microsoft.azure.storage.OperationContext; import com.microsoft.azure.storage.SharedAccessPolicyHandler; import com.microsoft.azure.storage.SharedAccessPolicySerializer; import com.microsoft.azure.storage.SharedAccessProtocols; import com.microsoft.azure.storage.StorageCredentials; import com.microsoft.azure.storage.StorageCredentialsSharedAccessSignature; import com.microsoft.azure.storage.StorageErrorCodeStrings; import com.microsoft.azure.storage.StorageException; import com.microsoft.azure.storage.StorageUri; import com.microsoft.azure.storage.core.ExecutionEngine; import com.microsoft.azure.storage.core.PathUtility; import com.microsoft.azure.storage.core.RequestLocationMode; import com.microsoft.azure.storage.core.SR; import com.microsoft.azure.storage.core.SharedAccessSignatureHelper; import com.microsoft.azure.storage.core.StorageCredentialsHelper; import com.microsoft.azure.storage.core.StorageRequest; import com.microsoft.azure.storage.core.UriQueryBuilder; import com.microsoft.azure.storage.core.Utility;
Represents a share in the Microsoft Azure File service.

Shares hold directories, which are encapsulated as CloudFileDirectory objects, and directories hold files. Directories can also contain sub-directories.

/** * Represents a share in the Microsoft Azure File service. * <p> * Shares hold directories, which are encapsulated as {@link CloudFileDirectory} objects, and directories hold files. * Directories can also contain sub-directories. */
public final class CloudFileShare {
Represents the share metadata.
/** * Represents the share metadata. */
private HashMap<String, String> metadata = new HashMap<String, String>();
Holds the share properties.
/** * Holds the share properties. */
FileShareProperties properties = new FileShareProperties();
Holds the name of the share.
/** * Holds the name of the share. */
String name = null;
Holds the list of URIs for all locations.
/** * Holds the list of URIs for all locations. */
private StorageUri storageUri;
Holds the snapshot ID.
/** * Holds the snapshot ID. */
String snapshotID;
Holds a reference to the associated service client.
/** * Holds a reference to the associated service client. */
private CloudFileClient fileServiceClient;
Creates an instance of the CloudFileShare class using the specified name and client.
Params:
  • shareName – A String which represents the name of the share, which must adhere to share naming rules. The share name should not include any path separator characters (/). Share names must be lowercase, between 3-63 characters long and must start with a letter or number. Share names may contain only letters, numbers, and the dash (-) character.
  • snapshotID – A String that represents the snapshot version, if applicable.
  • client – A CloudFileClient object that represents the associated service client, and that specifies the endpoint for the File service.
Throws:
See Also:
/** * Creates an instance of the <code>CloudFileShare</code> class using the specified name and client. * * @param shareName * A <code>String</code> which represents the name of the share, which must adhere to share * naming rules. * The share name should not include any path separator characters (/). * Share names must be lowercase, between 3-63 characters long and must start with a letter or * number. Share names may contain only letters, numbers, and the dash (-) character. * @param snapshotID * A <code>String</code> that represents the snapshot version, if applicable. * @param client * A {@link CloudFileClient} object that represents the associated service client, and that specifies the * endpoint for the File service. * * @throws StorageException * If a storage service error occurred. * @throws URISyntaxException * If the resource URI constructed based on the shareName is invalid. * * @see <a href="http://msdn.microsoft.com/en-us/library/azure/dn167011.aspx">Naming and Referencing Shares, * Directories, Files, and Metadata</a> */
public CloudFileShare(final String shareName, String snapshotID, final CloudFileClient client) throws URISyntaxException, StorageException { Utility.assertNotNull("client", client); Utility.assertNotNull("shareName", shareName); this.storageUri = PathUtility.appendPathToUri(client.getStorageUri(), shareName); this.name = shareName; this.snapshotID = snapshotID; this.fileServiceClient = client; }
Creates an instance of the CloudFileShare class using the specified URI.
Params:
  • uri – A java.net.URI object that represents the absolute URI of the share.
Throws:
/** * Creates an instance of the <code>CloudFileShare</code> class using the specified URI. * * @param uri * A <code>java.net.URI</code> object that represents the absolute URI of the share. * * @throws StorageException * If a storage service error occurred. */
public CloudFileShare(final URI uri) throws StorageException { this(new StorageUri(uri)); }
Creates an instance of the CloudFileShare class using the specified URI.
Params:
  • storageUri – A StorageUri object which represents the absolute URI of the share.
Throws:
/** * Creates an instance of the <code>CloudFileShare</code> class using the specified URI. * * @param storageUri * A {@link StorageUri} object which represents the absolute URI of the share. * * @throws StorageException * If a storage service error occurred. */
public CloudFileShare(final StorageUri storageUri) throws StorageException { this(storageUri, (StorageCredentials) null); }
Creates an instance of the CloudFileShare class using the specified URI and credentials.
Params:
  • uri – A java.net.URI object that represents the absolute URI of the share.
  • credentials – A StorageCredentials object used to authenticate access.
Throws:
/** * Creates an instance of the <code>CloudFileShare</code> class using the specified URI and credentials. * * @param uri * A <code>java.net.URI</code> object that represents the absolute URI of the share. * @param credentials * A {@link StorageCredentials} object used to authenticate access. * * @throws StorageException * If a storage service error occurred. */
public CloudFileShare(final URI uri, final StorageCredentials credentials/*, String snapshotID*/) throws StorageException { this(new StorageUri(uri), credentials /*, snapshotID*/); }
Creates an instance of the CloudFileShare class using the specified StorageUri and credentials.
Params:
  • storageUri – A StorageUri object which represents the absolute StorageUri of the share.
  • credentials – A StorageCredentials object used to authenticate access.
Throws:
/** * Creates an instance of the <code>CloudFileShare</code> class using the specified StorageUri and credentials. * * @param storageUri * A {@link StorageUri} object which represents the absolute StorageUri of the share. * @param credentials * A {@link StorageCredentials} object used to authenticate access. * @throws StorageException * If a storage service error occurred. */
public CloudFileShare(final StorageUri storageUri, final StorageCredentials credentials/*, String snapshotID*/) throws StorageException { this.parseQueryAndVerify(storageUri, credentials); // if (snapshotID != null) { // if (this.snapshotID != null) { // throw new IllegalArgumentException(SR.SNAPSHOT_QUERY_OPTION_ALREADY_DEFINED); // } // else { // this.snapshotID = snapshotID; // } // } }
Creates the share.
Throws:
  • StorageException – If a storage service error occurred.
/** * Creates the share. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void create() throws StorageException { this.create(null /* options */, null /* opContext */); }
Creates the share using the specified options and operation context.
Params:
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
/** * Creates the share using the specified options and operation context. * * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void create(FileRequestOptions options, OperationContext opContext) throws StorageException { if (opContext == null) { opContext = new OperationContext(); } assertNoSnapshot(); if (this.properties != null && this.properties.getShareQuota() != null) { Utility.assertInBounds("Share Quota", this.properties.getShareQuota(), 1, FileConstants.MAX_SHARE_QUOTA); } opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); ExecutionEngine.executeWithRetry(this.fileServiceClient, this, createImpl(options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, Void> createImpl(final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, Void> putRequest = new StorageRequest<CloudFileClient, CloudFileShare, Void>(options, this.getStorageUri()) { @Override public HttpURLConnection buildRequest(CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { final HttpURLConnection request = FileRequest.createShare( share.getTransformedAddress().getUri(this.getCurrentLocation()), options, context, share.getProperties()); return request; } @Override public void setHeaders(HttpURLConnection connection, CloudFileShare share, OperationContext context) { FileRequest.addMetadata(connection, share.metadata, context); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, 0L, context); } @Override public Void preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_CREATED) { this.setNonExceptionedRetryableFailure(true); return null; } // Set attributes final FileShareAttributes attributes = FileResponse.getFileShareAttributes(this.getConnection(), client.isUsePathStyleUris()); // The response from the service does not include the share quota. // Instead, we keep the existing value. Integer oldShareQuota = share.properties.getShareQuota(); share.properties = attributes.getProperties(); share.properties.setShareQuota(oldShareQuota); return null; } }; return putRequest; }
Creates the share if it does not exist.
Throws:
Returns:true if the share did not already exist and was created; otherwise, false.
/** * Creates the share if it does not exist. * * @return <code>true</code> if the share did not already exist and was created; otherwise, <code>false</code>. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public boolean createIfNotExists() throws StorageException { return this.createIfNotExists(null /* options */, null /* opContext */); }
Creates the share if it does not exist, using the specified request options and operation context.
Params:
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
Returns:true if the share did not already exist and was created; otherwise, false.
/** * Creates the share if it does not exist, using the specified request options and operation context. * * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. * Specifying <code>null</code> will use the default request options from the associated service client * ({@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @return <code>true</code> if the share did not already exist and was created; otherwise, <code>false</code>. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public boolean createIfNotExists(FileRequestOptions options, OperationContext opContext) throws StorageException { options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); boolean exists = this.exists(true /* primaryOnly */, null /* accessCondition */, options, opContext); if (exists) { return false; } else { try { this.create(options, opContext); return true; } catch (StorageException e) { if (e.getHttpStatusCode() == HttpURLConnection.HTTP_CONFLICT && StorageErrorCodeStrings.SHARE_ALREADY_EXISTS.equals(e.getErrorCode())) { return false; } else { throw e; } } } }
Deletes the share.
Throws:
  • StorageException – If a storage service error occurred.
/** * Deletes the share. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void delete() throws StorageException { this.delete(DeleteShareSnapshotsOption.NONE, null /* accessCondition */, null /* options */, null /* opContext */); }
Deletes the share using the specified request options and operation context.
Params:
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
/** * Deletes the share using the specified request options and operation context. * * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void delete(AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { this.delete(DeleteShareSnapshotsOption.NONE, accessCondition, options, opContext); }
Deletes the share using the specified snapshot and request options, and operation context.

A share that has snapshots cannot be deleted unless the snapshots are also deleted. If a share has snapshots, use the DeleteShareSnapshotsOption.INCLUDE_SNAPSHOTS value in the deleteSnapshotsOption parameter to include the snapshots when deleting the base share.

Params:
  • deleteSnapshotsOption – A DeleteShareSnapshotsOption object that indicates whether to delete only snapshots, or the share and its snapshots.
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
/** * Deletes the share using the specified snapshot and request options, and operation context. * <p> * A share that has snapshots cannot be deleted unless the snapshots are also deleted. If a share has snapshots, use * the {@link DeleteShareSnapshotsOption#INCLUDE_SNAPSHOTS} value * in the <code>deleteSnapshotsOption</code> parameter to include the snapshots when deleting the base share. * * @param deleteSnapshotsOption * A {@link DeleteShareSnapshotsOption} object that indicates whether to delete only snapshots, or the share * and its snapshots. * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void delete(DeleteShareSnapshotsOption deleteSnapshotsOption, AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { if (opContext == null) { opContext = new OperationContext(); } opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); ExecutionEngine.executeWithRetry(this.fileServiceClient, this, deleteImpl(deleteSnapshotsOption, accessCondition, options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, Void> deleteImpl( final DeleteShareSnapshotsOption deleteSnapshotsOption, final AccessCondition accessCondition, final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, Void> putRequest = new StorageRequest<CloudFileClient, CloudFileShare, Void>(options, this.getStorageUri()) { @Override public HttpURLConnection buildRequest( CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { return FileRequest.deleteShare( share.getTransformedAddress().getPrimaryUri(), options, context, accessCondition, share.snapshotID, deleteSnapshotsOption); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, -1L, context); } @Override public Void preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_ACCEPTED) { this.setNonExceptionedRetryableFailure(true); } return null; } }; return putRequest; }
Deletes the share if it exists.
Throws:
Returns:true if the share existed and was deleted; otherwise, false.
/** * Deletes the share if it exists. * * @return <code>true</code> if the share existed and was deleted; otherwise, <code>false</code>. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public boolean deleteIfExists() throws StorageException { return this.deleteIfExists(DeleteShareSnapshotsOption.NONE, null /* accessCondition */, null /* options */, null /* opContext */); }
Deletes the share if it exists using the specified request options and operation context.
Params:
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
Returns:true if the share existed and was deleted; otherwise, false.
/** * Deletes the share if it exists using the specified request options and operation context. * * * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @return <code>true</code> if the share existed and was deleted; otherwise, <code>false</code>. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public boolean deleteIfExists(AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { return this.deleteIfExists(DeleteShareSnapshotsOption.NONE, accessCondition, options, opContext); }
Deletes the share if it exists, using the specified snapshot and request options, and operation context.

A share that has snapshots cannot be deleted unless the snapshots are also deleted. If a share has snapshots, use the DeleteShareSnapshotsOption.INCLUDE_SNAPSHOTS value in the deleteSnapshotsOption parameter to include the snapshots when deleting the base share.

Params:
  • deleteSnapshotsOption – A DeleteShareSnapshotsOption object that indicates whether to delete only snapshots, or the share and its snapshots.
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
Returns:true if the share existed and was deleted; otherwise, false.
/** * Deletes the share if it exists, using the specified snapshot and request options, and operation context. * <p> * A share that has snapshots cannot be deleted unless the snapshots are also deleted. If a share has snapshots, use * the {@link DeleteShareSnapshotsOption#INCLUDE_SNAPSHOTS} value * in the <code>deleteSnapshotsOption</code> parameter to include the snapshots when deleting the base share. * * @param deleteSnapshotsOption * A {@link DeleteShareSnapshotsOption} object that indicates whether to delete only snapshots, or the share * and its snapshots. * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @return <code>true</code> if the share existed and was deleted; otherwise, <code>false</code>. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public boolean deleteIfExists(DeleteShareSnapshotsOption deleteSnapshotsOption, AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); boolean exists = this.exists(true /* primaryOnly */, accessCondition, options, opContext); if (exists) { try { this.delete(deleteSnapshotsOption, accessCondition, options, opContext); return true; } catch (StorageException e) { if (e.getHttpStatusCode() == HttpURLConnection.HTTP_NOT_FOUND && StorageErrorCodeStrings.SHARE_NOT_FOUND.equals(e.getErrorCode())) { return false; } else { throw e; } } } else { return false; } }
Downloads the share's attributes, which consist of metadata and properties.
Throws:
  • StorageException – If a storage service error occurred.
/** * Downloads the share's attributes, which consist of metadata and properties. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void downloadAttributes() throws StorageException { this.downloadAttributes(null /* accessCondition */, null /* options */, null /* opContext */); }
Downloads the share's attributes, which consist of metadata and properties, using the specified request options and operation context.
Params:
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
/** * Downloads the share's attributes, which consist of metadata and properties, using the specified request * options and operation context. * * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void downloadAttributes(AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { if (opContext == null) { opContext = new OperationContext(); } opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); ExecutionEngine.executeWithRetry(this.fileServiceClient, this, this.downloadAttributesImpl(accessCondition, options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, Void> downloadAttributesImpl( final AccessCondition accessCondition, final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, Void> getRequest = new StorageRequest<CloudFileClient, CloudFileShare, Void>( options, this.getStorageUri()) { @Override public void setRequestLocationMode() { this.setRequestLocationMode(RequestLocationMode.PRIMARY_OR_SECONDARY); } @Override public HttpURLConnection buildRequest(CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { return FileRequest.getShareProperties(share.getTransformedAddress().getUri(this.getCurrentLocation()), options, context, accessCondition, share.snapshotID); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, -1L, context); } @Override public Void preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_OK) { this.setNonExceptionedRetryableFailure(true); return null; } // Set attributes final FileShareAttributes attributes = FileResponse.getFileShareAttributes(this.getConnection(), client.isUsePathStyleUris()); share.metadata = attributes.getMetadata(); share.properties = attributes.getProperties(); return null; } }; return getRequest; }
Downloads the permission settings for the share.
Throws:
Returns:A FileSharePermissions object that represents the share's permissions.
/** * Downloads the permission settings for the share. * * @return A {@link FileSharePermissions} object that represents the share's permissions. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public FileSharePermissions downloadPermissions() throws StorageException { return this.downloadPermissions(null /* accessCondition */, null /* options */, null /* opContext */); }
Downloads the permissions settings for the share using the specified request options and operation context.
Params:
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
Returns:A FileSharePermissions object that represents the share's permissions.
/** * Downloads the permissions settings for the share using the specified request options and operation context. * * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @return A {@link FileSharePermissions} object that represents the share's permissions. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public FileSharePermissions downloadPermissions(AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { if (opContext == null) { opContext = new OperationContext(); } assertNoSnapshot(); opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); return ExecutionEngine.executeWithRetry(this.fileServiceClient, this, downloadPermissionsImpl(accessCondition, options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, FileSharePermissions> downloadPermissionsImpl( final AccessCondition accessCondition, final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, FileSharePermissions> getRequest = new StorageRequest<CloudFileClient, CloudFileShare, FileSharePermissions>(options, this.getStorageUri()) { @Override public void setRequestLocationMode() { this.setRequestLocationMode(RequestLocationMode.PRIMARY_OR_SECONDARY); } @Override public HttpURLConnection buildRequest(CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { return FileRequest.getAcl(share.getTransformedAddress().getUri(this.getCurrentLocation()), options, accessCondition, context); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, -1L, context); } @Override public FileSharePermissions preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_OK) { this.setNonExceptionedRetryableFailure(true); } share.updatePropertiesFromResponse(this.getConnection()); return new FileSharePermissions(); } @Override public FileSharePermissions postProcessResponse(HttpURLConnection connection, CloudFileShare share, CloudFileClient client, OperationContext context, FileSharePermissions shareAcl) throws Exception { HashMap<String, SharedAccessFilePolicy> accessIds = SharedAccessPolicyHandler.getAccessIdentifiers( this.getConnection().getInputStream(), SharedAccessFilePolicy.class); for (final String key : accessIds.keySet()) { shareAcl.getSharedAccessPolicies().put(key, accessIds.get(key)); } return shareAcl; } }; return getRequest; }
Creates a snapshot of the share.
Throws:
Returns:A CloudFileShare object that represents the snapshot of the share.
/** * Creates a snapshot of the share. * * @return A <code>CloudFileShare</code> object that represents the snapshot of the share. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public final CloudFileShare createSnapshot() throws StorageException { return this .createSnapshot(null /* metadata */, null /* accessCondition */, null /* options */, null /* opContext */); }
Creates a snapshot of the file share using the specified request options and operation context.
Params:
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
Returns:A CloudFileShare object that represents the snapshot of the file share.
/** * Creates a snapshot of the file share using the specified request options and operation context. * * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @return A <code>CloudFileShare</code> object that represents the snapshot of the file share. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public final CloudFileShare createSnapshot(final AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { return this.createSnapshot(null /* metadata */, accessCondition, options, opContext); }
Creates a snapshot of the file share using the specified request options and operation context.
Params:
  • metadata – A collection of name-value pairs defining the metadata of the snapshot, or null.
  • accessCondition – An AccessCondition object that represents the access conditions for the file share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
Returns:A CloudFileShare object that represents the snapshot of the file share.
/** * Creates a snapshot of the file share using the specified request options and operation context. * * @param metadata * A collection of name-value pairs defining the metadata of the snapshot, or null. * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the file share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @return A <code>CloudFileShare</code> object that represents the snapshot of the file share. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public final CloudFileShare createSnapshot(final HashMap<String, String> metadata, final AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { assertNoSnapshot(); if (opContext == null) { opContext = new OperationContext(); } opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); return ExecutionEngine .executeWithRetry(this.fileServiceClient, this, this.createSnapshotImpl(metadata, accessCondition, options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, CloudFileShare> createSnapshotImpl( final HashMap<String, String> metadata, final AccessCondition accessCondition, final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, CloudFileShare> putRequest = new StorageRequest<CloudFileClient, CloudFileShare, CloudFileShare>( options, this.getStorageUri()) { @Override public HttpURLConnection buildRequest(CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { return FileRequest.snapshotShare(share.getTransformedAddress().getUri(this.getCurrentLocation()), options, context, accessCondition); } @Override public void setHeaders(HttpURLConnection connection, CloudFileShare share, OperationContext context) { if (metadata != null) { FileRequest.addMetadata(connection, metadata, context); } } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, 0L, context); } @Override public CloudFileShare preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_CREATED) { this.setNonExceptionedRetryableFailure(true); return null; } final String snapshotTime = FileResponse.getSnapshotTime(this.getConnection()); CloudFileShare snapshot = new CloudFileShare(share.getName(), snapshotTime, client); snapshot.setProperties(new FileShareProperties(share.properties)); // use the specified metadata if not null : otherwise share's metadata snapshot.setMetadata(metadata != null ? metadata : share.metadata); snapshot.updatePropertiesFromResponse(this.getConnection()); return snapshot; } }; return putRequest; }
Queries the service for this share's ShareStats.
Throws:
Returns:A ShareStats object for the given storage service.
/** * Queries the service for this share's {@link ShareStats}. * * @return A {@link ShareStats} object for the given storage service. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public ShareStats getStats() throws StorageException { return getStats(null /* options */, null /* context */); }
Queries the service for this share's ShareStats.
Params:
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
Returns:A ShareStats object for the given storage service.
/** * Queries the service for this share's {@link ShareStats}. * * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client * ({@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @return A {@link ShareStats} object for the given storage service. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public ShareStats getStats(FileRequestOptions options, OperationContext opContext) throws StorageException { if (opContext == null) { opContext = new OperationContext(); } assertNoSnapshot(); opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); return ExecutionEngine.executeWithRetry(this.fileServiceClient, this, getStatsImpl(options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, ShareStats> getStatsImpl(final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, ShareStats> getRequest = new StorageRequest<CloudFileClient, CloudFileShare, ShareStats>(options, this.getStorageUri()) { @Override public void setRequestLocationMode() { this.setRequestLocationMode(RequestLocationMode.PRIMARY_OR_SECONDARY); } @Override public HttpURLConnection buildRequest(CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { return FileRequest.getShareStats(share.getTransformedAddress().getUri(this.getCurrentLocation()), options, context); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, -1L, context); } @Override public ShareStats preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_OK) { this.setNonExceptionedRetryableFailure(true); return null; } share.updatePropertiesFromResponse(this.getConnection()); return null; } @Override public ShareStats postProcessResponse(HttpURLConnection connection, CloudFileShare share, CloudFileClient client, OperationContext context, ShareStats shareStats) throws Exception { return ShareStatsHandler.readShareStatsFromStream(connection.getInputStream()); } }; return getRequest; }
Returns a value that indicates whether the share exists.
Throws:
Returns:true if the share exists, otherwise false.
/** * Returns a value that indicates whether the share exists. * * @return <code>true</code> if the share exists, otherwise <code>false</code>. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public boolean exists() throws StorageException { return this.exists(null /* accessCondition */, null /* options */, null /* opContext */); }
Returns a value that indicates whether the share exists, using the specified request options and operation context.
Params:
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
Returns:true if the share exists, otherwise false.
/** * Returns a value that indicates whether the share exists, using the specified request options and operation * context. * * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @return <code>true</code> if the share exists, otherwise <code>false</code>. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public boolean exists(final AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { return this.exists(false, accessCondition, options, opContext); } @DoesServiceRequest private boolean exists(final boolean primaryOnly, final AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { if (opContext == null) { opContext = new OperationContext(); } opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); return ExecutionEngine.executeWithRetry(this.fileServiceClient, this, this.existsImpl(primaryOnly, accessCondition, options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, Boolean> existsImpl(final boolean primaryOnly, final AccessCondition accessCondition, final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, Boolean> getRequest = new StorageRequest<CloudFileClient, CloudFileShare, Boolean>( options, this.getStorageUri()) { @Override public void setRequestLocationMode() { this.setRequestLocationMode( primaryOnly ? RequestLocationMode.PRIMARY_ONLY : RequestLocationMode.PRIMARY_OR_SECONDARY); } @Override public HttpURLConnection buildRequest(CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { return FileRequest.getShareProperties(share.getTransformedAddress().getUri(this.getCurrentLocation()), options, context, accessCondition, share.snapshotID); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, -1L, context); } @Override public Boolean preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() == HttpURLConnection.HTTP_OK) { share.updatePropertiesFromResponse(this.getConnection()); final FileShareAttributes attributes = FileResponse.getFileShareAttributes(this.getConnection(), client.isUsePathStyleUris()); share.metadata = attributes.getMetadata(); share.properties = attributes.getProperties(); return Boolean.valueOf(true); } else if (this.getResult().getStatusCode() == HttpURLConnection.HTTP_NOT_FOUND) { return Boolean.valueOf(false); } else { this.setNonExceptionedRetryableFailure(true); // return false instead of null to avoid SCA issues return false; } } }; return getRequest; } private void updatePropertiesFromResponse(HttpURLConnection request) { if (this.getProperties() == null) { this.properties = new FileShareProperties(); } // ETag this.getProperties().setEtag(request.getHeaderField(Constants.HeaderConstants.ETAG)); // Last Modified if (0 != request.getLastModified()) { final Calendar lastModifiedCalendar = Calendar.getInstance(Utility.LOCALE_US); lastModifiedCalendar.setTimeZone(Utility.UTC_ZONE); lastModifiedCalendar.setTime(new Date(request.getLastModified())); this.getProperties().setLastModified(lastModifiedCalendar.getTime()); } }
Asserts that the share is not a snapshot.
/** * Asserts that the share is not a snapshot. */
protected void assertNoSnapshot() { if (isSnapshot()) { throw new IllegalArgumentException(SR.INVALID_OPERATION_FOR_A_SHARE_SNAPSHOT); } }
Returns a shared access signature for the share. Note this does not contain the leading "?".
Params:
  • policy – An SharedAccessFilePolicy object that represents the access policy for the shared access signature.
  • groupPolicyIdentifier – A String which represents the share-level access policy.
Throws:
Returns:A String which represents a shared access signature for the share.
/** * Returns a shared access signature for the share. Note this does not contain the leading "?". * * @param policy * An {@link SharedAccessFilePolicy} object that represents the access policy for the * shared access signature. * @param groupPolicyIdentifier * A <code>String</code> which represents the share-level access policy. * * @return A <code>String</code> which represents a shared access signature for the share. * * @throws StorageException * If a storage service error occurred. * @throws InvalidKeyException * If the key is invalid. */
public String generateSharedAccessSignature(final SharedAccessFilePolicy policy, final String groupPolicyIdentifier) throws InvalidKeyException, StorageException { return this.generateSharedAccessSignature(policy, groupPolicyIdentifier, null /* IP range */, null /* protocols */); }
Returns a shared access signature for the share. Note this does not contain the leading "?".
Params:
  • policy – An SharedAccessFilePolicy object that represents the access policy for the shared access signature.
  • groupPolicyIdentifier – A String which represents the share-level access policy.
  • ipRange – A IPRange object containing the range of allowed IP addresses.
  • protocols – A SharedAccessProtocols representing the allowed Internet protocols.
Throws:
Returns:A String which represents a shared access signature for the share.
/** * Returns a shared access signature for the share. Note this does not contain the leading "?". * * @param policy * An {@link SharedAccessFilePolicy} object that represents the access policy for the * shared access signature. * @param groupPolicyIdentifier * A <code>String</code> which represents the share-level access policy. * @param ipRange * A {@link IPRange} object containing the range of allowed IP addresses. * @param protocols * A {@link SharedAccessProtocols} representing the allowed Internet protocols. * * @return A <code>String</code> which represents a shared access signature for the share. * * @throws StorageException * If a storage service error occurred. * @throws InvalidKeyException * If the key is invalid. */
public String generateSharedAccessSignature( final SharedAccessFilePolicy policy, final String groupPolicyIdentifier, final IPRange ipRange, final SharedAccessProtocols protocols) throws InvalidKeyException, StorageException { if (!StorageCredentialsHelper.canCredentialsSignRequest(this.fileServiceClient.getCredentials())) { final String errorMessage = SR.CANNOT_CREATE_SAS_WITHOUT_ACCOUNT_KEY; throw new IllegalArgumentException(errorMessage); } final String resourceName = this.getSharedAccessCanonicalName(); final String signature = SharedAccessSignatureHelper.generateSharedAccessSignatureHashForBlobAndFile( policy, null /* SharedAccessHeaders */, groupPolicyIdentifier, resourceName, ipRange, protocols, this.fileServiceClient, Constants.QueryConstants.FILE_SERVICE, null /* snapshotId */); final UriQueryBuilder builder = SharedAccessSignatureHelper.generateSharedAccessSignatureForBlobAndFile( policy, null /* SharedAccessHeaders */, groupPolicyIdentifier, "s", ipRange, protocols, signature); return builder.toString(); }
Returns the canonical name for shared access.
Returns:the canonical name for shared access.
/** * Returns the canonical name for shared access. * * @return the canonical name for shared access. */
private String getSharedAccessCanonicalName() { String accountName = this.getServiceClient().getCredentials().getAccountName(); String shareName = this.getName(); return String.format("/%s/%s/%s", SR.FILE, accountName, shareName); }
Uploads the share's metadata.
Throws:
  • StorageException – If a storage service error occurred.
/** * Uploads the share's metadata. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void uploadMetadata() throws StorageException { this.uploadMetadata(null /* accessCondition */, null /* options */, null /* opContext */); }
Uploads the share's metadata using the specified request options and operation context.
Params:
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
/** * Uploads the share's metadata using the specified request options and operation context. * * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void uploadMetadata(AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { assertNoSnapshot(); if (opContext == null) { opContext = new OperationContext(); } opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); ExecutionEngine.executeWithRetry(this.fileServiceClient, this, this.uploadMetadataImpl(accessCondition, options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, Void> uploadMetadataImpl( final AccessCondition accessCondition, final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, Void> putRequest = new StorageRequest<CloudFileClient, CloudFileShare, Void>( options, this.getStorageUri()) { @Override public HttpURLConnection buildRequest(CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { return FileRequest.setShareMetadata(share.getTransformedAddress().getUri(this.getCurrentLocation()), options, context, accessCondition); } @Override public void setHeaders(HttpURLConnection connection, CloudFileShare share, OperationContext context) { FileRequest.addMetadata(connection, share.metadata, context); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, 0L, context); } @Override public Void preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_OK) { this.setNonExceptionedRetryableFailure(true); return null; } share.updatePropertiesFromResponse(this.getConnection()); return null; } }; return putRequest; }
Updates the share's properties on the storage service.

Use downloadAttributes to retrieve the latest values for the share's properties and metadata from the Microsoft Azure storage service.

Throws:
/** * Updates the share's properties on the storage service. * <p> * Use {@link CloudFileShare#downloadAttributes} to retrieve the latest values for * the share's properties and metadata from the Microsoft Azure storage service. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public final void uploadProperties() throws StorageException { this.uploadProperties(null /* accessCondition */, null /* options */, null /*opContext */); }
Updates the share's properties using the request options, and operation context.

Use downloadAttributes to retrieve the latest values for the share's properties and metadata from the Microsoft Azure storage service.

Params:
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
/** * Updates the share's properties using the request options, and operation context. * <p> * Use {@link CloudFileShare#downloadAttributes} to retrieve the latest values for * the share's properties and metadata from the Microsoft Azure storage service. * * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public final void uploadProperties( AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { assertNoSnapshot(); if (this.properties != null && this.properties.getShareQuota() != null) { Utility.assertInBounds("Share Quota", this.properties.getShareQuota(), 1, FileConstants.MAX_SHARE_QUOTA); } if (opContext == null) { opContext = new OperationContext(); } opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); ExecutionEngine.executeWithRetry(this.fileServiceClient, this, this.uploadPropertiesImpl(accessCondition, options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, Void> uploadPropertiesImpl( final AccessCondition accessCondition, final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, Void> putRequest = new StorageRequest<CloudFileClient, CloudFileShare, Void>(options, this.getStorageUri()) { @Override public HttpURLConnection buildRequest(CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { return FileRequest.setShareProperties(share.getTransformedAddress().getUri(this.getCurrentLocation()), options, context, accessCondition, share.properties); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, 0L, context); } @Override public Void preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_OK) { this.setNonExceptionedRetryableFailure(true); return null; } share.updatePropertiesFromResponse(this.getConnection()); return null; } }; return putRequest; }
Uploads the share's permissions.
Params:
Throws:
/** * Uploads the share's permissions. * * @param permissions * A {@link FileSharePermissions} object that represents the permissions to upload. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void uploadPermissions(final FileSharePermissions permissions) throws StorageException { this.uploadPermissions(permissions, null /* accessCondition */, null /* options */, null /* opContext */); }
Uploads the share's permissions using the specified request options and operation context.
Params:
  • permissions – A FileSharePermissions object that represents the permissions to upload.
  • accessCondition – An AccessCondition object that represents the access conditions for the share.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
/** * Uploads the share's permissions using the specified request options and operation context. * * @param permissions * A {@link FileSharePermissions} object that represents the permissions to upload. * @param accessCondition * An {@link AccessCondition} object that represents the access conditions for the share. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * * @throws StorageException * If a storage service error occurred. */
@DoesServiceRequest public void uploadPermissions(final FileSharePermissions permissions, final AccessCondition accessCondition, FileRequestOptions options, OperationContext opContext) throws StorageException { assertNoSnapshot(); if (opContext == null) { opContext = new OperationContext(); } opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); ExecutionEngine.executeWithRetry(this.fileServiceClient, this, uploadPermissionsImpl(permissions, accessCondition, options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, Void> uploadPermissionsImpl( final FileSharePermissions permissions, final AccessCondition accessCondition, final FileRequestOptions options) throws StorageException { try { final StringWriter outBuffer = new StringWriter(); SharedAccessPolicySerializer.writeSharedAccessIdentifiersToStream(permissions.getSharedAccessPolicies(), outBuffer); final byte[] aclBytes = outBuffer.toString().getBytes(Constants.UTF8_CHARSET); final StorageRequest<CloudFileClient, CloudFileShare, Void> putRequest = new StorageRequest<CloudFileClient, CloudFileShare, Void>(options, this.getStorageUri()) { @Override public HttpURLConnection buildRequest(CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { this.setSendStream(new ByteArrayInputStream(aclBytes)); this.setLength((long) aclBytes.length); return FileRequest.setAcl(share.getTransformedAddress().getUri(this.getCurrentLocation()), options, context, accessCondition); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, aclBytes.length, context); } @Override public Void preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_OK) { this.setNonExceptionedRetryableFailure(true); return null; } share.updatePropertiesFromResponse(this.getConnection()); return null; } }; return putRequest; } catch (final IllegalArgumentException e) { StorageException translatedException = StorageException.translateException(null, e, null); throw translatedException; } catch (final XMLStreamException e) { // The request was not even made. There was an error while trying to read the permissions. Just throw. StorageException translatedException = StorageException.translateException(null, e, null); throw translatedException; } catch (UnsupportedEncodingException e) { // The request was not even made. There was an error while trying to read the permissions. Just throw. StorageException translatedException = StorageException.translateException(null, e, null); throw translatedException; } }
Creates a file permission.
Params:
  • permission – A String object that represents the file permission to create.
Throws:
Returns: The String representing the file permission key associated with the file permission created.
/** * Creates a file permission. * * @param permission * A <code>String</code> object that represents the file permission to create. * @return * The <code>String</code> representing the file permission key associated with the file permission created. * * @throws StorageException * @throws IOException */
@DoesServiceRequest public String createFilePermission(String permission) throws StorageException, IOException { return this.createFilePermission(permission, null /* options */, null /* opContext */); }
Creates a file permission.
Params:
  • permission – A String object that represents the file permission to create.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
Returns: The String representing the file permission key associated with the file permission created.
/** * Creates a file permission. * * @param permission * A <code>String</code> object that represents the file permission to create. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * @return * The <code>String</code> representing the file permission key associated with the file permission created. * * @throws StorageException * @throws IOException */
@DoesServiceRequest public String createFilePermission(String permission, FileRequestOptions options, OperationContext opContext) throws StorageException, IOException { Utility.assertNotNullOrEmpty("permission", permission); if (opContext == null) { opContext = new OperationContext(); } opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); StringBuilder jsonPermission = new StringBuilder(); jsonPermission.append("{\"permission\": \"").append(permission).append("\"}"); return ExecutionEngine.executeWithRetry(this.fileServiceClient, this, createFilePermissionImpl(jsonPermission.toString(), options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, String> createFilePermissionImpl( final String jsonPermission, final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, String> putRequest = new StorageRequest<CloudFileClient, CloudFileShare, String>(options, this.getStorageUri()) { @Override public HttpURLConnection buildRequest( CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { this.setSendStream(new ByteArrayInputStream(jsonPermission.getBytes())); this.setLength((long) jsonPermission.getBytes().length); return FileRequest.createFilePermission( share.getTransformedAddress().getPrimaryUri(), options, context); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, this.getLength(), context); } @Override public String preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_CREATED) { this.setNonExceptionedRetryableFailure(true); } return this.getConnection().getHeaderField(FileConstants.FILE_PERMISSION_KEY); } }; return putRequest; }
Gets the file permission associated with a file permission key.
Params:
  • filePermissionKey – A String object that represents the file permission key.
Throws:
Returns: The String representing the file permission associated with the file permission key.
/** * Gets the file permission associated with a file permission key. * * @param filePermissionKey * A <code>String</code> object that represents the file permission key. * @return * The <code>String</code> representing the file permission associated with the file permission key. * * @throws StorageException */
public String getFilePermission(String filePermissionKey) throws StorageException { return this.getFilePermission(filePermissionKey, null /* options */, null /* opContext */); }
Gets the file permission associated with a file permission key.
Params:
  • filePermissionKey – A String object that represents the file permission key.
  • options – A FileRequestOptions object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client ( CloudFileClient).
  • opContext – An OperationContext object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation.
Throws:
Returns: The String representing the file permission associated with the file permission key.
/** * Gets the file permission associated with a file permission key. * * @param filePermissionKey * A <code>String</code> object that represents the file permission key. * @param options * A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying * <code>null</code> will use the default request options from the associated service client ( * {@link CloudFileClient}). * @param opContext * An {@link OperationContext} object that represents the context for the current operation. This object * is used to track requests to the storage service, and to provide additional runtime information about * the operation. * @return * The <code>String</code> representing the file permission associated with the file permission key. * * @throws StorageException */
public String getFilePermission(String filePermissionKey, FileRequestOptions options, OperationContext opContext) throws StorageException { Utility.assertNotNullOrEmpty("filePermissionKey", filePermissionKey); if (opContext == null) { opContext = new OperationContext(); } opContext.initialize(); options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient); return ExecutionEngine.executeWithRetry(this.fileServiceClient, this, getFilePermissionImpl(filePermissionKey, options), options.getRetryPolicyFactory(), opContext); } private StorageRequest<CloudFileClient, CloudFileShare, String> getFilePermissionImpl( final String filePermissionKey, final FileRequestOptions options) { final StorageRequest<CloudFileClient, CloudFileShare, String> putRequest = new StorageRequest<CloudFileClient, CloudFileShare, String>(options, this.getStorageUri()) { @Override public HttpURLConnection buildRequest( CloudFileClient client, CloudFileShare share, OperationContext context) throws Exception { return FileRequest.getFilePermission( share.getTransformedAddress().getPrimaryUri(), filePermissionKey, options, context); } @Override public void signRequest(HttpURLConnection connection, CloudFileClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, -1, context); } @Override public String preProcessResponse(CloudFileShare share, CloudFileClient client, OperationContext context) throws IOException { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_OK) { this.setNonExceptionedRetryableFailure(true); } BufferedReader br = new BufferedReader(new InputStreamReader((this.getConnection().getInputStream()))); StringBuilder sb = new StringBuilder(); String output; while ((output = br.readLine()) != null) { sb.append(output); } // Find permission json component Pattern p = Pattern.compile("(?:\"permission\":\")(.*?)(?:\")"); Matcher m = p.matcher(sb.toString()); String permission = null; if (m.find()) { // Extract value from key-value pair String[] extractedData = m.group().split("\"permission\":"); // Shave off quotation marks from json formatted String permission = extractedData[1].substring(1, extractedData[1].length()-1); } return permission; } }; return putRequest; }
Returns a reference to a CloudFileDirectory object that represents the root file directory within this share.
Throws:
Returns:A CloudFileDirectory reference to the root directory for this share.
/** * Returns a reference to a {@link CloudFileDirectory} object that represents the root file directory within this * share. * * @return A {@link CloudFileDirectory} reference to the root directory for this share. * @throws StorageException * @throws URISyntaxException */
public CloudFileDirectory getRootDirectoryReference() throws StorageException, URISyntaxException { return new CloudFileDirectory(this.storageUri, "", this); }
Verifies the passed in URI. Then parses it and uses its components to populate this resource's properties.
Params:
  • completeUri – A StorageUri object which represents the complete URI.
  • credentials – A StorageCredentials object used to authenticate access.
Throws:
/** * Verifies the passed in URI. Then parses it and uses its components to populate this resource's properties. * * @param completeUri * A {@link StorageUri} object which represents the complete URI. * @param credentials * A {@link StorageCredentials} object used to authenticate access. * @throws StorageException * If a storage service error occurred. */
private void parseQueryAndVerify(final StorageUri completeUri, final StorageCredentials credentials) throws StorageException { Utility.assertNotNull("completeUri", completeUri); if (!completeUri.isAbsolute()) { throw new IllegalArgumentException(String.format(SR.RELATIVE_ADDRESS_NOT_PERMITTED, completeUri.toString())); } this.storageUri = PathUtility.stripURIQueryAndFragment(completeUri); final HashMap<String, String[]> queryParameters = PathUtility.parseQueryString(completeUri.getQuery()); final String[] snapshotIDs = queryParameters.get(Constants.QueryConstants.SHARE_SNAPSHOT); if (snapshotIDs != null && snapshotIDs.length > 0) { this.snapshotID = snapshotIDs[0]; } final StorageCredentialsSharedAccessSignature parsedCredentials = SharedAccessSignatureHelper.parseQuery(completeUri); if (credentials != null && parsedCredentials != null) { throw new IllegalArgumentException(SR.MULTIPLE_CREDENTIALS_PROVIDED); } try { final boolean usePathStyleUris = Utility.determinePathStyleFromUri(this.storageUri.getPrimaryUri()); this.fileServiceClient = new CloudFileClient(PathUtility.getServiceClientBaseAddress( this.getStorageUri(), usePathStyleUris), credentials != null ? credentials : parsedCredentials); this.name = PathUtility.getShareNameFromUri(this.storageUri.getPrimaryUri(), usePathStyleUris); } catch (final URISyntaxException e) { throw Utility.generateNewUnexpectedStorageException(e); } }
Returns the File service client associated with this share.
Returns:A CloudFileClient object that represents the service client associated with this share.
/** * Returns the File service client associated with this share. * * @return A {@link CloudFileClient} object that represents the service client associated with this share. */
public CloudFileClient getServiceClient() { return this.fileServiceClient; }
Returns the URI for this share.
Returns:The absolute URI to the share.
/** * Returns the URI for this share. * * @return The absolute URI to the share. */
public URI getUri() { return this.storageUri.getPrimaryUri(); }
Returns the snapshotID for this share.
Returns:The snapshotID as a string for this share.
/** * Returns the snapshotID for this share. * * @return The snapshotID as a string for this share. */
public final String getSnapshot() { return this.snapshotID; }
Indicates whether this share is a snapshot.
See Also:
Returns:true if the share is a snapshot, otherwise false.
/** * Indicates whether this share is a snapshot. * * @return <code>true</code> if the share is a snapshot, otherwise <code>false</code>. * * @see com.microsoft.azure.storage.blob.DeleteSnapshotsOption */
public final boolean isSnapshot() { return this.snapshotID != null; }
Returns the list of URIs for all locations.
Returns:A StorageUri object which represents the list of URIs for all locations.
/** * Returns the list of URIs for all locations. * * @return A {@link StorageUri} object which represents the list of URIs for all locations. */
public StorageUri getStorageUri() { return this.storageUri; }
Returns the snapshot or shared access signature qualified URI for this share.
Throws:
Returns:A java.net.URI object that represents the snapshot or shared access signature.
/** * Returns the snapshot or shared access signature qualified URI for this share. * * @return A <code>java.net.URI</code> object that represents the snapshot or shared access signature. * * @throws StorageException * If a storage service error occurred. * @throws URISyntaxException * If the resource URI is invalid. */
public final URI getQualifiedUri() throws URISyntaxException, StorageException { if (this.isSnapshot()) { return PathUtility.addToQuery(this.getUri(), String.format("sharesnapshot=%s", this.snapshotID)); } return this.fileServiceClient.getCredentials().transformUri(this.getUri()); }
Returns the name of the share.
Returns:A String that represents the name of the share.
/** * Returns the name of the share. * * @return A <code>String</code> that represents the name of the share. */
public String getName() { return this.name; }
Returns the metadata for the share. This value is initialized with the metadata from the share by a call to downloadAttributes, and is set on the share with a call to uploadMetadata.
Returns:A java.util.HashMap object that represents the metadata for the share.
/** * Returns the metadata for the share. This value is initialized with the metadata from the share by a call to * {@link #downloadAttributes}, and is set on the share with a call to {@link #uploadMetadata}. * * @return A <code>java.util.HashMap</code> object that represents the metadata for the share. */
public HashMap<String, String> getMetadata() { return this.metadata; }
Returns the properties for the share.
Returns:A FileShareProperties object that represents the properties for the share.
/** * Returns the properties for the share. * * @return A {@link FileShareProperties} object that represents the properties for the share. */
public FileShareProperties getProperties() { return this.properties; }
Sets the metadata collection of name-value pairs to be set on the share with an uploadMetadata call. This collection will overwrite any existing share metadata. If this is set to an empty collection, the share metadata will be cleared on an uploadMetadata call.
Params:
  • metadata – A java.util.HashMap object that represents the metadata being assigned to the share.
/** * Sets the metadata collection of name-value pairs to be set on the share with an {@link #uploadMetadata} call. * This collection will overwrite any existing share metadata. If this is set to an empty collection, the * share metadata will be cleared on an {@link #uploadMetadata} call. * * @param metadata * A <code>java.util.HashMap</code> object that represents the metadata being assigned to the share. */
public void setMetadata(final HashMap<String, String> metadata) { this.metadata = metadata; }
Sets the properties for the share.
Params:
  • properties – A FileShareProperties object that represents the properties being assigned to the share.
/** * Sets the properties for the share. * * @param properties * A {@link FileShareProperties} object that represents the properties being assigned to the * share. */
public void setProperties(final FileShareProperties properties) { this.properties = properties; }
Returns the URI after applying the authentication transformation.
Throws:
Returns:A java.net.URI object that represents the URI after applying the authentication transformation.
/** * Returns the URI after applying the authentication transformation. * * @return A <code>java.net.URI</code> object that represents the URI after applying the authentication * transformation. * * @throws StorageException * If a storage service error occurred. * @throws URISyntaxException * If the resource URI is invalid. */
private StorageUri getTransformedAddress() throws URISyntaxException, StorageException { return this.fileServiceClient.getCredentials().transformUri(this.storageUri); } }