package org.springframework.data.simpledb.query.parser;
import org.springframework.data.simpledb.annotation.Query;
import org.springframework.util.StringUtils;
/**
* Acts as a Parser for Building the Custom Query based on the given {@link Query} parameters<br/>
* <br/>
*/
public final class QueryParserUtils {
private QueryParserUtils() {
}
public static String buildQueryFromQueryParameters(String valueParameter, String[] rawSelectParameters,
String rawWhereParameters, String domainName) {
if(StringUtils.hasText(valueParameter)) {
return valueParameter;
}
StringBuilder stringBuilder = new StringBuilder();
appendSelectClause(stringBuilder, rawSelectParameters);
appendFromClause(stringBuilder, domainName);
appendWhereClauseIfPresent(stringBuilder, rawWhereParameters);
return stringBuilder.toString();
}
public static String createQueryClause(String clause, String[] rawParameters, String delimiter) {
StringBuilder query = new StringBuilder(clause);
int idx = 1;
for(String rawParameter : rawParameters) {
query.append(rawParameter);
if(idx++ != rawParameters.length) {
query.append(delimiter);
}
}
return query.toString();
}
private static void appendWhereClauseIfPresent(StringBuilder stringBuilder, String rawWhereParameters) {
if(StringUtils.hasText(rawWhereParameters)) {
stringBuilder.append(" where " + rawWhereParameters);
}
}
private static void appendFromClause(StringBuilder stringBuilder, String domainName) {
stringBuilder.append(" from `" + domainName + "`");
}
private static void appendSelectClause(StringBuilder stringBuilder, String[] rawSelectParameters) {
if(StringUtils.hasText(rawSelectParameters[0])) {
stringBuilder.append(createQueryClause("select ", rawSelectParameters, ", "));
} else {
stringBuilder.append("select *");
}
}
}