Skip to content

Commit

Permalink
Use Default HTTP Exception Type AutoRest Configuration in Storage (Az…
Browse files Browse the repository at this point in the history
  • Loading branch information
alzimmermsft authored Nov 30, 2021
1 parent f254a1b commit fc8b4e9
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 307 deletions.
15 changes: 8 additions & 7 deletions sdk/storage/azure-storage-blob/swagger/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ sync-methods: none
license-header: MICROSOFT_MIT_SMALL
context-client-method-parameter: true
optional-constant-as-enum: true
default-http-exception-type: com.azure.storage.blob.models.BlobStorageException
models-subpackage: implementation.models
custom-types: BlobAccessPolicy,AccessTier,AccountKind,ArchiveStatus,BlobHttpHeaders,BlobContainerItem,BlobContainerItemProperties,BlobContainerEncryptionScope,BlobServiceProperties,BlobType,Block,BlockList,BlockListType,BlockLookupList,ClearRange,CopyStatusType,BlobCorsRule,CpkInfo,CustomerProvidedKeyInfo,DeleteSnapshotsOptionType,EncryptionAlgorithmType,FilterBlobsItem,GeoReplication,GeoReplicationStatusType,KeyInfo,LeaseDurationType,LeaseStateType,LeaseStatusType,ListBlobContainersIncludeType,ListBlobsIncludeItem,BlobAnalyticsLogging,BlobMetrics,PageList,PageRange,PathRenameMode,PublicAccessType,RehydratePriority,BlobRetentionPolicy,SequenceNumberActionType,BlobSignedIdentifier,SkuName,StaticWebsite,BlobErrorCode,BlobServiceStatistics,SyncCopyStatusType,UserDelegationKey,BlobQueryHeaders,GeoReplicationStatus,BlobImmutabilityPolicyMode
custom-types-subpackage: models
Expand Down Expand Up @@ -543,13 +544,13 @@ directive:
$.DenyEncryptionScopeOverride["x-ms-parameter-grouping"]["name"] = "blob-container-encryption-scope";
```
### Rename cpk-scope-info to encryption-scope
``` yaml
directive:
- from: swagger-document
where: $.parameters
transform: >
$.EncryptionScope["x-ms-parameter-grouping"]["name"] = "encryption-scope";
### Rename cpk-scope-info to encryption-scope
``` yaml
directive:
- from: swagger-document
where: $.parameters
transform: >
$.EncryptionScope["x-ms-parameter-grouping"]["name"] = "encryption-scope";
```
### Block size int to long transition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,109 +17,16 @@
public class BlobStorageCustomization extends Customization {
@Override
public void customize(LibraryCustomization customization, Logger logger) {

PackageCustomization impl = customization.getPackage("com.azure.storage.blob.implementation");

ClassCustomization appendBlobsImpl = impl.getClass("AppendBlobsImpl");
modifyUnexpectedResponseExceptionType(appendBlobsImpl.getMethod("create"));
modifyUnexpectedResponseExceptionType(appendBlobsImpl.getMethod("appendBlock"));
modifyUnexpectedResponseExceptionType(appendBlobsImpl.getMethod("appendBlockFromUrl"));
modifyUnexpectedResponseExceptionType(appendBlobsImpl.getMethod("seal"));

ClassCustomization blobsImpl = impl.getClass("BlobsImpl");
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("download"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("getProperties"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("delete"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("undelete"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("setExpiry"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("setHttpHeaders"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("setImmutabilityPolicy"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("deleteImmutabilityPolicy"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("setLegalHold"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("setMetadata"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("acquireLease"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("releaseLease"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("renewLease"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("changeLease"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("breakLease"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("createSnapshot"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("renewLease"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("changeLease"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("startCopyFromURL"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("copyFromURL"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("abortCopyFromURL"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("setTier"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("getAccountInfo"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("query"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("getTags"));
modifyUnexpectedResponseExceptionType(blobsImpl.getMethod("setTags"));

ClassCustomization blockBlobsImpl = impl.getClass("BlockBlobsImpl");
modifyUnexpectedResponseExceptionType(blockBlobsImpl.getMethod("upload"));
modifyUnexpectedResponseExceptionType(blockBlobsImpl.getMethod("putBlobFromUrl"));
modifyUnexpectedResponseExceptionType(blockBlobsImpl.getMethod("stageBlock"));
modifyUnexpectedResponseExceptionType(blockBlobsImpl.getMethod("stageBlockFromURL"));
modifyUnexpectedResponseExceptionType(blockBlobsImpl.getMethod("commitBlockList"));
modifyUnexpectedResponseExceptionType(blockBlobsImpl.getMethod("getBlockList"));

ClassCustomization containersImpl = impl.getClass("ContainersImpl");
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("create"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("getProperties"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("delete"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("setMetadata"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("getAccessPolicy"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("setAccessPolicy"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("restore"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("rename"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("submitBatch"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("acquireLease"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("releaseLease"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("renewLease"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("breakLease"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("changeLease"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("listBlobFlatSegment"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("listBlobHierarchySegment"));
modifyUnexpectedResponseExceptionType(containersImpl.getMethod("getAccountInfo"));

ClassCustomization pageBlobsImpl = impl.getClass("PageBlobsImpl");
modifyUnexpectedResponseExceptionType(pageBlobsImpl.getMethod("create"));
modifyUnexpectedResponseExceptionType(pageBlobsImpl.getMethod("uploadPages"));
modifyUnexpectedResponseExceptionType(pageBlobsImpl.getMethod("clearPages"));
modifyUnexpectedResponseExceptionType(pageBlobsImpl.getMethod("uploadPagesFromURL"));
modifyUnexpectedResponseExceptionType(pageBlobsImpl.getMethod("getPageRanges"));
modifyUnexpectedResponseExceptionType(pageBlobsImpl.getMethod("getPageRangesDiff"));
modifyUnexpectedResponseExceptionType(pageBlobsImpl.getMethod("resize"));
modifyUnexpectedResponseExceptionType(pageBlobsImpl.getMethod("updateSequenceNumber"));
modifyUnexpectedResponseExceptionType(pageBlobsImpl.getMethod("copyIncremental"));

ClassCustomization servicesImpl = impl.getClass("ServicesImpl");
modifyUnexpectedResponseExceptionType(servicesImpl.getMethod("setProperties"));
modifyUnexpectedResponseExceptionType(servicesImpl.getMethod("getProperties"));
modifyUnexpectedResponseExceptionType(servicesImpl.getMethod("getStatistics"));
modifyUnexpectedResponseExceptionType(servicesImpl.getMethod("listBlobContainersSegment"));
modifyUnexpectedResponseExceptionType(servicesImpl.getMethod("getUserDelegationKey"));
modifyUnexpectedResponseExceptionType(servicesImpl.getMethod("getAccountInfo"));
modifyUnexpectedResponseExceptionType(servicesImpl.getMethod("submitBatch"));
modifyUnexpectedResponseExceptionType(servicesImpl.getMethod("filterBlobs"));

// Implementation models customizations
PackageCustomization implementationModels = customization.getPackage("com.azure.storage.blob.implementation.models");

implementationModels.getClass("BlobHierarchyListSegment").addAnnotation("@JsonDeserialize(using = com.azure.storage.blob.implementation.util.CustomHierarchicalListingDeserializer.class)");
implementationModels.getClass("BlobPrefix").rename("BlobPrefixInternal");

ClassCustomization blobItemInternal = implementationModels.getClass("BlobItemInternal");
PropertyCustomization objectReplicationMetadata = blobItemInternal.getProperty("objectReplicationMetadata");
objectReplicationMetadata.removeAnnotation("@JsonProperty(value = \"ObjectReplicationMetadata\")")
.addAnnotation("@JsonProperty(value = \"OrMetadata\")");

ClassCustomization blobPrefix = implementationModels.getClass("BlobPrefix");
blobPrefix.rename("BlobPrefixInternal");

// Models customizations
PackageCustomization models = customization.getPackage("com.azure.storage.blob.models");
models.getClass("PageList").addAnnotation("@JsonDeserialize(using = PageListDeserializer.class)");

ClassCustomization blobHttpHeaders = models.getClass("BlobHttpHeaders");
blobHttpHeaders.removeAnnotation("@JacksonXmlRootElement(localName = \"BlobHttpHeaders\")")
.addAnnotation("@JacksonXmlRootElement(localName = \"blob-http-headers\")");
blobHttpHeaders.getMethod("getContentMd5").getJavadoc().setDescription("Get the contentMd5 property: " +
"Optional. An MD5 hash of the blob content. Note that this hash is not validated, as the hashes for " +
"the individual blocks were validated when each was uploaded. The value does not need to be base64 " +
Expand All @@ -130,8 +37,6 @@ public void customize(LibraryCustomization customization, Logger logger) {
"encoded as the SDK will perform the encoding.");

ClassCustomization blobContainerEncryptionScope = models.getClass("BlobContainerEncryptionScope");
blobContainerEncryptionScope.removeAnnotation("@JacksonXmlRootElement(localName = \"BlobContainerEncryptionScope\")")
.addAnnotation("@JacksonXmlRootElement(localName = \"blob-container-encryption-scope\")");
PropertyCustomization defaultEncryptionScope = blobContainerEncryptionScope.getProperty("defaultEncryptionScope");
defaultEncryptionScope.removeAnnotation("@JsonProperty(value = \"DefaultEncryptionScope\")")
.addAnnotation("@JsonProperty(value = \"defaultEncryptionScope\")");
Expand All @@ -147,33 +52,19 @@ public void customize(LibraryCustomization customization, Logger logger) {
// Block - Generator
ClassCustomization block = models.getClass("Block");

MethodCustomization getSizeInt = block.getMethod("getSizeInt")
block.getMethod("getSizeInt")
.rename("getSize")
.addAnnotation("@Deprecated")
.setReturnType("int", "return (int) this.sizeLong; // return %s;", true);
getSizeInt.getJavadoc().setDeprecated("Use {@link #getSizeLong()}");
.setReturnType("int", "return (int) this.sizeLong; // return %s;", true)
.getJavadoc()
.setDeprecated("Use {@link #getSizeLong()}");

MethodCustomization setSizeInt = block.getMethod("setSizeInt")
block.getMethod("setSizeInt")
.rename("setSize")
.addAnnotation("@Deprecated")
.setReturnType("Block", "return %s.setSizeLong((long) sizeInt);", true);
setSizeInt.getJavadoc().setDeprecated("Use {@link #setSizeLong(long)}");

ClassCustomization blobServiceProperties = models.getClass("BlobServiceProperties");
PropertyCustomization hourMetrics = blobServiceProperties.getProperty("hourMetrics");
hourMetrics.removeAnnotation("@JsonProperty(value = \"Metrics\")")
.addAnnotation("@JsonProperty(value = \"HourMetrics\")");
PropertyCustomization minuteMetrics = blobServiceProperties.getProperty("minuteMetrics");
minuteMetrics.removeAnnotation("@JsonProperty(value = \"Metrics\")")
.addAnnotation("@JsonProperty(value = \"MinuteMetrics\")");
PropertyCustomization deleteRetentionPolicy = blobServiceProperties.getProperty("deleteRetentionPolicy");
deleteRetentionPolicy.removeAnnotation("@JsonProperty(value = \"RetentionPolicy\")")
.addAnnotation("@JsonProperty(value = \"DeleteRetentionPolicy\")");

// CPKInfo - New generator removed a property and it's getter and setter methods.
ClassCustomization cpkInfo = models.getClass("CpkInfo")
.removeAnnotation("@JacksonXmlRootElement(localName = \"CpkInfo\")")
.addAnnotation("@JacksonXmlRootElement(localName = \"cpk-info\")");
.setReturnType("Block", "return %s.setSizeLong((long) sizeInt);", true)
.getJavadoc()
.setDeprecated("Use {@link #setSizeLong(long)}");

String fileName = "src/main/java/com/azure/storage/blob/models/BlobContainerItemProperties.java";
String updatedCode = customization.getRawEditor()
Expand All @@ -188,9 +79,4 @@ public void customize(LibraryCustomization customization, Logger logger) {
.renameEnumMember("LEGALHOLD", "LEGAL_HOLD")
.renameEnumMember("DELETEDWITHVERSIONS", "DELETED_WITH_VERSIONS");
}

private void modifyUnexpectedResponseExceptionType(MethodCustomization method) {
method.removeAnnotation("@UnexpectedResponseExceptionType(StorageErrorException.class)")
.addAnnotation("@UnexpectedResponseExceptionType(com.azure.storage.blob.models.BlobStorageException.class)");
}
}
23 changes: 13 additions & 10 deletions sdk/storage/azure-storage-file-datalake/swagger/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ sync-methods: none
license-header: MICROSOFT_MIT_SMALL
context-client-method-parameter: true
optional-constant-as-enum: true
default-http-exception-type: com.azure.storage.file.datalake.models.DataLakeStorageException
models-subpackage: implementation.models
custom-types: FileSystemInfo,FileSystemItem,FileSystemProperties,PathInfo,PathItem,PathProperties,ListFileSystemsOptions,PathHttpHeaders
custom-types-subpackage: models
Expand Down Expand Up @@ -70,16 +71,7 @@ directive:
$.TransactionalContentMD5["x-ms-parameter-grouping"].name = "path-http-headers";
```
### Make eTag in Path JsonProperty to etag
``` yaml
directive:
- from: Path.java
where: $
transform: >
return $.replace('@JsonProperty(value = "eTag")\n private String eTag;', '@JsonProperty(value = "etag")\n private String eTag;');
```
### Delete FileSystem_ListPaths x-ms-pageable as autorest doesnt allow you to set the nextLinkName to be a header.
### Delete FileSystem_ListPaths x-ms-pageable as autorest doesn't allow you to set the nextLinkName to be a header.
``` yaml
directive:
- from: swagger-document
Expand Down Expand Up @@ -112,5 +104,16 @@ directive:
}
```
### Turn Path eTag into eta
``` yaml
directive:
- from: swagger-document
where: $.definitions.Path
transform: >
$.properties.etag = $.properties.eTag;
delete $.properties.eTag;
$.properties.etag["x-ms-client-name"] = "eTag";
```
![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-java%2Fsdk%2Fstorage%2Fazure-storage-file-datalake%2Fswagger%2FREADME.png)
Loading

0 comments on commit fc8b4e9

Please sign in to comment.