EMMA Coverage Report (generated Mon Jan 28 16:15:17 GMT 2013)
[all classes][org.springframework.data.elasticsearch.repository.query]

COVERAGE SUMMARY FOR SOURCE FILE [ElasticsearchStringQuery.java]

nameclass, %method, %block, %line, %
ElasticsearchStringQuery.java100% (1/1)100% (6/6)91%  (134/148)91%  (30/33)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ElasticsearchStringQuery100% (1/1)100% (6/6)91%  (134/148)91%  (30/33)
execute (Object []): Object 100% (1/1)74%  (25/34)80%  (4/5)
getParameterWithIndex (ParametersParameterAccessor, int): String 100% (1/1)80%  (20/25)67%  (4/6)
<static initializer> 100% (1/1)100% (4/4)100% (1/1)
ElasticsearchStringQuery (ElasticsearchQueryMethod, ElasticsearchOperations, ... 100% (1/1)100% (46/46)100% (11/11)
createQuery (ParametersParameterAccessor): StringQuery 100% (1/1)100% (11/11)100% (2/2)
replacePlaceholders (String, ParametersParameterAccessor): String 100% (1/1)100% (28/28)100% (8/8)

1package org.springframework.data.elasticsearch.repository.query;
2 
3 
4import org.springframework.core.convert.support.GenericConversionService;
5import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
6import org.springframework.data.elasticsearch.core.convert.DateTimeConverters;
7import org.springframework.data.elasticsearch.core.query.StringQuery;
8import org.springframework.data.repository.query.ParametersParameterAccessor;
9import org.springframework.util.Assert;
10 
11import java.util.regex.Matcher;
12import java.util.regex.Pattern;
13 
14public class ElasticsearchStringQuery extends AbstractElasticsearchRepositoryQuery{
15 
16    private static final Pattern PARAMETER_PLACEHOLDER = Pattern.compile("\\?(\\d+)");
17    private String query;
18 
19    private final GenericConversionService conversionService = new GenericConversionService();
20 
21    {
22        if (!conversionService.canConvert(java.util.Date.class, String.class)) {
23            conversionService.addConverter(DateTimeConverters.JavaDateConverter.INSTANCE);
24        }
25        if (!conversionService.canConvert(org.joda.time.ReadableInstant.class, String.class)) {
26            conversionService.addConverter(DateTimeConverters.JodaDateTimeConverter.INSTANCE);
27        }
28        if (!conversionService.canConvert(org.joda.time.LocalDateTime.class, String.class)) {
29            conversionService.addConverter(DateTimeConverters.JodaLocalDateTimeConverter.INSTANCE);
30        }
31 
32    }
33 
34    public ElasticsearchStringQuery(ElasticsearchQueryMethod queryMethod, ElasticsearchOperations elasticsearchOperations, String query) {
35        super(queryMethod, elasticsearchOperations);
36        Assert.notNull(query, "Query cannot be empty");
37        this.query = query;
38    }
39 
40    @Override
41    public Object execute(Object[] parameters) {
42        ParametersParameterAccessor accessor = new ParametersParameterAccessor(queryMethod.getParameters(), parameters);
43        StringQuery stringQuery = createQuery(accessor);
44        if(queryMethod.isPageQuery()){
45            return  elasticsearchOperations.queryForPage(stringQuery, queryMethod.getEntityInformation().getJavaType());
46        }
47        return elasticsearchOperations.queryForObject(stringQuery, queryMethod.getEntityInformation().getJavaType());
48    }
49 
50 
51    protected StringQuery createQuery(ParametersParameterAccessor parameterAccessor) {
52        String queryString = replacePlaceholders(this.query, parameterAccessor);
53        return new StringQuery(queryString);
54    }
55 
56    private String replacePlaceholders(String input, ParametersParameterAccessor accessor) {
57        Matcher matcher = PARAMETER_PLACEHOLDER.matcher(input);
58        String result = input;
59        while (matcher.find()) {
60            String group = matcher.group();
61            int index = Integer.parseInt(matcher.group(1));
62            result = result.replace(group, getParameterWithIndex(accessor, index));
63        }
64        return result;
65    }
66 
67    private String getParameterWithIndex(ParametersParameterAccessor accessor, int index) {
68        Object parameter = accessor.getBindableValue(index);
69        if (parameter == null) {
70            return "null";
71        }
72        if (conversionService.canConvert(parameter.getClass(), String.class)) {
73            return conversionService.convert(parameter, String.class);
74        }
75        return parameter.toString();
76    }
77}

[all classes][org.springframework.data.elasticsearch.repository.query]
EMMA 2.0.5312 (C) Vladimir Roubtsov