diff --git a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/TableContract.java b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/TableContract.java index 63ec2c1b2086..233f3d800140 100644 --- a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/TableContract.java +++ b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/TableContract.java @@ -24,7 +24,6 @@ import com.microsoft.windowsazure.services.table.models.GetServicePropertiesResult; import com.microsoft.windowsazure.services.table.models.GetTableResult; import com.microsoft.windowsazure.services.table.models.InsertEntityResult; -import com.microsoft.windowsazure.services.table.models.ListTablesOptions; import com.microsoft.windowsazure.services.table.models.QueryEntitiesOptions; import com.microsoft.windowsazure.services.table.models.QueryEntitiesResult; import com.microsoft.windowsazure.services.table.models.QueryTablesOptions; @@ -54,10 +53,6 @@ public interface TableContract extends FilterableService { GetTableResult getTable(String table, TableServiceOptions options) throws ServiceException; - QueryTablesResult listTables() throws ServiceException; - - QueryTablesResult listTables(ListTablesOptions options) throws ServiceException; - QueryTablesResult queryTables() throws ServiceException; QueryTablesResult queryTables(QueryTablesOptions options) throws ServiceException; diff --git a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/TableExceptionProcessor.java b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/TableExceptionProcessor.java index c8bf695b7cdd..8f4bc110d4da 100644 --- a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/TableExceptionProcessor.java +++ b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/TableExceptionProcessor.java @@ -31,7 +31,6 @@ import com.microsoft.windowsazure.services.table.models.GetServicePropertiesResult; import com.microsoft.windowsazure.services.table.models.GetTableResult; import com.microsoft.windowsazure.services.table.models.InsertEntityResult; -import com.microsoft.windowsazure.services.table.models.ListTablesOptions; import com.microsoft.windowsazure.services.table.models.QueryEntitiesOptions; import com.microsoft.windowsazure.services.table.models.QueryEntitiesResult; import com.microsoft.windowsazure.services.table.models.QueryTablesOptions; @@ -222,32 +221,6 @@ public QueryTablesResult queryTables(QueryTablesOptions options) throws ServiceE } } - @Override - public QueryTablesResult listTables() throws ServiceException { - try { - return service.listTables(); - } - catch (UniformInterfaceException e) { - throw processCatch(new ServiceException(e)); - } - catch (ClientHandlerException e) { - throw processCatch(new ServiceException(e)); - } - } - - @Override - public QueryTablesResult listTables(ListTablesOptions options) throws ServiceException { - try { - return service.listTables(options); - } - catch (UniformInterfaceException e) { - throw processCatch(new ServiceException(e)); - } - catch (ClientHandlerException e) { - throw processCatch(new ServiceException(e)); - } - } - @Override public InsertEntityResult insertEntity(String table, Entity entity) throws ServiceException { try { diff --git a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/TableRestProxy.java b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/TableRestProxy.java index 096c5b4ec312..2e32f907f46c 100644 --- a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/TableRestProxy.java +++ b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/TableRestProxy.java @@ -67,7 +67,6 @@ import com.microsoft.windowsazure.services.table.models.GetServicePropertiesResult; import com.microsoft.windowsazure.services.table.models.GetTableResult; import com.microsoft.windowsazure.services.table.models.InsertEntityResult; -import com.microsoft.windowsazure.services.table.models.ListTablesOptions; import com.microsoft.windowsazure.services.table.models.LitteralFilter; import com.microsoft.windowsazure.services.table.models.Query; import com.microsoft.windowsazure.services.table.models.QueryEntitiesOptions; @@ -311,23 +310,6 @@ public GetTableResult getTable(String table, TableServiceOptions options) throws return result; } - @Override - public QueryTablesResult listTables() throws ServiceException { - return listTables(new ListTablesOptions()); - } - - @Override - public QueryTablesResult listTables(ListTablesOptions options) throws ServiceException { - // Append Max char to end '{' is 1 + 'z' in AsciiTable ==> uppperBound is prefix + '{' - Filter filter = Filter.and(Filter.ge(Filter.litteral("TableName"), Filter.constant(options.getPrefix())), - Filter.le(Filter.litteral("TableName"), Filter.constant(options.getPrefix() + "{"))); - - QueryTablesOptions queryTableOptions = new QueryTablesOptions(); - queryTableOptions.setTimeout(options.getTimeout()); - queryTableOptions.setQuery(new Query().setFilter(filter)); - return queryTables(queryTableOptions); - } - @Override public QueryTablesResult queryTables() throws ServiceException { return queryTables(new QueryTablesOptions()); @@ -335,9 +317,36 @@ public QueryTablesResult queryTables() throws ServiceException { @Override public QueryTablesResult queryTables(QueryTablesOptions options) throws ServiceException { + + Query query = options.getQuery(); + String nextTableName = options.getNextTableName(); + String prefix = options.getPrefix(); + + if (prefix != null) { + // Append Max char to end '{' is 1 + 'z' in AsciiTable ==> upperBound is prefix + '{' + Filter prefixFilter = Filter.and(Filter.ge(Filter.litteral("TableName"), Filter.constant(prefix)), + Filter.le(Filter.litteral("TableName"), Filter.constant(prefix + "{"))); + + // a new query is needed if prefix alone is passed in + if (query == null) { + query = new Query(); + } + + // examine the existing filter on the query + if (query.getFilter() == null) { + // use the prefix filter if the query filter is null + query.setFilter(prefixFilter); + } + else { + // combine and use the prefix filter if the query filter exists + Filter combinedFilter = Filter.and(query.getFilter(), prefixFilter); + query.setFilter(combinedFilter); + } + } + WebResource webResource = getResource(options).path("Tables"); - webResource = addOptionalQuery(webResource, options.getQuery()); - webResource = addOptionalQueryParam(webResource, "NextTableName", options.getNextTableName()); + webResource = addOptionalQuery(webResource, query); + webResource = addOptionalQueryParam(webResource, "NextTableName", nextTableName); WebResource.Builder builder = webResource.getRequestBuilder(); builder = addTableRequestHeaders(builder); diff --git a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/models/ListTablesOptions.java b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/models/ListTablesOptions.java deleted file mode 100644 index 25f042b564f0..000000000000 --- a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/models/ListTablesOptions.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.microsoft.windowsazure.services.table.models; - -public class ListTablesOptions extends TableServiceOptions { - private String prefix; - - @Override - public ListTablesOptions setTimeout(Integer timeout) { - super.setTimeout(timeout); - return this; - } - - public String getPrefix() { - return prefix; - } - - public ListTablesOptions setPrefix(String prefix) { - this.prefix = prefix; - return this; - } -} diff --git a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/models/QueryTablesOptions.java b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/models/QueryTablesOptions.java index d402cd8527cc..b910ff6364d0 100644 --- a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/models/QueryTablesOptions.java +++ b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/models/QueryTablesOptions.java @@ -3,6 +3,7 @@ public class QueryTablesOptions extends TableServiceOptions { private String nextTableName; private Query query; + private String prefix; @Override public QueryTablesOptions setTimeout(Integer timeout) { @@ -27,4 +28,13 @@ public QueryTablesOptions setNextTableName(String nextTableName) { this.nextTableName = nextTableName; return this; } + + public String getPrefix() { + return prefix; + } + + public QueryTablesOptions setPrefix(String prefix) { + this.prefix = prefix; + return this; + } } diff --git a/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/table/TableServiceIntegrationTest.java b/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/table/TableServiceIntegrationTest.java index c8143349741d..4a4146a5055d 100644 --- a/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/table/TableServiceIntegrationTest.java +++ b/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/table/TableServiceIntegrationTest.java @@ -40,10 +40,10 @@ import com.microsoft.windowsazure.services.table.models.GetEntityResult; import com.microsoft.windowsazure.services.table.models.GetTableResult; import com.microsoft.windowsazure.services.table.models.InsertEntityResult; -import com.microsoft.windowsazure.services.table.models.ListTablesOptions; import com.microsoft.windowsazure.services.table.models.Query; import com.microsoft.windowsazure.services.table.models.QueryEntitiesOptions; import com.microsoft.windowsazure.services.table.models.QueryEntitiesResult; +import com.microsoft.windowsazure.services.table.models.QueryTablesOptions; import com.microsoft.windowsazure.services.table.models.QueryTablesResult; import com.microsoft.windowsazure.services.table.models.ServiceProperties; import com.microsoft.windowsazure.services.table.models.TableEntry; @@ -117,7 +117,7 @@ private static void createTables(TableContract service, String prefix, String[] // Retry creating every table as long as we get "409 - Table being deleted" error service = service.withFilter(new RetryPolicyFilter(new ExponentialRetryPolicy(new int[] { 409 }))); - Set containers = listTables(service, prefix); + Set containers = queryTables(service, prefix); for (String item : list) { if (!containers.contains(item)) { service.createTable(item); @@ -126,7 +126,7 @@ private static void createTables(TableContract service, String prefix, String[] } private static void deleteTables(TableContract service, String prefix, String[] list) throws Exception { - Set containers = listTables(service, prefix); + Set containers = queryTables(service, prefix); for (String item : list) { if (containers.contains(item)) { service.deleteTable(item); @@ -145,9 +145,9 @@ private static void deleteAllTables(TableContract service, String[] list) throws } } - private static Set listTables(TableContract service, String prefix) throws Exception { + private static Set queryTables(TableContract service, String prefix) throws Exception { HashSet result = new HashSet(); - QueryTablesResult list = service.listTables(new ListTablesOptions().setPrefix(prefix)); + QueryTablesResult list = service.queryTables(new QueryTablesOptions().setPrefix(prefix)); for (TableEntry item : list.getTables()) { result.add(item.getName()); } @@ -267,19 +267,6 @@ public void queryTablesWorks() throws Exception { assertNotNull(result); } - @Test - public void listTablesWorks() throws Exception { - // Arrange - Configuration config = createConfiguration(); - TableContract service = TableService.create(config); - - // Act - QueryTablesResult result = service.listTables(); - - // Assert - assertNotNull(result); - } - @Test public void queryTablesWithPrefixWorks() throws Exception { // Arrange @@ -287,7 +274,7 @@ public void queryTablesWithPrefixWorks() throws Exception { TableContract service = TableService.create(config); // Act - QueryTablesResult result = service.listTables(new ListTablesOptions().setPrefix(testTablesPrefix)); + QueryTablesResult result = service.queryTables(new QueryTablesOptions().setPrefix(testTablesPrefix)); // Assert assertNotNull(result);