blob: 212d775bb9ed503d491cb5c57c180a10cb49c14d [file] [log] [blame]
/*
* 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.blobstore.options;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.base.Objects;
/**
* Contains options supported in the list container operation. <h2>
* Usage</h2> The recommended way to instantiate a ListOptions object is to statically import
* ListContainerOptions.* and invoke a static creation method followed by an instance mutator (if
* needed):
* <p/>
* <code>
* import static org.jclouds.blobstore.options.ListContainerOptions.Builder.*
* <p/>
* BlobStore connection = // get connection
* Future<ListResponse<ResourceMetadata>> list = connection.list("container",prefix("home/users").maxResults(1000));
* <code>
*/
public class ListContainerOptions extends ListOptions implements Cloneable {
public static final ImmutableListContainerOptions NONE = new ImmutableListContainerOptions(
new ListContainerOptions());
private String delimiter;
private String dir;
private String prefix;
private boolean recursive;
private boolean detailed;
public ListContainerOptions() {
}
ListContainerOptions(Integer maxKeys, String marker, String dir, boolean recursive,
boolean detailed, String prefix, String delimiter) {
super(maxKeys, marker);
this.dir = dir;
this.recursive = recursive;
this.detailed = detailed;
this.prefix = prefix;
this.delimiter = delimiter;
}
public static class ImmutableListContainerOptions extends ListContainerOptions {
private final ListContainerOptions delegate;
@Override
public ListContainerOptions afterMarker(String marker) {
throw new UnsupportedOperationException();
}
public ImmutableListContainerOptions(ListContainerOptions delegate) {
this.delegate = delegate;
}
@Override
public String getDir() {
return delegate.getDir();
}
@Override
public ListContainerOptions inDirectory(String dir) {
throw new UnsupportedOperationException();
}
@Override
public boolean isDetailed() {
return delegate.isDetailed();
}
@Override
public boolean isRecursive() {
return delegate.isRecursive();
}
@Override
public ListContainerOptions maxResults(int maxKeys) {
throw new UnsupportedOperationException();
}
@Override
public ListContainerOptions recursive() {
throw new UnsupportedOperationException();
}
@Override
public String getMarker() {
return delegate.getMarker();
}
@Override
public Integer getMaxResults() {
return delegate.getMaxResults();
}
@Override
public String getPrefix() {
return delegate.getPrefix();
}
@Override
public ListContainerOptions prefix(String prefix) {
throw new UnsupportedOperationException();
}
@Override
public ListContainerOptions clone() {
return delegate.clone();
}
@Override
public ListContainerOptions delimiter(String delimiterString) {
throw new UnsupportedOperationException();
}
@Override
public String getDelimiter() {
return delegate.getDelimiter();
}
@Override
public String toString() {
return delegate.toString();
}
}
/**
* @deprecated superseded by ListContainerOptions.getPrefix and ListContainerOptions.getDelimiter.
*/
@Deprecated
public String getDir() {
return dir;
}
public String getDelimiter() {
return delimiter;
}
public boolean isRecursive() {
return recursive;
}
public boolean isDetailed() {
return detailed;
}
public String getPrefix() {
return prefix;
}
/**
* This will list the contents of a virtual or real directory path.
*
* @deprecated superseded by ListContainerOptions.prefix and ListContainerOptions.delimiter.
*/
@Deprecated
public ListContainerOptions inDirectory(String dir) {
checkNotNull(dir, "dir");
checkArgument(!dir.equals("/"), "dir must not be a slash");
this.dir = dir;
return this;
}
/**
* {@inheritDoc}
*/
@Override
public ListContainerOptions afterMarker(String marker) {
return (ListContainerOptions) super.afterMarker(marker);
}
/**
* {@inheritDoc}
*/
@Override
public ListContainerOptions maxResults(int maxKeys) {
return (ListContainerOptions) super.maxResults(maxKeys);
}
/**
* return a listing of all objects inside the store, recursively.
*/
public ListContainerOptions recursive() {
// checkArgument(path == null, "path and recursive combination currently not supported");
this.recursive = true;
return this;
}
/**
* populate each result with detailed such as metadata even if it incurs extra requests to the
* service.
*/
public ListContainerOptions withDetails() {
this.detailed = true;
return this;
}
/**
* Only list keys that start with the supplied prefix
*/
public ListContainerOptions prefix(String prefix) {
this.prefix = prefix;
return this;
}
/**
* specify the delimiter to be used when listing
*
*/
public ListContainerOptions delimiter(String delimiterString) {
this.delimiter = delimiterString;
return this;
}
public static class Builder {
/**
* @see ListContainerOptions#inDirectory(String)
* @deprecated superseded by ListContainerOptions.prefix and ListContainerOptions.delimiter.
*/
@Deprecated
public static ListContainerOptions inDirectory(String directory) {
ListContainerOptions options = new ListContainerOptions();
return options.inDirectory(directory);
}
/**
* @see ListContainerOptions#afterMarker(String)
*/
public static ListContainerOptions afterMarker(String marker) {
ListContainerOptions options = new ListContainerOptions();
return options.afterMarker(marker);
}
/**
* @see ListContainerOptions#maxResults(int)
*/
public static ListContainerOptions maxResults(int maxKeys) {
ListContainerOptions options = new ListContainerOptions();
return options.maxResults(maxKeys);
}
/**
* @see ListContainerOptions#recursive()
*/
public static ListContainerOptions recursive() {
ListContainerOptions options = new ListContainerOptions();
return options.recursive();
}
/**
* @see ListContainerOptions#withDetails()
*/
public static ListContainerOptions withDetails() {
ListContainerOptions options = new ListContainerOptions();
return options.withDetails();
}
/**
* @see ListContainerOptions#prefix(String)
*/
public static ListContainerOptions prefix(String prefix) {
ListContainerOptions options = new ListContainerOptions();
return options.prefix(prefix);
}
/**
* @see ListContainerOptions#delimiter(String)
*/
public static ListContainerOptions delimiter(String delimiterString) {
ListContainerOptions options = new ListContainerOptions();
return options.delimiter(delimiterString);
}
}
@Override
public ListContainerOptions clone() {
return new ListContainerOptions(getMaxResults(), getMarker(), dir, recursive, detailed, prefix, delimiter);
}
@Override
public String toString() {
return "[dir=" + dir + ", recursive=" + recursive + ", detailed=" + detailed
+ ", prefix=" + prefix + ", marker=" + getMarker()
+ ", delimiter=" + delimiter
+ ", maxResults=" + getMaxResults() + "]";
}
@Override
public int hashCode() {
return Objects.hashCode(detailed, recursive, dir, getMarker(), getMaxResults());
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ListContainerOptions other = (ListContainerOptions) obj;
return (detailed == other.detailed) &&
recursive == other.recursive &&
Objects.equal(dir, other.dir) &&
Objects.equal(prefix, other.prefix) &&
Objects.equal(getMarker(), other.getMarker()) &&
Objects.equal(getMaxResults(), other.getMaxResults());
}
}