Project

General

Profile

1
package eu.dnetlib.data.search.utils.cql;
2

    
3
import java.util.List;
4

    
5
/**
6
 * Created by kiatrop on 28/9/2016.
7
 */
8
public class CQLQueryBuilder {
9

    
10
    public enum Operator {
11
        AND("and"),
12
        OR("or"),
13
        NOT("not"),
14
        EQUAL("="),
15
        EXACT("exact"),
16
        NOTEQUAL("<>");
17

    
18
        private String value;
19
        Operator(String value) {
20
            this.value = value;
21
        }
22
        private String getValue() {
23
            return value;
24
        }
25

    
26
        @Override
27
        public String toString() {
28
            return this.getValue();
29
        }
30
    }
31

    
32
    public static void appendKeywords(StringBuilder stringBuilder, String keywords) {
33
        if (keywords != null && !keywords.trim().isEmpty()) {
34
            appendSimpleTerm(stringBuilder, CQLQueryBuilder.Operator.AND, keywords);
35
        }
36
    }
37

    
38
    public static void appendSimpleTerm(StringBuilder stringBuilder, Operator queryOperator, String value) {
39
        stringBuilder.append(' ').append(queryOperator).append(" (").append(value).append(')');
40
    }
41

    
42
    public static void appendSimpleQuotedTerm(StringBuilder stringBuilder, Operator queryOperator, String value) {
43
        stringBuilder.append(' ').append(queryOperator).append(" (\"").append(value).append("\")");
44
    }
45

    
46
    public static void appendFieldTerm(StringBuilder stringBuilder, Operator queryOperator, String indexFieldName, Operator termOperator, String fieldValue) {
47
            stringBuilder.append(' ').append(queryOperator).
48
                    append(" (").append(indexFieldName).append(' ').append(termOperator).append(' ').append(fieldValue).append(")");
49
    }
50

    
51
    public static void appendFieldQuotedTerm(StringBuilder stringBuilder, Operator queryOperator, String indexFieldName, Operator termOperator, String fieldValue) {
52
            stringBuilder.append(' ').append(queryOperator).
53
                    append(" (").append(indexFieldName).append(' ').append(termOperator).append(" \"").append(fieldValue).append("\")");
54
    }
55

    
56
    public static void appendFieldTerms(StringBuilder stringBuilder, Operator queryOperator, String indexFieldName, Operator termOperator, List<String> fieldValues) {
57
        for (String fieldValue: fieldValues) {
58
            appendFieldTerm(stringBuilder, queryOperator, indexFieldName, termOperator, fieldValue);
59
        }
60
    }
61

    
62
    public static void appendFieldQuotedTerms(StringBuilder stringBuilder, Operator queryOperator, String indexFieldName, Operator termOperator, List<String> fieldValues) {
63
        for (String fieldValue: fieldValues) {
64
            appendFieldQuotedTerm(stringBuilder, queryOperator, indexFieldName, termOperator, fieldValue);
65
        }
66
    }
67
}
(1-1/2)