package com.plugtree.solrmeter.model.generator; import com.google.inject.Inject; import com.google.inject.name.Named; import com.plugtree.solrmeter.model.QueryExtractor; import com.plugtree.solrmeter.model.SolrMeterConfiguration; import org.apache.solr.client.solrj.SolrQuery; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ExternalFileQueryGenerator implements QueryGenerator { private QueryExtractor queryExtractor; private boolean forceEchoParamsAll = Boolean.valueOf(SolrMeterConfiguration.getProperty("solr.query.echoParams", "false")); @Inject public ExternalFileQueryGenerator(@Named("queryExtractor") QueryExtractor queryExtractor) { this.queryExtractor = queryExtractor; } protected ExternalFileQueryGenerator() { } @Override public SolrQuery generate() { String randomQuery = queryExtractor.getRandomQuery(); return fromString(randomQuery); } protected List<String> getParamsFrom(String queryString) throws UnsupportedEncodingException{ List<String> values = new ArrayList<String>(); for (String element : split(queryString, "&")) { if( ! element.isEmpty() && element.contains("=")){ values.add(element); } } return values; } public List<String> getKeyValuePair(String queryString) throws UnsupportedEncodingException{ queryString = URLDecoder.decode(queryString, "UTF-8"); List<String> params = new ArrayList<String>(2); int index= queryString.indexOf("="); if(index < 1) { params.add(queryString); } else { params.add(queryString.substring(0, index)); params.add(queryString.substring(index + 1 , queryString.length())); } return params; } protected List<String> split(String queryString, String separator) throws UnsupportedEncodingException { queryString = URLDecoder.decode(queryString, "UTF-8"); String[] strings = queryString.split(separator); List<String> params = Arrays.asList(strings); return params; } protected SolrQuery fromString(String queryString) { SolrQuery query =new SolrQuery(); try { List<String> paramsFrom = getParamsFrom(queryString); for(String param : paramsFrom){ List<String> keyValuePair = getKeyValuePair(param); String key = keyValuePair.get(0); String val = keyValuePair.get(1); query.add(key, val); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if(forceEchoParamsAll){ query.remove("echoParams"); query.add("echoParams", "all"); } return query; } }