Skip to content

Commit

Permalink
Issue javaswift#18 - Account.list() and Container.list() now hide the…
Browse files Browse the repository at this point in the history
… maximum page size implementation detail and return all entity headers inside
  • Loading branch information
robert-bor committed Apr 17, 2013
1 parent 69618b9 commit c922c4c
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 34 deletions.
7 changes: 3 additions & 4 deletions pom.xml
Expand Up @@ -3,7 +3,7 @@

<groupId>org.javaswift</groupId>
<artifactId>joss</artifactId>
<version>0.9.0-SNAPSHOT</version>
<version>0.8.3-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Java OpenStack Storage</name>
<description>Java Client library for OpenStack Storage (Swift)</description>
Expand Down Expand Up @@ -47,8 +47,7 @@
<httpcomponents.version>4.2.1</httpcomponents.version>
<jackson.version>1.9.7</jackson.version>
<junit.version>4.10</junit.version>
<mockito.version>1.9.0</mockito.version>
<powermock.version>1.4.12</powermock.version>
<mockit.version>1.1</mockit.version>
<slf4j.version>1.7.2</slf4j.version>
<!-- Reporting -->
<maven.cobertura.version>2.5.2</maven.cobertura.version>
Expand Down Expand Up @@ -90,7 +89,7 @@
<dependency>
<groupId>com.googlecode.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.1</version>
<version>${mockit.version}</version>
</dependency>

