@VisibleForTesting
 protected void addETagTo(HttpResponse from, MutableContainerPropertiesWithMetadata metadata) {
   String eTag = from.getFirstHeaderOrNull(HttpHeaders.ETAG);
   if (metadata.getETag() == null && eTag != null) {
     metadata.setETag(eTag);
   }
 }
 public ContainerProperties apply(HttpResponse from) {
   MutableContainerPropertiesWithMetadata to = new MutableContainerPropertiesWithMetadataImpl();
   to.setName(request.getInvocation().getArgs().get(0).toString());
   addUserMetadataTo(from, to);
   parseLastModifiedOrThrowException(from, to);
   addETagTo(from, to);
   to.setUrl(request.getEndpoint());
   return to;
 }
 @VisibleForTesting
 void parseLastModifiedOrThrowException(
     HttpResponse from, MutableContainerPropertiesWithMetadata metadata) throws HttpException {
   String lastModified = from.getFirstHeaderOrNull(HttpHeaders.LAST_MODIFIED);
   if (lastModified == null)
     throw new HttpException(
         HttpHeaders.LAST_MODIFIED + " header not present in response: " + from);
   metadata.setLastModified(dateParser.rfc822DateParse(lastModified));
   if (metadata.getLastModified() == null)
     throw new HttpException(
         "could not parse: " + HttpHeaders.LAST_MODIFIED + ": " + lastModified);
 }
 @VisibleForTesting
 void addUserMetadataTo(HttpResponse from, MutableContainerPropertiesWithMetadata metadata) {
   for (Entry<String, String> header : from.getHeaders().entries()) {
     if (header.getKey() != null && header.getKey().startsWith(metadataPrefix))
       metadata
           .getMetadata()
           .put(
               (header.getKey().substring(metadataPrefix.length())).toLowerCase(),
               header.getValue());
   }
 }