code: def _finalize_azure_file(self, sd, metadata, digest):
          # type: (SyncCopy, blobxfer.models.synccopy.Descriptor, dict,
          #        str) -> None
          
          # set file properties if required
          if (blobxfer.util.is_not_empty(digest) or
                  sd.dst_entity.cache_control is not None):
              blobxfer.operations.azure.file.set_file_properties(
                  sd.dst_entity, digest)
              if blobxfer.util.is_not_empty(sd.dst_entity.replica_targets):
                  for ase in sd.dst_entity.replica_targets:
                      blobxfer.operations.azure.file.set_file_properties(
                          ase, digest)
          # set file metadata if needed
          if blobxfer.util.is_not_empty(metadata):
              blobxfer.operations.azure.file.set_file_metadata(
                  sd.dst_entity, metadata)
              if blobxfer.util.is_not_empty(sd.dst_entity.replica_targets):
                  for ase in sd.dst_entity.replica_targets:
                      blobxfer.operations.azure.file.set_file_metadata(
                          ase, metadata)
docs: Finalize Azure File
          :param SyncCopy self: this
          :param blobxfer.models.synccopy.Descriptor sd: synccopy descriptor
          :param dict metadata: metadata dict
          :param str digest: md5 digest