Example usage for org.springframework.data.solr.core.query Function getOperation

List of usage examples for org.springframework.data.solr.core.query Function getOperation

Introduction

In this page you can find the example usage for org.springframework.data.solr.core.query Function getOperation.

Prototype

String getOperation();

Source Link

Document

solr readable representation of function

Usage

From source file:org.springframework.data.solr.core.QueryParserBase.java

/**
 * Create {@link SolrServer} readable String representation for {@link Function}
 * //w w  w  . ja v a 2 s .  c om
 * @param function
 * @return
 * @since 1.1
 */
protected String createFunctionFragment(Function function, int level) {

    StringBuilder sb = new StringBuilder();
    if (level <= 0) {
        sb.append("{!func}");
    }

    sb.append(function.getOperation());
    sb.append('(');
    if (function.hasArguments()) {
        List<String> solrReadableArguments = new ArrayList<String>();
        for (Object arg : function.getArguments()) {
            Assert.notNull(arg, "Unable to parse 'null' within function arguments.");
            if (arg instanceof Function) {
                solrReadableArguments.add(createFunctionFragment((Function) arg, level + 1));
            } else if (arg instanceof Criteria) {
                solrReadableArguments.add(createQueryStringFromNode((Criteria) arg));
            } else if (arg instanceof Field) {
                solrReadableArguments.add(((Field) arg).getName());
            } else if (arg instanceof Query) {
                solrReadableArguments.add(getQueryString((Query) arg));
            } else if (arg instanceof String || !conversionService.canConvert(arg.getClass(), String.class)) {
                solrReadableArguments.add(arg.toString());
            } else {
                solrReadableArguments.add(conversionService.convert(arg, String.class));
            }
        }
        sb.append(StringUtils.join(solrReadableArguments, ','));
    }
    sb.append(')');
    return sb.toString();
}