﻿Changes in 8.0.0

OTHER
 * Upgraded the language version to Java 7.
 * Updated the Jackson-Core dependency to version 2.9.4 to pull in security fix.

Changes in 7.0.0

OTHER
 * Upgraded Key Vault dependency to 1.0. Users of the IKey and IKeyResolver interfaces should note the interface changes in this version.
 * The getErrorCode method of StorageExtendedErrorInformation is now deprecated. Use the corresponding methods in RequestResult and StorageException instead.

Changes in 6.0.0

FILE
 * Many File service APIs can now throw a URISyntaxException.
 * Changed listShares() ShareListingDetails parameter to be an enum set like what is done for listing blobs.

OTHER
 * DefaultEndpointsProtocol will now be explicitly included in generated connection strings.
 * Connection string parsing has been substantially re-written and expanded. Please refer to current documentation about connection string formats.

Changes in 5.1.1
OTHER
 * Reverted the code from 5.1.0 because it contained a regression and an accidental change.

Changes in 5.0.0

BLOB
 * getQualifiedUri() has been deprecated. Please use getSnapshotQualifiedUri() instead. This new function will return the blob including the snapshot (if present) and no SAS token.
 * getQualifiedStorageUri() has been deprecated. Please use getSnapshotQualifiedStorageUri() instead. This new function will return the blob including the snapshot (if present) and no SAS token.
 * Fixed a bug where copying from a blob that included a SAS token and a snapshot did not use the SAS token.
 
FILE
 * Fixed a bug where copying from a blob that included a SAS token and a snapshot did not use the SAS token.

QUEUE
 * For addMessage() the CloudQueueMessage message passed in will be populated with the pop receipt, insertion/expiration time, and message ID.

Changes in 4.0.0

TABLE
 * Removed deprecated table AtomPub support.

OTHER
 * Removed deprecated constructors which take service clients in favor of constructors which take credentials.
 * Removed deprecated Credentials and StorageKey classes. Please use the appropriate methods on StorageCredentialsAccountAndKey instead.

Changes in 3.0.0

BLOB
 * Removed getSubDirectoryReference(). Use getDirectoryReference() instead.
 * Changed maxResults argument of CloudBlobDirectory.ListBlobsSegmented() to type Integer instead of int.
 * Deprecated startCopyFromBlob() on CloudBlob. Use startCopy() instead.
 * Deprecated blob and container constructors which take service clients in favor of constructors which take credentials.
 * Invalid lease duration and break period values will cause a client-side StorageException rather than failing on the service.

QUEUE
 * Deprecated queue constructors which take service clients in favor of constructors which take credentials.

TABLE
 * Removed getEntityClass() in TableQuery. Please use getClazzType() instead.
 * Deprecated the setters for timestamp as this property is only modifiable by the service.
 * Deprecated table constructors which take service clients in favor of constructors which take credentials.

FILE
 * Removed getSubDirectoryReference(). Use getDirectoryReference() instead.
 * Changed exception thrown by requesting a file's name from a URI with no file name from StorageException to IllegalArgumentException.
 * Deprecated file, directory and share constructors which take service clients in favor of constructors which take credentials.

OTHER
 * Removed deprecated AuthenticationScheme and its getter and setter. In the future only SharedKey will be used.
 * Removed deprecated getter/setters for all request option properties on the service clients. Please use the default request options getter/setters instead.
 * Deprecated the Credentials and StorageKey classes. Please use the appropriate methods on StorageCredentialsAccountAndKey instead.
 * Changed library behavior to retry all exceptions thrown when parsing a response object.
 * Changed behavior to stop removing query parameters passed in with the resource URI if that URI contains a SAS token. Some query parameters such as comp, restype, snapshot and api-version will still be removed.

Changes in 2.0.0

BLOB
 * Deprecated getSubDirectoryReference(). Use getDirectoryReference() instead. 

TABLE
 * Loses millisecond precision when reading Date values on Table Entities written using versions of this library prior to 2.0.0, unless TableRequestOptions.dateBackwardCompatibility is set to true.  See http://go.microsoft.com/fwlink/?LinkId=523753 for more details.

FILE
 * Deprecated getSubDirectoryReference(). Use getDirectoryReference() instead. 

OTHER
 * Changed maxResults arguments of List*Segmented() methods to type Integer instead of int
 * Added validation to ensure that the maxResults arguments of List*Segmented() methods are positive when non-null
 * Added PARAMETER_SHOULD_BE_GREATER_OR_EQUAL attribute to SR which is used by Utility.assertGreaterThanOrEqual()
 * Deprecated AuthenticationScheme and its getter and setter. In the future only SharedKey will be used.

Changes in 0.7.0

