gaul commented on a change in pull request #125: URL: https://github.com/apache/jclouds/pull/125#discussion_r746509476
########## File path: apis/s3/src/main/java/org/jclouds/s3/domain/internal/ListVersionsResponseImpl.java ########## @@ -0,0 +1,208 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.s3.domain.internal; + +import java.util.LinkedHashSet; +import java.util.Set; + +import com.google.common.collect.Iterables; + +import org.jclouds.s3.domain.ListVersionsResponse; +import org.jclouds.s3.domain.ObjectMetadata; + +public class ListVersionsResponseImpl extends LinkedHashSet<ObjectMetadata> + implements ListVersionsResponse { + + protected final String name; + protected final String prefix; + protected final int maxKeys; + protected final String delimiter; + protected final String marker; + protected final String nextMarker; + protected final Set<String> commonPrefixes; + protected final boolean truncated; + protected final String nextVersionIdMarker; + protected final String versionIdMarker; + + public ListVersionsResponseImpl(String name, + Iterable<ObjectMetadata> version, + String prefix, String marker, + String nextMarker, int maxKeys, + String delimiter, boolean truncated, + Set<String> commonPrefixes + ) { + Iterables.addAll(this, version); + this.name = name; + this.prefix = prefix; + this.maxKeys = maxKeys; + this.delimiter = delimiter; + this.marker = marker; + this.nextMarker = nextMarker; + this.commonPrefixes = commonPrefixes; + this.truncated = truncated; + this.nextVersionIdMarker = null; + this.versionIdMarker = null; + } + + + /** + * {@inheritDoc} + */ + @Override + public Set<String> getCommonPrefixes() { + return commonPrefixes; + } + + @Override + public String getNextVersionIdMarker() { + return null; + } + + @Override + public String getVersionIdMarker() { + return null; + } + + /** + * {@inheritDoc} + */ + @Override + public String getDelimiter() { + return delimiter; + } + + /** + * {@inheritDoc} + */ + @Override + public String getMarker() { + return marker; + } + + /** + * {@inheritDoc} + */ + @Override + public String getNextMarker() { + return nextMarker; + } + + /** + * {@inheritDoc} + */ + @Override + public int getMaxKeys() { + return maxKeys; + } + + /** + * {@inheritDoc} + */ + @Override + public String getPrefix() { + return prefix; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isTruncated() { + return truncated; + } + + /** + * {@inheritDoc} + */ + @Override + public String getName() { + return name; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + + ((commonPrefixes == null) ? 0 : commonPrefixes.hashCode()); + result = + prime * result + ((delimiter == null) ? 0 : delimiter.hashCode()); + result = prime * result + ((marker == null) ? 0 : marker.hashCode()); + result = prime * result + maxKeys; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((prefix == null) ? 0 : prefix.hashCode()); + result = prime * result + (truncated ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { Review comment: Can you implement these in terms of `Objects.hash` and `Objects.equal` as below? ########## File path: apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java ########## @@ -174,7 +189,12 @@ public void setContainerAccess(String container, ContainerAccess access) { @Override public PageSet<? extends StorageMetadata> list(String container, ListContainerOptions options) { ListBucketOptions httpOptions = container2BucketListOptions.apply(options); - PageSet<? extends StorageMetadata> list = bucket2ResourceList.apply(sync.listBucket(container, httpOptions)); + PageSet<? extends StorageMetadata> list = null; + if (httpOptions.getVersions()){ Review comment: This can throw `NullPointerException` when it return `null`. Can you change the implementation of `getVersions` to return `false` when it is not specified? ########## File path: apis/s3/src/main/java/org/jclouds/s3/config/S3HttpApiModule.java ########## @@ -184,7 +184,7 @@ protected void bindErrorHandlers() { } protected void bindRequestSigner() { - bind(RequestAuthorizeSignature.class).to(RequestAuthorizeSignatureV2.class).in(Scopes.SINGLETON); + bind(RequestAuthorizeSignature.class).to(RequestAuthorizeSignatureV4.class).in(Scopes.SINGLETON); Review comment: I am willing to entertain changing the default to V4 but this should at least be a separate change. We also probably need to document how to easily use the older signer. ########## File path: blobstore/src/main/java/org/jclouds/blobstore/options/ListContainerOptions.java ########## @@ -231,6 +244,15 @@ public ListContainerOptions delimiter(String delimiterString) { return this; } + /** + * return a listing of all objects inside the store, recursively. + */ + public ListContainerOptions versions() { + // checkArgument(path == null, "path and recursive combination currently not supported"); Review comment: commented out code ########## File path: apis/s3/src/main/java/org/jclouds/s3/S3Client.java ########## @@ -260,7 +264,7 @@ DeleteResult deleteObjects(@Bucket @EndpointParam(parser = AssignCorrectHostname * @return ETag of the content uploaded * @throws org.jclouds.http.HttpResponseException * if the conditions requested set are not satisfied by the object on the server. - * @see org.jclouds.s3.domain.CannedAccessPolicy#PRIVATE + * @see CannedAccessPolicy#PRIVATE Review comment: There are a lot of noise changes in this PR -- can you revert them? ########## File path: blobstore/src/main/java/org/jclouds/blobstore/domain/internal/MutableStorageMetadataImpl.java ########## @@ -93,6 +107,16 @@ public void setETag(String eTag) { this.eTag = eTag; } + @Override + public void setVersionId(String versionId) { + this.versionId = versionId; + } + + @Override + public void setIsLatest(String isLatest) { + this.isLatest = isLatest; Review comment: indentation ########## File path: apis/s3/src/main/java/org/jclouds/s3/S3Client.java ########## @@ -640,6 +651,30 @@ void enableBucketLogging(@Bucket @EndpointParam(parser = AssignCorrectHostnameFo void disableBucketLogging(@Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam( BindNoBucketLoggingToXmlPayload.class) @ParamValidators(BucketNameValidator.class) String bucketName); + @Named("GetBucketConfiguration") + @GET + @Path("/") + @ResponseParser(BucketConfigurationHandler.class) + String getBucketConfiguration(@Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam( + BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName, + BucketConfigOptions... options); + + @Named("DeleteBucketConfiguration") + @DELETE + @Path("/") + @ResponseParser(BucketConfigurationHandler.class) + String deleteBucketConfiguration(@Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam( + BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName, BucketConfigOptions... options); + + @Named("PutBucketConfiguration") + @PUT + @Path("/") + @ResponseParser(BucketConfigurationHandler.class) + String putBucketConfiguration(@Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam( Review comment: Can you pull the bucket configuration into a separate PR with unit tests? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