<!-- Used for unit testing -->
Expand Down
32 changes: 17 additions & 15 deletions src/main/java/org/javaswift/joss/client/core/AbstractAccount.java
Expand Up @@ -12,7 +12,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public abstract class AbstractAccount extends AbstractObjectStoreEntity<AccountInformation> implements Account {

Expand All @@ -26,14 +28,28 @@ public abstract class AbstractAccount extends AbstractObjectStoreEntity<AccountI

private final AccountCommandFactory commandFactory;

public AbstractAccount(AccountCommandFactory commandFactory, boolean allowCaching) {
super(allowCaching);
this.commandFactory = commandFactory;
this.info = new AccountInformation();
}

public Collection<Container> list() {
return list(null, null, getMaxPageSize());
return new AccountPaginationMap(this, null, MAX_PAGE_SIZE).listAllItems();
}

public Collection<Container> list(PaginationMap paginationMap, int page) {
return list(paginationMap.getPrefix(), paginationMap.getMarker(page), paginationMap.getPageSize());
}

public Collection<Container> list(String prefix, String marker, int pageSize) {
ListInstructions listInstructions = new ListInstructions()
.setPrefix(prefix)
.setMarker(marker)
.setLimit(pageSize);
return commandFactory.createListContainersCommand(this, listInstructions).call();
}

public PaginationMap getPaginationMap(String prefix, int pageSize) {
return new AccountPaginationMap(this, prefix, pageSize).buildMap();
}
Expand All @@ -42,12 +58,6 @@ public PaginationMap getPaginationMap(int pageSize) {
return getPaginationMap(null, pageSize);
}

public AbstractAccount(AccountCommandFactory commandFactory, boolean allowCaching) {
super(allowCaching);
this.commandFactory = commandFactory;
this.info = new AccountInformation();
}

public AbstractAccount setHost(String host) {
LOG.info("JOSS / Use host: "+host);
this.commandFactory.setHost(host);
Expand Down Expand Up @@ -108,14 +118,6 @@ public String getPublicURL() {
return this.commandFactory.getPublicURL();
}

public Collection<Container> list(String prefix, String marker, int pageSize) {
ListInstructions listInstructions = new ListInstructions()
.setPrefix(prefix)
.setMarker(marker)
.setLimit(pageSize);
return commandFactory.createListContainersCommand(this, listInstructions).call();
}

@Override
protected void saveMetadata() {
commandFactory.createAccountMetadataCommand(this, info.getMetadata()).call();
Expand Down
28 changes: 15 additions & 13 deletions src/main/java/org/javaswift/joss/client/core/AbstractContainer.java
Expand Up @@ -19,7 +19,9 @@

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public abstract class AbstractContainer extends AbstractObjectStoreEntity<ContainerInformation> implements Container {

Expand All @@ -41,18 +43,26 @@ public AbstractContainer(ContainerCommandFactory commandFactory, Account account
this.info = new ContainerInformation();
}

public void metadataSetFromHeaders() {
this.staleHeaders = false;
}

public Collection<StoredObject> list() {
return list(null, null, getMaxPageSize());
return new ContainerPaginationMap(this, null, MAX_PAGE_SIZE).listAllItems();
}

public Collection<StoredObject> list(PaginationMap paginationMap, int page) {
return list(paginationMap.getPrefix(), paginationMap.getMarker(page), paginationMap.getPageSize());
}

public Collection<StoredObject> list(String prefix, String marker, int pageSize) {
ListInstructions listInstructions = new ListInstructions()
.setPrefix(prefix)
.setMarker(marker)
.setLimit(pageSize);
return commandFactory.createListObjectsCommand(getAccount(), this, listInstructions).call();
}

public void metadataSetFromHeaders() {
this.staleHeaders = false;
}

public PaginationMap getPaginationMap(String prefix, int pageSize) {
return new ContainerPaginationMap(this, prefix, pageSize).buildMap();
}
Expand Down Expand Up @@ -154,14 +164,6 @@ public void setContainerRights(boolean publicContainer) {
this.info.setPublicContainer(publicContainer);
}

public Collection<StoredObject> list(String prefix, String marker, int pageSize) {
ListInstructions listInstructions = new ListInstructions()
.setPrefix(prefix)
.setMarker(marker)
.setLimit(pageSize);
return commandFactory.createListObjectsCommand(getAccount(), this, listInstructions).call();
}

public Container create() {
commandFactory.createCreateContainerCommand(getAccount(), this).call();
return this;
Expand Down
Expand Up @@ -6,6 +6,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.TreeMap;
Expand Down Expand Up @@ -34,6 +35,12 @@ public AbstractPaginationMap(ListHolder<Child> listHolder, String prefix, int pa
}

public AbstractPaginationMap buildMap() {
listAllItems();
return this;
}

public Collection<Child> listAllItems() {
Collection<Child> allChildren = new ArrayList<Child>();
int recordsToGo = listHolder.getCount();
String marker = null;
int page = 0;
Expand All @@ -50,12 +57,13 @@ public AbstractPaginationMap buildMap() {
}
}
recordsToGo -= children.size() == 0 ? recordsToGo : (children.size() < blockSize ? children.size() : blockSize);
allChildren.addAll(children);
}
if (locationInPage == 0) { // Remove last page if no elements follow it
pageToMarker.remove(pageToMarker.size() - 1);
}
LOG.info("JOSS / Created PaginationMap with "+pageToMarker.size()+" pages for a total of "+numberOfRecords+" records");
return this;
return allChildren;
}

@Override
Expand Down
Expand Up @@ -39,6 +39,9 @@ protected void prepareMetadata() {
@Test
public void listContainers() throws IOException {
loadSampleJson("/sample-container-list.json");
List<Header> headers = new ArrayList<Header>();
prepareHeader(response, X_ACCOUNT_CONTAINER_COUNT, "4", headers);
prepareHeadersForRetrieval(response, headers);
Collection<Container> containers = account.list();
assertEquals(4, containers.size());
}
Expand Down
Expand Up @@ -41,7 +41,9 @@ protected void prepareMetadata() {
@Test
public void listObjects() throws IOException {
loadSampleJson("/sample-object-list.json");
expectStatusCode(200);
List<Header> headers = new ArrayList<Header>();
prepareHeader(response, X_CONTAINER_OBJECT_COUNT, "4", headers);
prepareHeadersForRetrieval(response, headers);
Collection<StoredObject> objects = container.list();
assertEquals(4, objects.size());
}
Expand Down

0 comments on commit c922c4c

Please sign in to comment.