BLOB
 * Removed CloudPageBlob openOutputStream methods in favor of equivalent openWriteNew methods.
 * Removed SharedAccessBlobPolicy permissionsFromString(String) and permissionsToString(EnumSet) static methods in favor of setPermissionsFromString(String) and permissionsToString() instance methods.
 * Moved LeaseDuration, LeaseState, and LeaseStatus from the storage package to the blob package
 * Made the parse(String) methods in LeaseDuration, LeaseState, and LeaseStatus internal
 * Removed BlobType enum parse() method
 * Removed CopyStatus enum parse() method
 * Removed some BlobProperties setter methods (all originally marked "Internal Use Only")
 * BlockEntry searchMode field must be accessed through its getter/setter
 * Applied MaximumExecutionTime to downloadToByteArray and downloadRangeToByteArray methods
 * Deprecated ConcurrentRequestCount and SingleBlobPutThresholdInBytes getters and setters on the blob service client. Use the getters and setters located on the request options object accessible via getDefaultRequestOptions() instead.  

QUEUE
 * Removed SharedAccessQueuePolicy permissionsFromString(String) and permissionsToString(EnumSet) static methods in favor of setPermissionsFromString(String) and permissionsToString() instance methods.
 * Removed CloudQueueMessage setExpirationTime(), setNextVisibleTime() and setPopReceipt() methods

TABLE
 * Moved all execute and executeSegmented methods for TableOperations, TableBatchOperations, and TableQueries from CloudTableClient to CloudTable. The CloudTableClient methods are removed.
 * Removed SharedAccessTablePolicy permissionsFromString(String) and permissionsToString(EnumSet) static methods in favor of setPermissionsFromString(String) and permissionsToString() instance methods.
 * Removed CloudTableClient constructors taking only URI/StorageUri and throw if credentials passed into constructors are null as tables do not allow anonymous access
 * Removed TableConstants class
 * Deprecated the TablePayloadFormat getter and setter on the table service client. Use the getter and setter located on the request options object accessible via getDefaultRequestOptions() instead.

OTHER
 * Changed package name from com.microsoft.windowsazure.storage to com.microsoft.azure.storage
 * Removed OperationContext getCurrentRequestObject/setCurrentReqestObject methods
 * Removed reserved methods from StorageCredentials classes
 * Made the isUsePathStyleUris() method in ServiceClient protected
 * RetryContext currentRetryCount and lastRequestResult fields must be accessed with their corresponding getters/setters
 * Removed some classes/methods originally marked "Internal Use Only": Credentials.getSigningAccountName(), StorageCredentialsAccountAndKey.setSigningAccountName(), DeserializationHelper class
 * Removed GeoReplicationStats.getGeoReplicationStatus(String)
 * Deprecated LocationMode, RetryPolicyFactory, TimeoutInMs, and MaximumExecutionTimeInMs getters and setters on the service clients. Use the getters and setters located on the request options object accessible via getDefaultRequestOptions() instead. 
 * Removed server TimeoutInMs defaults. These are still settable via the DefaultRequestOptions object on the client if desired.
 * Whitespace only metadata values are no longer accepted

Changes in 0.6.0

BLOB
 * container.get{BlockBlob|PageBlob|Directory}Reference, directory.get{BlockBlob, PageBlob, SubDirectory}Reference always treat the string parameter as a relative address.
 * If the parent of a blob is the container, Cloud{BlockBlob|PageBlob|BlobDirectory}.getParent() returns a valid CloudBlobDirectory with an empty prefix. Similarly, container.getDirectoryReference("") gets a valid CloudBlobDirectory representing the container.
 * Blob downloads resume on every retry.
 * Fixed snapshot creates to inherit base blob's metadata/properties unless metadata/properties are specified.
 * Deprecated CloudPageBlob openOutputStream methods in favor of equivalent openWriteNew methods.
 * CloudBlobContainer(String, CloudBlobClient) and CloudBlobClient.getContainerReference(String) always treat the string parameter as a relative address.
 * Deprecated SharedAccessBlobPolicy permissionsFromString(String) and permissionsToString(EnumSet) static methods in favor of setPermissionsFromString(String) and permissionsToString() instance methods.

QUEUE
 * CloudQueue(String, CloudQueueClient) and CloudQueueClient.getQueueReference(String) always treat the string parameter as a relative address.
 * Deprecated SharedAccessQueuePolicy permissionsFromString(String) and permissionsToString(EnumSet) static methods in favor of setPermissionsFromString(String) and permissionsToString() instance methods.

