List of usage examples for com.amazonaws.services.dynamodbv2.model QueryRequest withIndexName
public QueryRequest withIndexName(String indexName)
The name of an index to query.
From source file:com.clicktravel.infrastructure.persistence.aws.dynamodb.DynamoDbTemplate.java
License:Apache License
private <T extends Item> Collection<T> executeQuery(final AttributeQuery query, final Class<T> itemClass) { final ItemConfiguration itemConfiguration = getItemConfiguration(itemClass); final com.amazonaws.services.dynamodbv2.model.Condition condition = new com.amazonaws.services.dynamodbv2.model.Condition(); if (query.getCondition().getComparisonOperator() == Operators.NULL) { condition.setComparisonOperator(ComparisonOperator.NULL); } else if (query.getCondition().getComparisonOperator() == Operators.NOT_NULL) { condition.setComparisonOperator(ComparisonOperator.NOT_NULL); } else {/*from w ww . java2s .com*/ if (query.getCondition().getComparisonOperator() == Operators.EQUALS) { condition.setComparisonOperator(ComparisonOperator.EQ); } else if (query.getCondition().getComparisonOperator() == Operators.LESS_THAN_OR_EQUALS) { condition.setComparisonOperator(ComparisonOperator.LE); } else if (query.getCondition().getComparisonOperator() == Operators.GREATER_THAN_OR_EQUALS) { condition.setComparisonOperator(ComparisonOperator.GE); } final Collection<AttributeValue> attributeValueList = new ArrayList<>(); for (final String value : query.getCondition().getValues()) { if (value != null && !value.isEmpty()) { attributeValueList.add(new AttributeValue(value)); } } if (attributeValueList.size() == 0) { return new ArrayList<>(); } condition.setAttributeValueList(attributeValueList); } final Map<String, com.amazonaws.services.dynamodbv2.model.Condition> conditions = new HashMap<>(); conditions.put(query.getAttributeName(), condition); final List<T> totalItems = new ArrayList<>(); Map<String, AttributeValue> lastEvaluatedKey = null; final String tableName = databaseSchemaHolder.schemaName() + "." + itemConfiguration.tableName(); if (itemConfiguration.hasIndexOn(query.getAttributeName())) { do { final String queryAttributeName = query.getAttributeName(); final PrimaryKeyDefinition primaryKeyDefinition = itemConfiguration.primaryKeyDefinition(); final String primaryKeyPropertyName = primaryKeyDefinition.propertyName(); final boolean isPrimaryKeyQuery = queryAttributeName.equals(primaryKeyPropertyName); final QueryRequest queryRequest = new QueryRequest().withTableName(tableName) .withKeyConditions(conditions).withExclusiveStartKey(lastEvaluatedKey); if (!isPrimaryKeyQuery) { queryRequest.withIndexName(queryAttributeName + "_idx"); } final QueryResult queryResult; try { queryResult = amazonDynamoDbClient.query(queryRequest); } catch (final AmazonServiceException e) { throw new PersistenceResourceFailureException("Failure while attempting DynamoDb Query", e); } totalItems.addAll(marshallIntoObjects(itemClass, queryResult.getItems())); lastEvaluatedKey = queryResult.getLastEvaluatedKey(); } while (lastEvaluatedKey != null); } else { logger.debug("Performing table scan with query: " + query); do { final ScanRequest scanRequest = new ScanRequest().withTableName(tableName) .withScanFilter(conditions).withExclusiveStartKey(lastEvaluatedKey); final ScanResult scanResult; try { scanResult = amazonDynamoDbClient.scan(scanRequest); } catch (final AmazonServiceException e) { throw new PersistenceResourceFailureException("Failure while attempting DynamoDb Scan", e); } totalItems.addAll(marshallIntoObjects(itemClass, scanResult.getItems())); lastEvaluatedKey = scanResult.getLastEvaluatedKey(); } while (lastEvaluatedKey != null); } return totalItems; }