docs: def set_data(self, data=None):
          """Sets the content data.
  
          arg:    data (osid.transport.DataInputStream): the content data
          raise:  InvalidArgument - ``data`` is invalid
          raise:  NoAccess - ``Metadata.isReadOnly()`` is ``true``
          raise:  NullArgument - ``data`` is ``null``
          *compliance: mandatory -- This method must be implemented.*
  
          """
          # cjshaw, Jan 7, 2015
          # Testing this with AWS -- set data + set_url (to save the S3 URL)
          # Uses:
          #    1) AWS repository-put user key pair
          #    2) S3 bucket for odl-repository
          #
          # For now, follow a convention of all items need to be in a catalog_id
          # folder...like:
          #    self._repository_id.identifier/<file>
          #
          # following: http://stackoverflow.com/questions/15085864/
          # how-to-upload-a-file-to-directory-in-s3-bucket-using-boto
          odl_repo, url = get_aws_s3_handle(self._config_map)
          repository_id = self._repository_id.get_identifier()
          try:
              filename = data.name.split('/')[-1]
              filename = re.sub(r'[^\w.]', '_', filename)  # clean out the spaces
          except AttributeError:
              filename = ObjectId()
          remote_location = str(repository_id) + '/' + str(filename)
          url += '/' + remote_location
  
          data.seek(0)
  
          odl_repo.put_object(
              Body=data.read(),
              Bucket=self._config_map['s3_bucket'],
              Key=remote_location
          )
          # odl_repo.key = remote_location
          # odl_repo.set_contents_from_file(data._my_data)
  
          # this should set the original S3 location, so we can retrieve the
          # original document if needed
          # do NOT set to the Cloudfront location...that should be locked down for
          # expiring URLs
          # constructed by the Cloudfront keypair only.
          self._payload.set_url(url)