TABLE
 * Moved all execute and executeSegmented methods for TableOperations, TableBatchOperations, and TableQueries from CloudTableClient to CloudTable. The CloudTableClient methods are now marked deprecated.
 * CloudTable(String, CloudTableClient) and CloudTableClient.getTableReference(String) always treat the string parameter as a relative address.
 * Deprecated SharedAccessTablePolicy permissionsFromString(String) and permissionsToString(EnumSet) static methods in favor of setPermissionsFromString(String) and permissionsToString() instance methods.
 * TableOperation(TableEntity, TableOperationType) sets echoContent to false by default.

OTHER
 * Removed OperationContext getCurrentOperationByteCount/setCurrentOperationByteCount and getIntermediateMD5/setIntermediateMD5 methods.
 * Fixed translateException to handle 503 along with other special HTTP codes.
 * Any exception thrown while parsing an error response is ignored and the original exception is returned.
 * Deprecated OperationContext getCurrentRequestObject/setCurrentReqestObject methods.

Changes in 0.5.0

 BLOB 
 * Removed setCopyState property from CloudBlob (was marked RESERVED FOR INTERNAL USE, but this was still accessible.)
 * Modified the CloudBlobContainer exists, delete, uploadMetadata, downloadAttributes APIs to take AccessCondition in order to specify LeaseIDs for these operations.
 * Added throws StorageException to listBlobs and listContainers.
 * Added throws XMLStreamException to commitBlockList.
 * Container and Blob ChangeLease now returns the new lease ID.
 * Blob downloadRange now takes a Long for length instead of int.
 * Blob downloadRange now downloads to a Stream(newly added). The previous downloadRange has been renamed to downloadRangeToByteArray. Added downloadToByteArray.
 * getAttributes in ContainerResponse was made protected (the class was marked RESERVED FOR INTERNAL USE, but this was still accessible.)
 * Removed sparse page blob feature.
 * Moved LeaseAction enum from core package to blob package (was marked RESERVED FOR INTERNAL USE, but this was still accessible.)
 * CloudBlobContainer.createIfNotExist was renamed to CloudBlobContainer.createIfNotExists.
 * CloudBlobClient.streamMinimumReadSizeInBytes has been removed.  This functionality is now CloudBlob.streamMinimumReadSizeInBytes (settable per-blob, not per-client.)
 * CloudBlobClient.pageBlobStreamWriteSizeInBytes and CloudBlobClient.writeBlockSizeInBytes have been removed.  This functionality is now CloudBlob.streamWriteSizeInBytes, settable per-blob, and now using only one variable.
 * copyFromBlob has been renamed to startCopyFromBlob. This API requests the service to start copying a blob's contents, properties, and metadata to a new blob and returns the copy ID associated with the copy operation.
 * CloudBlob.tryBreakLease() was removed, as this method didn't do anything useful (BreakLease is already idempotent.)
 * Removed all getDirectoryReference, getPageBlobReference, getBlockBlobReference methods from CloudBlobClient.
 * CloudContainer(String name, CloudBlobClient client) assert that client is not null.

 QUEUE
 * CloudQueue.createIfNotExist was renamed to CloudQueue.createIfNotExists.
 * CloudQueue(String name, CloudQueueClient client) assert that client is not null.

 TABLE
 * Removed id field (along with getId, setId) from TableResult.
 * CloudTable.createIfNotExist was renamed to CloudTable.createIfNotExists.
 * CloudTable(String name, CloudTableClient client) assert that client is not null.
 * inserts in TableOperation and TableBatchOperation do not echo content any more. This will cause the resulting HTTP status code on the TableResult for successful inserts to be 204 (no-content) rather than 201 (Created). Echo content can be re-enabled by using the insert(TableEntity, boolean) method and specifying true.
 * Added throws StorageException to executeQuery methods for tables.

 OTHER
 * The packaging structure has changed to
	1. com.microsoft.windowsazure.storage � RetryPolicies, LocationMode, StorageException, Storage Credentials etc. Basically all public classes that are common across services.
	2. com.microsoft.windowsazure.storage.core � These classes are reserved for internal use and users never have to include this namespace in their projects. 
	3. com.microsoft.windowsazure.storage.blob
	4. com.microsoft.windowsazure.storage.queue
	5. com.microsoft.windowsazure.storage.table
 * StorageErrorConstants: INVALID_XML_NODE_VALUE, UNSUPPORTED_XML_NODE has been removed.
 * RetryResult class has been replaced by the RetryInfo class. Custom retry policies should implement RetryPolicyFactory and extend RetryPolicy.
 * Event operations (including event firing) that occur during a request are no longer synchronized, thread safety is now guaranteed by a CopyOnWriteArrayList of the event listeners.
 * Many project dependencies were removed from the pom. Current dependencies are junit, hamcrest, commons-lang3, jackson, and slf4j.
