<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>MtasSolrComponentFacet.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">MTAS</a> > <a href="index.source.html" class="el_package">mtas.solr.handler.component.util</a> > <span class="el_source">MtasSolrComponentFacet.java</span></div><h1>MtasSolrComponentFacet.java</h1><pre class="source lang-java linenums">package mtas.solr.handler.component.util; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map.Entry; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.lucene.document.FieldType.LegacyNumericType; import org.apache.solr.common.util.NamedList; import org.apache.solr.common.util.SimpleOrderedMap; import org.apache.solr.handler.component.ResponseBuilder; import org.apache.solr.handler.component.SearchComponent; import org.apache.solr.handler.component.ShardRequest; import org.apache.solr.handler.component.ShardResponse; import org.apache.solr.schema.FieldType; import org.apache.solr.schema.IndexSchema; import org.apache.solr.schema.SchemaField; import mtas.codec.util.CodecComponent.ComponentFacet; import mtas.codec.util.CodecComponent.ComponentField; import mtas.codec.util.CodecComponent.ComponentFields; import mtas.codec.util.CodecComponent.SubComponentFunction; import mtas.codec.util.collector.MtasDataCollector; import mtas.parser.function.ParseException; import mtas.search.spans.util.MtasSpanQuery; import mtas.solr.handler.component.MtasSolrSearchComponent; /** * The Class MtasSolrComponentFacet. */ @SuppressWarnings("deprecation") public class MtasSolrComponentFacet implements MtasSolrComponent<ComponentFacet> { /** The Constant log. */ <span class="fc" id="L39"> private static final Log log = LogFactory</span> <span class="fc" id="L40"> .getLog(MtasSolrComponentFacet.class);</span> /** The search component. */ MtasSolrSearchComponent searchComponent; /** The Constant PARAM_MTAS_FACET. */ public static final String PARAM_MTAS_FACET = MtasSolrSearchComponent.PARAM_MTAS + ".facet"; /** The Constant NAME_MTAS_FACET_KEY. */ public static final String NAME_MTAS_FACET_KEY = "key"; /** The Constant NAME_MTAS_FACET_FIELD. */ public static final String NAME_MTAS_FACET_FIELD = "field"; /** The Constant NAME_MTAS_FACET_QUERY. */ private static final String NAME_MTAS_FACET_QUERY = "query"; /** The Constant NAME_MTAS_FACET_BASE. */ private static final String NAME_MTAS_FACET_BASE = "base"; /** The Constant SUBNAME_MTAS_FACET_QUERY_TYPE. */ public static final String SUBNAME_MTAS_FACET_QUERY_TYPE = "type"; /** The Constant SUBNAME_MTAS_FACET_QUERY_VALUE. */ public static final String SUBNAME_MTAS_FACET_QUERY_VALUE = "value"; /** The Constant SUBNAME_MTAS_FACET_QUERY_PREFIX. */ public static final String SUBNAME_MTAS_FACET_QUERY_PREFIX = "prefix"; /** The Constant SUBNAME_MTAS_FACET_QUERY_IGNORE. */ public static final String SUBNAME_MTAS_FACET_QUERY_IGNORE = "ignore"; /** The Constant SUBNAME_MTAS_FACET_QUERY_MAXIMUM_IGNORE_LENGTH. */ public static final String SUBNAME_MTAS_FACET_QUERY_MAXIMUM_IGNORE_LENGTH = "maximumIgnoreLength"; /** The Constant SUBNAME_MTAS_FACET_QUERY_VARIABLE. */ public static final String SUBNAME_MTAS_FACET_QUERY_VARIABLE = "variable"; /** The Constant SUBNAME_MTAS_FACET_QUERY_VARIABLE_NAME. */ public static final String SUBNAME_MTAS_FACET_QUERY_VARIABLE_NAME = "name"; /** The Constant SUBNAME_MTAS_FACET_QUERY_VARIABLE_VALUE. */ public static final String SUBNAME_MTAS_FACET_QUERY_VARIABLE_VALUE = "value"; /** The Constant SUBNAME_MTAS_FACET_BASE_FIELD. */ public static final String SUBNAME_MTAS_FACET_BASE_FIELD = "field"; /** The Constant SUBNAME_MTAS_FACET_BASE_TYPE. */ public static final String SUBNAME_MTAS_FACET_BASE_TYPE = "type"; /** The Constant SUBNAME_MTAS_FACET_BASE_SORT_TYPE. */ public static final String SUBNAME_MTAS_FACET_BASE_SORT_TYPE = "sort.type"; /** The Constant SUBNAME_MTAS_FACET_BASE_SORT_DIRECTION. */ public static final String SUBNAME_MTAS_FACET_BASE_SORT_DIRECTION = "sort.direction"; /** The Constant SUBNAME_MTAS_FACET_BASE_NUMBER. */ public static final String SUBNAME_MTAS_FACET_BASE_NUMBER = "number"; /** The Constant SUBNAME_MTAS_FACET_BASE_MINIMUM. */ public static final String SUBNAME_MTAS_FACET_BASE_MINIMUM = "minimum"; /** The Constant SUBNAME_MTAS_FACET_BASE_MAXIMUM. */ public static final String SUBNAME_MTAS_FACET_BASE_MAXIMUM = "maximum"; /** The Constant SUBNAME_MTAS_FACET_BASE_FUNCTION. */ public static final String SUBNAME_MTAS_FACET_BASE_FUNCTION = "function"; /** The Constant SUBNAME_MTAS_FACET_BASE_FUNCTION_KEY. */ public static final String SUBNAME_MTAS_FACET_BASE_FUNCTION_KEY = "key"; /** The Constant SUBNAME_MTAS_FACET_BASE_FUNCTION_EXPRESSION. */ public static final String SUBNAME_MTAS_FACET_BASE_FUNCTION_EXPRESSION = "expression"; /** The Constant SUBNAME_MTAS_FACET_BASE_FUNCTION_TYPE. */ public static final String SUBNAME_MTAS_FACET_BASE_FUNCTION_TYPE = "type"; /** The Constant SUBNAME_MTAS_FACET_BASE_RANGE. */ public static final String SUBNAME_MTAS_FACET_BASE_RANGE = "range"; /** The Constant SUBNAME_MTAS_FACET_BASE_RANGE_SIZE. */ public static final String SUBNAME_MTAS_FACET_BASE_RANGE_SIZE = "size"; /** The Constant SUBNAME_MTAS_FACET_BASE_RANGE_BASE. */ public static final String SUBNAME_MTAS_FACET_BASE_RANGE_BASE = "base"; /** * Instantiates a new mtas solr component facet. * * @param searchComponent the search component */ <span class="fc" id="L132"> public MtasSolrComponentFacet(MtasSolrSearchComponent searchComponent) {</span> <span class="fc" id="L133"> this.searchComponent = searchComponent;</span> <span class="fc" id="L134"> }</span> /* * (non-Javadoc) * * @see * mtas.solr.handler.component.util.MtasSolrComponent#prepare(org.apache.solr. * handler.component.ResponseBuilder, * mtas.codec.util.CodecComponent.ComponentFields) */ public void prepare(ResponseBuilder rb, ComponentFields mtasFields) throws IOException { <span class="nc" id="L146"> Set<String> ids = MtasSolrResultUtil</span> <span class="nc" id="L147"> .getIdsFromParameters(rb.req.getParams(), PARAM_MTAS_FACET);</span> <span class="nc bnc" id="L148" title="All 2 branches missed."> if (!ids.isEmpty()) {</span> <span class="nc" id="L149"> int tmpCounter = 0;</span> String tmpValue; <span class="nc" id="L151"> String[] fields = new String[ids.size()];</span> <span class="nc" id="L152"> String[] keys = new String[ids.size()];</span> <span class="nc" id="L153"> String[][] queryTypes = new String[ids.size()][];</span> <span class="nc" id="L154"> String[][] queryValues = new String[ids.size()][];</span> <span class="nc" id="L155"> String[][] queryPrefixes = new String[ids.size()][];</span> <span class="nc" id="L156"> String[][] queryIgnores = new String[ids.size()][];</span> <span class="nc" id="L157"> String[][] queryMaximumIgnoreLengths = new String[ids.size()][];</span> <span class="nc" id="L158"> HashMap<String, String[]>[][] queryVariables = new HashMap[ids.size()][];</span> <span class="nc" id="L159"> String[][] baseFields = new String[ids.size()][];</span> <span class="nc" id="L160"> String[][] baseFieldTypes = new String[ids.size()][];</span> <span class="nc" id="L161"> String[][] baseTypes = new String[ids.size()][];</span> <span class="nc" id="L162"> Double[][] baseRangeSizes = new Double[ids.size()][];</span> <span class="nc" id="L163"> Double[][] baseRangeBases = new Double[ids.size()][];</span> <span class="nc" id="L164"> String[][] baseSortTypes = new String[ids.size()][];</span> <span class="nc" id="L165"> String[][] baseSortDirections = new String[ids.size()][];</span> <span class="nc" id="L166"> Integer[][] baseNumbers = new Integer[ids.size()][];</span> <span class="nc" id="L167"> Double[][] baseMinima = new Double[ids.size()][];</span> <span class="nc" id="L168"> Double[][] baseMaxima = new Double[ids.size()][];</span> <span class="nc" id="L169"> String[][][] baseFunctionExpressions = new String[ids.size()][][];</span> <span class="nc" id="L170"> String[][][] baseFunctionKeys = new String[ids.size()][][];</span> <span class="nc" id="L171"> String[][][] baseFunctionTypes = new String[ids.size()][][];</span> <span class="nc bnc" id="L172" title="All 2 branches missed."> for (String id : ids) {</span> <span class="nc" id="L173"> fields[tmpCounter] = rb.req.getParams().get(</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_FIELD, null); <span class="nc" id="L175"> keys[tmpCounter] = rb.req.getParams()</span> <span class="nc" id="L176"> .get(PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_KEY,</span> <span class="nc" id="L177"> String.valueOf(tmpCounter))</span> <span class="nc" id="L178"> .trim();</span> <span class="nc" id="L179"> Set<String> qIds = MtasSolrResultUtil.getIdsFromParameters(</span> <span class="nc" id="L180"> rb.req.getParams(),</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_QUERY); <span class="nc bnc" id="L182" title="All 2 branches missed."> if (!qIds.isEmpty()) {</span> <span class="nc" id="L183"> int tmpQCounter = 0;</span> <span class="nc" id="L184"> queryTypes[tmpCounter] = new String[qIds.size()];</span> <span class="nc" id="L185"> queryValues[tmpCounter] = new String[qIds.size()];</span> <span class="nc" id="L186"> queryPrefixes[tmpCounter] = new String[qIds.size()];</span> <span class="nc" id="L187"> queryIgnores[tmpCounter] = new String[qIds.size()];</span> <span class="nc" id="L188"> queryMaximumIgnoreLengths[tmpCounter] = new String[qIds.size()];</span> <span class="nc" id="L189"> queryVariables[tmpCounter] = new HashMap[qIds.size()];</span> <span class="nc bnc" id="L190" title="All 2 branches missed."> for (String qId : qIds) {</span> <span class="nc" id="L191"> queryTypes[tmpCounter][tmpQCounter] = rb.req.getParams()</span> <span class="nc" id="L192"> .get(</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_QUERY + "." + qId + "." + SUBNAME_MTAS_FACET_QUERY_TYPE, null); <span class="nc" id="L196"> queryValues[tmpCounter][tmpQCounter] = rb.req.getParams()</span> <span class="nc" id="L197"> .get(</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_QUERY + "." + qId + "." + SUBNAME_MTAS_FACET_QUERY_VALUE, null); <span class="nc" id="L201"> queryPrefixes[tmpCounter][tmpQCounter] = rb.req.getParams()</span> <span class="nc" id="L202"> .get(</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_QUERY + "." + qId + "." + SUBNAME_MTAS_FACET_QUERY_PREFIX, null); <span class="nc" id="L206"> queryIgnores[tmpCounter][tmpQCounter] = rb.req.getParams()</span> <span class="nc" id="L207"> .get(</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_QUERY + "." + qId + "." + SUBNAME_MTAS_FACET_QUERY_IGNORE, null); <span class="nc" id="L211"> queryMaximumIgnoreLengths[tmpCounter][tmpQCounter] = rb.req</span> <span class="nc" id="L212"> .getParams()</span> <span class="nc" id="L213"> .get(PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_QUERY</span> + "." + qId + "." + SUBNAME_MTAS_FACET_QUERY_MAXIMUM_IGNORE_LENGTH, null); <span class="nc" id="L216"> Set<String> vIds = MtasSolrResultUtil.getIdsFromParameters(</span> <span class="nc" id="L217"> rb.req.getParams(),</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_QUERY + "." + qId + "." + SUBNAME_MTAS_FACET_QUERY_VARIABLE); <span class="nc" id="L220"> queryVariables[tmpCounter][tmpQCounter] = new HashMap<>();</span> <span class="nc bnc" id="L221" title="All 2 branches missed."> if (!vIds.isEmpty()) {</span> <span class="nc" id="L222"> HashMap<String, ArrayList<String>> tmpVariables = new HashMap<>();</span> <span class="nc bnc" id="L223" title="All 2 branches missed."> for (String vId : vIds) {</span> <span class="nc" id="L224"> String name = rb.req.getParams().get(PARAM_MTAS_FACET + "." + id</span> + "." + NAME_MTAS_FACET_QUERY + "." + qId + "." + SUBNAME_MTAS_FACET_QUERY_VARIABLE + "." + vId + "." + SUBNAME_MTAS_FACET_QUERY_VARIABLE_NAME, null); <span class="nc bnc" id="L228" title="All 2 branches missed."> if (name != null) {</span> <span class="nc bnc" id="L229" title="All 2 branches missed."> if (!tmpVariables.containsKey(name)) {</span> <span class="nc" id="L230"> tmpVariables.put(name, new ArrayList<String>());</span> } <span class="nc" id="L232"> String value = rb.req.getParams().get(PARAM_MTAS_FACET + "."</span> + id + "." + NAME_MTAS_FACET_QUERY + "." + qId + "." + SUBNAME_MTAS_FACET_QUERY_VARIABLE + "." + vId + "." + SUBNAME_MTAS_FACET_QUERY_VARIABLE_VALUE, null); <span class="nc bnc" id="L236" title="All 2 branches missed."> if (value != null) {</span> <span class="nc" id="L237"> ArrayList<String> list = new ArrayList<>();</span> <span class="nc" id="L238"> String[] subList = value.split("(?<!\\\\),");</span> <span class="nc bnc" id="L239" title="All 2 branches missed."> for (int i = 0; i < subList.length; i++) {</span> <span class="nc" id="L240"> list.add(</span> <span class="nc" id="L241"> subList[i].replace("\\,", ",").replace("\\\\", "\\"));</span> } <span class="nc" id="L243"> tmpVariables.get(name).addAll(list);</span> } } <span class="nc" id="L246"> }</span> <span class="nc bnc" id="L247" title="All 2 branches missed."> for (Entry<String, ArrayList<String>> entry : tmpVariables</span> <span class="nc" id="L248"> .entrySet()) {</span> <span class="nc" id="L249"> queryVariables[tmpCounter][tmpQCounter].put(entry.getKey(),</span> <span class="nc" id="L250"> entry.getValue()</span> <span class="nc" id="L251"> .toArray(new String[entry.getValue().size()]));</span> <span class="nc" id="L252"> }</span> } <span class="nc" id="L254"> tmpQCounter++;</span> <span class="nc" id="L255"> }</span> <span class="nc" id="L256"> } else {</span> <span class="nc" id="L257"> throw new IOException(</span> "no " + NAME_MTAS_FACET_QUERY + " for mtas facet " + id); } <span class="nc" id="L260"> Set<String> bIds = MtasSolrResultUtil.getIdsFromParameters(</span> <span class="nc" id="L261"> rb.req.getParams(),</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE); <span class="nc bnc" id="L263" title="All 2 branches missed."> if (!bIds.isEmpty()) {</span> <span class="nc" id="L264"> int tmpBCounter = 0;</span> <span class="nc" id="L265"> baseFields[tmpCounter] = new String[bIds.size()];</span> <span class="nc" id="L266"> baseFieldTypes[tmpCounter] = new String[bIds.size()];</span> <span class="nc" id="L267"> baseTypes[tmpCounter] = new String[bIds.size()];</span> <span class="nc" id="L268"> baseRangeSizes[tmpCounter] = new Double[bIds.size()];</span> <span class="nc" id="L269"> baseRangeBases[tmpCounter] = new Double[bIds.size()];</span> <span class="nc" id="L270"> baseSortTypes[tmpCounter] = new String[bIds.size()];</span> <span class="nc" id="L271"> baseSortDirections[tmpCounter] = new String[bIds.size()];</span> <span class="nc" id="L272"> baseNumbers[tmpCounter] = new Integer[bIds.size()];</span> <span class="nc" id="L273"> baseMinima[tmpCounter] = new Double[bIds.size()];</span> <span class="nc" id="L274"> baseMaxima[tmpCounter] = new Double[bIds.size()];</span> <span class="nc" id="L275"> baseFunctionKeys[tmpCounter] = new String[bIds.size()][];</span> <span class="nc" id="L276"> baseFunctionExpressions[tmpCounter] = new String[bIds.size()][];</span> <span class="nc" id="L277"> baseFunctionTypes[tmpCounter] = new String[bIds.size()][];</span> <span class="nc bnc" id="L278" title="All 2 branches missed."> for (String bId : bIds) {</span> <span class="nc" id="L279"> baseFields[tmpCounter][tmpBCounter] = rb.req.getParams()</span> <span class="nc" id="L280"> .get(</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_FIELD, null); <span class="nc" id="L284"> baseFieldTypes[tmpCounter][tmpBCounter] = getFieldType(</span> <span class="nc" id="L285"> rb.req.getSchema(), baseFields[tmpCounter][tmpBCounter]);</span> <span class="nc" id="L286"> baseTypes[tmpCounter][tmpBCounter] = rb.req.getParams()</span> <span class="nc" id="L287"> .get(PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE</span> + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_TYPE, null); <span class="nc" id="L289"> tmpValue = rb.req.getParams()</span> <span class="nc" id="L290"> .get(PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE</span> + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_RANGE + "." + SUBNAME_MTAS_FACET_BASE_RANGE_SIZE, null); <span class="nc bnc" id="L293" title="All 2 branches missed."> baseRangeSizes[tmpCounter][tmpBCounter] = tmpValue == null ? null</span> <span class="nc" id="L294"> : Double.parseDouble(tmpValue);</span> <span class="nc" id="L295"> tmpValue = rb.req.getParams()</span> <span class="nc" id="L296"> .get(PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE</span> + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_RANGE + "." + SUBNAME_MTAS_FACET_BASE_RANGE_BASE, null); <span class="nc bnc" id="L299" title="All 2 branches missed."> baseRangeBases[tmpCounter][tmpBCounter] = tmpValue == null ? null</span> <span class="nc" id="L300"> : Double.parseDouble(tmpValue);</span> <span class="nc" id="L301"> baseSortTypes[tmpCounter][tmpBCounter] = rb.req.getParams()</span> <span class="nc" id="L302"> .get(</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_SORT_TYPE, null); <span class="nc" id="L306"> baseSortDirections[tmpCounter][tmpBCounter] = rb.req.getParams()</span> <span class="nc" id="L307"> .get(PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE</span> + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_SORT_DIRECTION, null); <span class="nc" id="L310"> tmpValue = rb.req.getParams()</span> <span class="nc" id="L311"> .get(</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_NUMBER, null); <span class="nc bnc" id="L315" title="All 2 branches missed."> baseNumbers[tmpCounter][tmpBCounter] = tmpValue != null</span> <span class="nc" id="L316"> ? getPositiveInteger(tmpValue) : null;</span> <span class="nc" id="L317"> tmpValue = rb.req.getParams()</span> <span class="nc" id="L318"> .get(</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_MINIMUM, null); <span class="nc bnc" id="L322" title="All 2 branches missed."> baseMinima[tmpCounter][tmpBCounter] = tmpValue != null</span> <span class="nc" id="L323"> ? getDouble(tmpValue) : null;</span> <span class="nc" id="L324"> tmpValue = rb.req.getParams()</span> <span class="nc" id="L325"> .get(</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_MAXIMUM, null); <span class="nc bnc" id="L329" title="All 2 branches missed."> baseMaxima[tmpCounter][tmpBCounter] = tmpValue != null</span> <span class="nc" id="L330"> ? getDouble(tmpValue) : null;</span> <span class="nc" id="L331"> Set<String> functionIds = MtasSolrResultUtil.getIdsFromParameters(</span> <span class="nc" id="L332"> rb.req.getParams(),</span> PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION); <span class="nc" id="L335"> baseFunctionExpressions[tmpCounter][tmpBCounter] = new String[functionIds</span> <span class="nc" id="L336"> .size()];</span> <span class="nc" id="L337"> baseFunctionKeys[tmpCounter][tmpBCounter] = new String[functionIds</span> <span class="nc" id="L338"> .size()];</span> <span class="nc" id="L339"> baseFunctionTypes[tmpCounter][tmpBCounter] = new String[functionIds</span> <span class="nc" id="L340"> .size()];</span> <span class="nc" id="L341"> int tmpSubCounter = 0;</span> <span class="nc bnc" id="L342" title="All 2 branches missed."> for (String functionId : functionIds) {</span> <span class="nc" id="L343"> baseFunctionKeys[tmpCounter][tmpBCounter][tmpSubCounter] = rb.req</span> <span class="nc" id="L344"> .getParams()</span> <span class="nc" id="L345"> .get(PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE</span> + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION + "." + functionId + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION_KEY, <span class="nc" id="L348"> String.valueOf(tmpSubCounter))</span> <span class="nc" id="L349"> .trim();</span> <span class="nc" id="L350"> baseFunctionExpressions[tmpCounter][tmpBCounter][tmpSubCounter] = rb.req</span> <span class="nc" id="L351"> .getParams()</span> <span class="nc" id="L352"> .get(PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE</span> + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION + "." + functionId + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION_EXPRESSION, null); <span class="nc" id="L356"> baseFunctionTypes[tmpCounter][tmpBCounter][tmpSubCounter] = rb.req</span> <span class="nc" id="L357"> .getParams()</span> <span class="nc" id="L358"> .get(PARAM_MTAS_FACET + "." + id + "." + NAME_MTAS_FACET_BASE</span> + "." + bId + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION + "." + functionId + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION_TYPE, null); <span class="nc" id="L362"> tmpSubCounter++;</span> <span class="nc" id="L363"> }</span> <span class="nc" id="L364"> tmpBCounter++;</span> <span class="nc" id="L365"> }</span> <span class="nc" id="L366"> } else {</span> <span class="nc" id="L367"> throw new IOException(</span> "no " + NAME_MTAS_FACET_BASE + " for mtas facet " + id); } <span class="nc" id="L370"> tmpCounter++;</span> <span class="nc" id="L371"> }</span> <span class="nc" id="L372"> String uniqueKeyField = rb.req.getSchema().getUniqueKeyField().getName();</span> <span class="nc" id="L373"> mtasFields.doFacet = true;</span> <span class="nc" id="L374"> rb.setNeedDocSet(true);</span> <span class="nc bnc" id="L375" title="All 2 branches missed."> for (String field : fields) {</span> <span class="nc bnc" id="L376" title="All 4 branches missed."> if (field == null || field.isEmpty()) {</span> <span class="nc" id="L377"> throw new IOException("no (valid) field in mtas facet");</span> <span class="nc bnc" id="L378" title="All 2 branches missed."> } else if (!mtasFields.list.containsKey(field)) {</span> <span class="nc" id="L379"> mtasFields.list.put(field, new ComponentField(uniqueKeyField));</span> } } <span class="nc" id="L382"> MtasSolrResultUtil.compareAndCheck(keys, fields, NAME_MTAS_FACET_KEY,</span> <span class="nc" id="L383"> NAME_MTAS_FACET_FIELD, true);</span> <span class="nc bnc" id="L384" title="All 2 branches missed."> for (int i = 0; i < fields.length; i++) {</span> <span class="nc" id="L385"> ComponentField cf = mtasFields.list.get(fields[i]);</span> <span class="nc" id="L386"> int queryNumber = queryValues[i].length;</span> <span class="nc" id="L387"> MtasSpanQuery[] ql = new MtasSpanQuery[queryNumber];</span> <span class="nc bnc" id="L388" title="All 2 branches missed."> for (int j = 0; j < queryNumber; j++) {</span> <span class="nc bnc" id="L389" title="All 2 branches missed."> Integer maximumIgnoreLength = (queryMaximumIgnoreLengths[i][j] == null)</span> <span class="nc" id="L390"> ? null : Integer.parseInt(queryMaximumIgnoreLengths[i][j]);</span> <span class="nc" id="L391"> MtasSpanQuery q = MtasSolrResultUtil.constructQuery(queryValues[i][j],</span> queryTypes[i][j], queryPrefixes[i][j], queryVariables[i][j], fields[i], queryIgnores[i][j], maximumIgnoreLength); // minimize number of queries <span class="nc bnc" id="L395" title="All 2 branches missed."> if (cf.spanQueryList.contains(q)) {</span> <span class="nc" id="L396"> q = cf.spanQueryList.get(cf.spanQueryList.indexOf(q));</span> } else { <span class="nc" id="L398"> cf.spanQueryList.add(q);</span> } <span class="nc" id="L400"> ql[j] = q;</span> } <span class="nc bnc" id="L402" title="All 4 branches missed."> String key = (keys[i] == null) || (keys[i].isEmpty())</span> <span class="nc" id="L403"> ? String.valueOf(i) + ":" + fields[i] : keys[i].trim();</span> try { <span class="nc" id="L405"> mtasFields.list.get(fields[i]).facetList.add(new ComponentFacet(ql,</span> fields[i], key, baseFields[i], baseFieldTypes[i], baseTypes[i], baseRangeSizes[i], baseRangeBases[i], baseSortTypes[i], baseSortDirections[i], baseNumbers[i], baseMinima[i], baseMaxima[i], baseFunctionKeys[i], baseFunctionExpressions[i], baseFunctionTypes[i])); <span class="nc" id="L411"> } catch (ParseException e) {</span> <span class="nc" id="L412"> throw new IOException(e.getMessage());</span> <span class="nc" id="L413"> }</span> } } <span class="nc" id="L416"> }</span> /* * (non-Javadoc) * * @see * mtas.solr.handler.component.util.MtasSolrComponent#modifyRequest(org.apache * .solr.handler.component.ResponseBuilder, * org.apache.solr.handler.component.SearchComponent, * org.apache.solr.handler.component.ShardRequest) */ public void modifyRequest(ResponseBuilder rb, SearchComponent who, ShardRequest sreq) { <span class="nc bnc" id="L429" title="All 2 branches missed."> if (sreq.params.getBool(MtasSolrSearchComponent.PARAM_MTAS, false)</span> <span class="nc bnc" id="L430" title="All 2 branches missed."> && sreq.params.getBool(PARAM_MTAS_FACET, false)) {</span> <span class="nc bnc" id="L431" title="All 2 branches missed."> if ((sreq.purpose & ShardRequest.PURPOSE_GET_TOP_IDS) != 0) {</span> // do nothing } else { // remove prefix for other requests <span class="nc" id="L435"> Set<String> keys = MtasSolrResultUtil</span> <span class="nc" id="L436"> .getIdsFromParameters(rb.req.getParams(), PARAM_MTAS_FACET);</span> <span class="nc" id="L437"> sreq.params.remove(PARAM_MTAS_FACET);</span> <span class="nc bnc" id="L438" title="All 2 branches missed."> for (String key : keys) {</span> <span class="nc" id="L439"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_FIELD); <span class="nc" id="L441"> sreq.params</span> <span class="nc" id="L442"> .remove(PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_KEY);</span> <span class="nc" id="L443"> Set<String> subKeys = MtasSolrResultUtil.getIdsFromParameters(</span> <span class="nc" id="L444"> rb.req.getParams(),</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_QUERY); <span class="nc bnc" id="L446" title="All 2 branches missed."> for (String subKey : subKeys) {</span> <span class="nc" id="L447"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_QUERY + "." + subKey + "." + SUBNAME_MTAS_FACET_QUERY_TYPE); <span class="nc" id="L450"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_QUERY + "." + subKey + "." + SUBNAME_MTAS_FACET_QUERY_VALUE); <span class="nc" id="L453"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_QUERY + "." + subKey + "." + SUBNAME_MTAS_FACET_QUERY_PREFIX); <span class="nc" id="L456"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_QUERY + "." + subKey + "." + SUBNAME_MTAS_FACET_QUERY_IGNORE); <span class="nc" id="L459"> sreq.params.remove(PARAM_MTAS_FACET + "." + key + "."</span> + NAME_MTAS_FACET_QUERY + "." + subKey + "." + SUBNAME_MTAS_FACET_QUERY_MAXIMUM_IGNORE_LENGTH); <span class="nc" id="L462"> Set<String> subSubKeys = MtasSolrResultUtil</span> <span class="nc" id="L463"> .getIdsFromParameters(rb.req.getParams(),</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_QUERY + "." + subKey + "." + SUBNAME_MTAS_FACET_QUERY_VARIABLE); <span class="nc bnc" id="L467" title="All 2 branches missed."> for (String subSubKey : subSubKeys) {</span> <span class="nc" id="L468"> sreq.params.remove(PARAM_MTAS_FACET + "." + key + "."</span> + NAME_MTAS_FACET_QUERY + "." + subKey + "." + SUBNAME_MTAS_FACET_QUERY_VARIABLE + "." + subSubKey + "." + SUBNAME_MTAS_FACET_QUERY_VARIABLE_NAME); <span class="nc" id="L472"> sreq.params.remove(PARAM_MTAS_FACET + "." + key + "."</span> + NAME_MTAS_FACET_QUERY + "." + subKey + "." + SUBNAME_MTAS_FACET_QUERY_VARIABLE + "." + subSubKey + "." + SUBNAME_MTAS_FACET_QUERY_VARIABLE_VALUE); <span class="nc" id="L476"> }</span> <span class="nc" id="L477"> }</span> <span class="nc" id="L478"> subKeys = MtasSolrResultUtil.getIdsFromParameters(rb.req.getParams(),</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE); <span class="nc bnc" id="L480" title="All 2 branches missed."> for (String subKey : subKeys) {</span> <span class="nc" id="L481"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_FIELD); <span class="nc" id="L484"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_TYPE); <span class="nc" id="L487"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_RANGE + "." + SUBNAME_MTAS_FACET_BASE_RANGE_SIZE); <span class="nc" id="L491"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_RANGE + "." + SUBNAME_MTAS_FACET_BASE_RANGE_BASE); <span class="nc" id="L495"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_MAXIMUM); <span class="nc" id="L498"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_MINIMUM); <span class="nc" id="L501"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_NUMBER); <span class="nc" id="L504"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_SORT_DIRECTION); <span class="nc" id="L507"> sreq.params.remove(</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_SORT_TYPE); <span class="nc" id="L510"> Set<String> subSubKeys = MtasSolrResultUtil</span> <span class="nc" id="L511"> .getIdsFromParameters(rb.req.getParams(),</span> PARAM_MTAS_FACET + "." + key + "." + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION); <span class="nc bnc" id="L515" title="All 2 branches missed."> for (String subSubKey : subSubKeys) {</span> <span class="nc" id="L516"> sreq.params.remove(PARAM_MTAS_FACET + "." + key + "."</span> + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION + "." + subSubKey + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION_EXPRESSION); <span class="nc" id="L520"> sreq.params.remove(PARAM_MTAS_FACET + "." + key + "."</span> + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION + "." + subSubKey + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION_KEY); <span class="nc" id="L524"> sreq.params.remove(PARAM_MTAS_FACET + "." + key + "."</span> + NAME_MTAS_FACET_BASE + "." + subKey + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION + "." + subSubKey + "." + SUBNAME_MTAS_FACET_BASE_FUNCTION_TYPE); <span class="nc" id="L528"> }</span> <span class="nc" id="L529"> }</span> <span class="nc" id="L530"> }</span> } } <span class="nc" id="L533"> }</span> /* * (non-Javadoc) * * @see * mtas.solr.handler.component.util.MtasSolrComponent#create(mtas.codec.util. * CodecComponent.BasicComponent, java.lang.Boolean) */ public SimpleOrderedMap<Object> create(ComponentFacet facet, Boolean encode) throws IOException { <span class="nc" id="L544"> SimpleOrderedMap<Object> mtasFacetResponse = new SimpleOrderedMap<>();</span> <span class="nc" id="L545"> mtasFacetResponse.add("key", facet.key);</span> <span class="nc" id="L546"> HashMap<MtasDataCollector<?, ?>, HashMap<String, MtasSolrMtasResult>> functionData = new HashMap<>();</span> <span class="nc bnc" id="L547" title="All 2 branches missed."> for (int i = 0; i < facet.baseFields.length; i++) {</span> <span class="nc bnc" id="L548" title="All 2 branches missed."> if (facet.baseFunctionList[i] != null) {</span> <span class="nc bnc" id="L549" title="All 2 branches missed."> for (MtasDataCollector<?, ?> functionDataCollector : facet.baseFunctionList[i]</span> <span class="nc" id="L550"> .keySet()) {</span> <span class="nc" id="L551"> SubComponentFunction[] tmpSubComponentFunctionList = facet.baseFunctionList[i]</span> <span class="nc" id="L552"> .get(functionDataCollector);</span> <span class="nc bnc" id="L553" title="All 2 branches missed."> if (tmpSubComponentFunctionList != null) {</span> <span class="nc" id="L554"> HashMap<String, MtasSolrMtasResult> tmpList = new HashMap<>();</span> <span class="nc bnc" id="L555" title="All 2 branches missed."> for (SubComponentFunction tmpSubComponentFunction : tmpSubComponentFunctionList) {</span> <span class="nc" id="L556"> tmpList.put(tmpSubComponentFunction.key,</span> new MtasSolrMtasResult(tmpSubComponentFunction.dataCollector, tmpSubComponentFunction.dataType, tmpSubComponentFunction.statsType, tmpSubComponentFunction.statsItems, null)); } <span class="nc" id="L562"> functionData.put(functionDataCollector, tmpList);</span> } <span class="nc" id="L564"> }</span> } } <span class="nc" id="L567"> MtasSolrMtasResult data = new MtasSolrMtasResult(facet.dataCollector,</span> facet.baseDataTypes, facet.baseStatsTypes, facet.baseStatsItems, facet.baseSortTypes, facet.baseSortDirections, null, facet.baseNumbers, functionData); <span class="nc bnc" id="L572" title="All 2 branches missed."> if (encode) {</span> <span class="nc" id="L573"> mtasFacetResponse.add("_encoded_list", MtasSolrResultUtil.encode(data));</span> } else { <span class="nc" id="L575"> mtasFacetResponse.add("list", data);</span> <span class="nc" id="L576"> MtasSolrResultUtil.rewrite(mtasFacetResponse, searchComponent);</span> } <span class="nc" id="L578"> return mtasFacetResponse;</span> } /* * (non-Javadoc) * * @see * mtas.solr.handler.component.util.MtasSolrComponent#finishStage(org.apache. * solr.handler.component.ResponseBuilder) */ @SuppressWarnings("unchecked") public void finishStage(ResponseBuilder rb) { <span class="nc bnc" id="L590" title="All 6 branches missed."> if (rb.req.getParams().getBool(MtasSolrSearchComponent.PARAM_MTAS, false)</span> && rb.stage >= ResponseBuilder.STAGE_EXECUTE_QUERY && rb.stage < ResponseBuilder.STAGE_GET_FIELDS) { <span class="nc bnc" id="L593" title="All 2 branches missed."> for (ShardRequest sreq : rb.finished) {</span> <span class="nc bnc" id="L594" title="All 2 branches missed."> if (sreq.params.getBool(MtasSolrSearchComponent.PARAM_MTAS, false)</span> <span class="nc bnc" id="L595" title="All 2 branches missed."> && sreq.params.getBool(PARAM_MTAS_FACET, false)) {</span> <span class="nc bnc" id="L596" title="All 2 branches missed."> for (ShardResponse shardResponse : sreq.responses) {</span> <span class="nc" id="L597"> NamedList<Object> response = shardResponse.getSolrResponse()</span> <span class="nc" id="L598"> .getResponse();</span> try { <span class="nc" id="L600"> ArrayList<NamedList<Object>> data = (ArrayList<NamedList<Object>>) response</span> <span class="nc" id="L601"> .findRecursive("mtas", "facet");</span> <span class="nc bnc" id="L602" title="All 2 branches missed."> if (data != null) {</span> <span class="nc" id="L603"> MtasSolrResultUtil.decode(data);</span> } <span class="nc" id="L605"> } catch (ClassCastException e) {</span> <span class="nc" id="L606"> log.debug(e);</span> // shouldn't happen <span class="nc" id="L608"> }</span> <span class="nc" id="L609"> }</span> } <span class="nc" id="L611"> }</span> } <span class="nc" id="L613"> }</span> /* * (non-Javadoc) * * @see * mtas.solr.handler.component.util.MtasSolrComponent#distributedProcess(org. * apache.solr.handler.component.ResponseBuilder, * mtas.codec.util.CodecComponent.ComponentFields) */ @SuppressWarnings("unchecked") public void distributedProcess(ResponseBuilder rb, ComponentFields mtasFields) throws IOException { // rewrite <span class="nc" id="L627"> NamedList<Object> mtasResponse = null;</span> try { <span class="nc" id="L629"> mtasResponse = (NamedList<Object>) rb.rsp.getValues().get("mtas");</span> <span class="nc" id="L630"> } catch (ClassCastException e) {</span> <span class="nc" id="L631"> log.debug(e);</span> <span class="nc" id="L632"> mtasResponse = null;</span> <span class="nc" id="L633"> }</span> <span class="nc bnc" id="L634" title="All 2 branches missed."> if (mtasResponse != null) {</span> ArrayList<Object> mtasResponseFacet; try { <span class="nc" id="L637"> mtasResponseFacet = (ArrayList<Object>) mtasResponse.get("facet");</span> <span class="nc bnc" id="L638" title="All 2 branches missed."> if (mtasResponseFacet != null) {</span> <span class="nc" id="L639"> MtasSolrResultUtil.rewrite(mtasResponseFacet, searchComponent);</span> } <span class="nc" id="L641"> } catch (ClassCastException e) {</span> <span class="nc" id="L642"> log.debug(e);</span> <span class="nc" id="L643"> mtasResponse.remove("facet");</span> <span class="nc" id="L644"> }</span> } <span class="nc" id="L646"> }</span> /** * Gets the field type. * * @param schema the schema * @param field the field * @return the field type */ private String getFieldType(IndexSchema schema, String field) { <span class="nc" id="L656"> SchemaField sf = schema.getField(field);</span> <span class="nc" id="L657"> FieldType ft = sf.getType();</span> <span class="nc bnc" id="L658" title="All 4 branches missed."> if (ft != null && ft.getNumericType() != null) {</span> <span class="nc" id="L659"> LegacyNumericType nt = ft.getNumericType();</span> <span class="nc bnc" id="L660" title="All 2 branches missed."> if (nt.equals(LegacyNumericType.INT)) {</span> <span class="nc" id="L661"> return ComponentFacet.TYPE_INTEGER;</span> <span class="nc bnc" id="L662" title="All 2 branches missed."> } else if (nt.equals(LegacyNumericType.DOUBLE)) {</span> <span class="nc" id="L663"> return ComponentFacet.TYPE_DOUBLE;</span> <span class="nc bnc" id="L664" title="All 2 branches missed."> } else if (nt.equals(LegacyNumericType.LONG)) {</span> <span class="nc" id="L665"> return ComponentFacet.TYPE_LONG;</span> <span class="nc bnc" id="L666" title="All 2 branches missed."> } else if (nt.equals(LegacyNumericType.FLOAT)) {</span> <span class="nc" id="L667"> return ComponentFacet.TYPE_FLOAT;</span> } } <span class="nc" id="L670"> return ComponentFacet.TYPE_STRING;</span> } /** * Gets the positive integer. * * @param number the number * @return the positive integer */ private int getPositiveInteger(String number) { try { <span class="nc" id="L681"> return Math.max(0, Integer.parseInt(number));</span> <span class="nc" id="L682"> } catch (NumberFormatException e) {</span> <span class="nc" id="L683"> return 0;</span> } } /** * Gets the double. * * @param number the number * @return the double */ private Double getDouble(String number) { try { <span class="nc" id="L695"> return Double.parseDouble(number);</span> <span class="nc" id="L696"> } catch (NumberFormatException e) {</span> <span class="nc" id="L697"> return null;</span> } } } </pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.7.9.201702052155</span></div></body></html>