List of usage examples for com.amazonaws.services.dynamodbv2.document.spec ScanSpec withFilterExpression
public ScanSpec withFilterExpression(String filterExpression)
From source file:com.clicktravel.infrastructure.persistence.aws.dynamodb.DynamoDocumentStoreTemplate.java
License:Apache License
private <T extends Item> ScanSpec generateScanSpec(final AttributeQuery query, final Class<T> tableItemType) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { final Class<?> clazz = getScanSpecOperandType(query.getAttributeName(), tableItemType); ScanSpec scanSpec = new ScanSpec(); final StringBuilder filterExpression = new StringBuilder(); final ValueMap valueMap = new ValueMap(); int valueMapCount = 0; if (query.getCondition().getComparisonOperator() == Operators.NULL) { filterExpression.append("attribute_not_exists(").append(query.getAttributeName()).append(")"); } else if (query.getCondition().getComparisonOperator() == Operators.NOT_NULL) { filterExpression.append("attribute_exists(").append(query.getAttributeName()).append(")"); } else {/* w w w.ja v a2 s. co m*/ if (query.getCondition().getComparisonOperator() == Operators.EQUALS) { filterExpression.append(query.getAttributeName()).append(" IN ("); final Iterator<String> valueIterator = query.getCondition().getValues().iterator(); while (valueIterator.hasNext()) { filterExpression.append(":").append(valueMapCount); valueMap.with(":" + valueMapCount, valueIterator.next()); valueMapCount++; if (valueIterator.hasNext()) { filterExpression.append(","); } } filterExpression.append(")"); } else if (query.getCondition().getComparisonOperator() == Operators.LESS_THAN_OR_EQUALS) { if (query.getCondition().getValues().size() == 1) { filterExpression.append(query.getAttributeName()).append(" <= ").append(":") .append(valueMapCount); final Object valueInstance = clazz.getConstructor(String.class) .newInstance(query.getCondition().getValues().iterator().next()); valueMap.with(":" + valueMapCount, valueInstance); valueMapCount++; } else { // throw exeption?? } } else if (query.getCondition().getComparisonOperator() == Operators.GREATER_THAN_OR_EQUALS) { if (query.getCondition().getValues().size() == 1) { filterExpression.append(query.getAttributeName()).append(" >= ").append(":") .append(valueMapCount); final Object valueInstance = clazz.getConstructor(String.class) .newInstance(query.getCondition().getValues().iterator().next()); valueMap.with(":" + valueMapCount, valueInstance); valueMapCount++; } else { // throw exeption?? } } } if (filterExpression.length() > 0) { scanSpec = scanSpec.withFilterExpression(filterExpression.toString()); } if (valueMap.size() > 0) { scanSpec = scanSpec.withValueMap(valueMap); } return scanSpec; }