Project

General

Profile

1
package eu.dnetlib.cql;
2

    
3
import java.io.IOException;
4
import java.util.HashMap;
5
import java.util.List;
6
import java.util.Map;
7

    
8
import com.google.common.collect.BiMap;
9
import com.google.common.collect.HashBiMap;
10
import eu.dnetlib.cql.lucene.IdentityCqlValueTransformerMap;
11
import eu.dnetlib.cql.lucene.LuceneCqlTranslator;
12
import eu.dnetlib.cql.lucene.TranslatedQuery;
13
import eu.dnetlib.cql.mongo.MongoCqlTranslator;
14
import org.bson.conversions.Bson;
15
import org.z3950.zing.cql.CQLNode;
16
import org.z3950.zing.cql.CQLParseException;
17
import org.z3950.zing.cql.CQLParser;
18

    
19
/**
20
 * @author claudio
21
 */
22
public class CqlTranslatorImpl implements CqlTranslator {
23

    
24
	/**
25
	 * {@link CqlTranslator#toLucene(String)}
26
	 */
27
	@Override
28
	public String toLucene(final String queryRoot) throws CQLParseException, IOException {
29
		return toLucene(parse(queryRoot), new IdentityCqlValueTransformerMap());
30
	}
31

    
32
	@Override
33
	public String toLucene(final String queryRoot, Map<String, List<String>> options) throws CQLParseException, IOException {
34
		return toLucene(parse(queryRoot), new IdentityCqlValueTransformerMap(), options);
35
	}
36

    
37
	@Override
38
	public String toLucene(final String queryRoot, CqlValueTransformerMap valueTransformerMap) throws CQLParseException, IOException {
39
		return toLucene(parse(queryRoot), valueTransformerMap);
40
	}
41

    
42
	@Override
43
	public String toLucene(final CQLNode queryRoot) throws CQLParseException, IOException {
44
		return toLucene(queryRoot, new IdentityCqlValueTransformerMap());
45
	}
46

    
47
	@Override
48
	public String toLucene(final CQLNode queryRoot, CqlValueTransformerMap valueTransformerMap) throws CQLParseException, IOException {
49

    
50
		return getTranslatedQuery(queryRoot, valueTransformerMap).asLucene();
51
	}
52

    
53
	@Override
54
	public String toLucene(final CQLNode queryRoot, CqlValueTransformerMap valueTransformerMap, Map<String, List<String>> options)
55
			throws CQLParseException, IOException {
56
		final BiMap<String, String> aliases = HashBiMap.create();
57
		return getTranslatedQuery(queryRoot, valueTransformerMap, options, aliases, new HashMap<String, String>()).asLucene();
58
	}
59

    
60
	@Override
61
	public TranslatedQuery getTranslatedQuery(final CQLNode queryRoot, CqlValueTransformerMap valueTransformerMap) throws CQLParseException, IOException {
62

    
63
		final BiMap<String, String> aliases = HashBiMap.create();
64
		return getTranslatedQuery(queryRoot, valueTransformerMap, new HashMap<String, List<String>>(), aliases, new HashMap<String, String>());
65
	}
66

    
67
	@Override
68
	public TranslatedQuery getTranslatedQuery(
69
			final CQLNode queryRoot,
70
			CqlValueTransformerMap valueTransformerMap,
71
			Map<String, List<String>> options,
72
			BiMap<String, String> aliases,
73
			Map<String, String> weights) throws CQLParseException, IOException {
74

    
75
		return LuceneCqlTranslator.translate(hackAnd(queryRoot), valueTransformerMap, options, aliases, weights);
76
	}
77

    
78
	// hack, to be removed soon
79
	private CQLNode hackAnd(final CQLNode queryRoot) throws CQLParseException, IOException {
80
		String cql = queryRoot.toCQL().toLowerCase();
81

    
82
		if (cql.startsWith("\"and ") || cql.startsWith("and ")) {
83
			return parse(cql.replaceFirst("and ", ""));
84
		}
85
		return queryRoot;
86
	}
87

    
88
	@Override
89
	public TranslatedQuery getTranslatedQuery(String cqlQuery) throws CQLParseException, IOException {
90
		return getTranslatedQuery(parse(cqlQuery), new IdentityCqlValueTransformerMap());
91
	}
92

    
93
	@Override
94
	public TranslatedQuery getTranslatedQuery(String cqlQuery, Map<String, List<String>> options) throws CQLParseException, IOException {
95
		final BiMap<String, String> aliases = HashBiMap.create();
96
		return getTranslatedQuery(parse(cqlQuery), new IdentityCqlValueTransformerMap(), options, aliases, new HashMap<String, String>());
97
	}
98

    
99
	@Override
100
	public TranslatedQuery getTranslatedQuery(String cqlQuery, CqlValueTransformerMap valueTransformerMap) throws CQLParseException, IOException {
101
		return getTranslatedQuery(parse(cqlQuery), valueTransformerMap);
102
	}
103

    
104
	@Override
105
	public TranslatedQuery getTranslatedQuery(String cqlQuery, CqlValueTransformerMap valueTransformerMap, Map<String, List<String>> options)
106
			throws CQLParseException, IOException {
107
		final BiMap<String, String> aliases = HashBiMap.create();
108
		return getTranslatedQuery(parse(cqlQuery), valueTransformerMap, options, aliases, new HashMap<String, String>());
109
	}
110

    
111
	@Override
112
	public Bson toMongo(final String cqlQuery) throws IOException, CQLParseException {
113
		return MongoCqlTranslator.toMongo(cqlQuery);
114
	}
115

    
116
	/**
117
	 * helper parsing method
118
	 *
119
	 * @param query
120
	 * @return
121
	 * @throws CQLParseException
122
	 * @throws IOException
123
	 */
124
	protected static CQLNode parse(final String query) throws CQLParseException, IOException {
125
		return new CQLParser().parse(query);
126
	}
127

    
128
}
(7-7/9)