<?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>MtasSolrComponentPrefix.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">MtasSolrComponentPrefix.java</span></div><h1>MtasSolrComponentPrefix.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.Set; import java.util.SortedSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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 mtas.codec.util.CodecComponent.ComponentField; import mtas.codec.util.CodecComponent.ComponentFields; import mtas.codec.util.CodecComponent.ComponentPrefix; import mtas.solr.handler.component.MtasSolrSearchComponent; /** * The Class MtasSolrComponentPrefix. */ public class MtasSolrComponentPrefix implements MtasSolrComponent<ComponentPrefix> { /** The Constant log. */ <span class="fc" id="L29"> private static final Log log = LogFactory</span> <span class="fc" id="L30"> .getLog(MtasSolrComponentPrefix.class);</span> /** The search component. */ MtasSolrSearchComponent searchComponent; /** The Constant PARAM_MTAS_PREFIX. */ public static final String PARAM_MTAS_PREFIX = MtasSolrSearchComponent.PARAM_MTAS + ".prefix"; /** The Constant NAME_MTAS_PREFIX_FIELD. */ public static final String NAME_MTAS_PREFIX_FIELD = "field"; /** The Constant NAME_MTAS_PREFIX_KEY. */ public static final String NAME_MTAS_PREFIX_KEY = "key"; /** * Instantiates a new mtas solr component prefix. * * @param searchComponent the search component */ <span class="fc" id="L50"> public MtasSolrComponentPrefix(MtasSolrSearchComponent searchComponent) {</span> <span class="fc" id="L51"> this.searchComponent = searchComponent;</span> <span class="fc" id="L52"> }</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="fc" id="L64"> Set<String> ids = MtasSolrResultUtil</span> <span class="fc" id="L65"> .getIdsFromParameters(rb.req.getParams(), PARAM_MTAS_PREFIX);</span> <span class="pc bpc" id="L66" title="1 of 2 branches missed."> if (!ids.isEmpty()) {</span> <span class="fc" id="L67"> int tmpCounter = 0;</span> <span class="fc" id="L68"> String[] fields = new String[ids.size()];</span> <span class="fc" id="L69"> String[] keys = new String[ids.size()];</span> <span class="fc bfc" id="L70" title="All 2 branches covered."> for (String id : ids) {</span> <span class="fc" id="L71"> fields[tmpCounter] = rb.req.getParams().get(</span> PARAM_MTAS_PREFIX + "." + id + "." + NAME_MTAS_PREFIX_FIELD, null); <span class="fc" id="L73"> keys[tmpCounter] = rb.req.getParams()</span> <span class="fc" id="L74"> .get(PARAM_MTAS_PREFIX + "." + id + "." + NAME_MTAS_PREFIX_KEY,</span> <span class="fc" id="L75"> String.valueOf(tmpCounter))</span> <span class="fc" id="L76"> .trim();</span> <span class="fc" id="L77"> tmpCounter++;</span> <span class="fc" id="L78"> }</span> <span class="fc" id="L79"> String uniqueKeyField = rb.req.getSchema().getUniqueKeyField().getName();</span> <span class="fc" id="L80"> mtasFields.doPrefix = true;</span> // init and checks <span class="fc bfc" id="L82" title="All 2 branches covered."> for (String field : fields) {</span> <span class="pc bpc" id="L83" title="2 of 4 branches missed."> if (field == null || field.isEmpty()) {</span> <span class="nc" id="L84"> throw new IOException("no (valid) field in mtas prefix");</span> <span class="pc bpc" id="L85" title="1 of 2 branches missed."> } else if (!mtasFields.list.containsKey(field)) {</span> <span class="fc" id="L86"> mtasFields.list.put(field, new ComponentField(uniqueKeyField));</span> } } <span class="fc" id="L89"> MtasSolrResultUtil.compareAndCheck(keys, fields, NAME_MTAS_PREFIX_KEY,</span> <span class="fc" id="L90"> NAME_MTAS_PREFIX_FIELD, true);</span> <span class="fc bfc" id="L91" title="All 2 branches covered."> for (int i = 0; i < fields.length; i++) {</span> <span class="fc" id="L92"> String field = fields[i];</span> <span class="pc bpc" id="L93" title="2 of 4 branches missed."> String key = ((keys == null) || (keys[i] == null)</span> <span class="pc bpc" id="L94" title="1 of 2 branches missed."> || (keys[i].isEmpty())) ? String.valueOf(i) + ":" + field</span> <span class="fc" id="L95"> : keys[i].trim();</span> <span class="fc" id="L96"> mtasFields.list.get(field).prefix = new ComponentPrefix(key);</span> } } <span class="fc" id="L99"> }</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="pc bpc" id="L112" title="1 of 2 branches missed."> if (sreq.params.getBool(MtasSolrSearchComponent.PARAM_MTAS, false)) {</span> <span class="pc bpc" id="L113" title="1 of 4 branches missed."> if (sreq.params.getBool(PARAM_MTAS_PREFIX, false)</span> && (sreq.purpose & ShardRequest.PURPOSE_GET_TOP_IDS) != 0) { // do nothing } else { // remove prefix for other requests <span class="fc" id="L118"> Set<String> keys = MtasSolrResultUtil</span> <span class="fc" id="L119"> .getIdsFromParameters(rb.req.getParams(), PARAM_MTAS_PREFIX);</span> <span class="fc" id="L120"> sreq.params.remove(PARAM_MTAS_PREFIX);</span> <span class="fc bfc" id="L121" title="All 2 branches covered."> for (String key : keys) {</span> <span class="fc" id="L122"> sreq.params.remove(</span> PARAM_MTAS_PREFIX + "." + key + "." + NAME_MTAS_PREFIX_FIELD); <span class="fc" id="L124"> sreq.params.remove(</span> PARAM_MTAS_PREFIX + "." + key + "." + NAME_MTAS_PREFIX_KEY); <span class="fc" id="L126"> }</span> } } <span class="fc" id="L129"> }</span> /* * (non-Javadoc) * * @see * mtas.solr.handler.component.util.MtasSolrComponent#create(mtas.codec.util. * CodecComponent.BasicComponent, java.lang.Boolean) */ public SimpleOrderedMap<Object> create(ComponentPrefix prefix, Boolean encode) throws IOException { <span class="fc" id="L140"> SimpleOrderedMap<Object> mtasPrefixResponse = new SimpleOrderedMap<>();</span> <span class="fc" id="L141"> mtasPrefixResponse.add("key", prefix.key);</span> <span class="fc bfc" id="L142" title="All 2 branches covered."> if (encode) {</span> <span class="fc" id="L143"> mtasPrefixResponse.add("_encoded_singlePosition",</span> <span class="fc" id="L144"> MtasSolrResultUtil.encode(prefix.singlePositionList));</span> <span class="fc" id="L145"> mtasPrefixResponse.add("_encoded_multiplePosition",</span> <span class="fc" id="L146"> MtasSolrResultUtil.encode(prefix.multiplePositionList));</span> <span class="fc" id="L147"> mtasPrefixResponse.add("_encoded_setPosition",</span> <span class="fc" id="L148"> MtasSolrResultUtil.encode(prefix.setPositionList));</span> <span class="fc" id="L149"> mtasPrefixResponse.add("_encoded_intersecting",</span> <span class="fc" id="L150"> MtasSolrResultUtil.encode(prefix.intersectingList));</span> } else { <span class="fc" id="L152"> mtasPrefixResponse.add("singlePosition", prefix.singlePositionList);</span> <span class="fc" id="L153"> mtasPrefixResponse.add("multiplePosition", prefix.multiplePositionList);</span> <span class="fc" id="L154"> mtasPrefixResponse.add("setPosition", prefix.setPositionList);</span> <span class="fc" id="L155"> mtasPrefixResponse.add("intersecting", prefix.intersectingList);</span> } <span class="fc" id="L157"> return mtasPrefixResponse;</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="pc bpc" id="L169" title="1 of 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="fc bfc" id="L172" title="All 2 branches covered."> for (ShardRequest sreq : rb.finished) {</span> <span class="pc bpc" id="L173" title="1 of 2 branches missed."> if (sreq.params.getBool(MtasSolrSearchComponent.PARAM_MTAS, false)</span> <span class="pc bpc" id="L174" title="1 of 2 branches missed."> && sreq.params.getBool(PARAM_MTAS_PREFIX, false)) {</span> <span class="fc bfc" id="L175" title="All 2 branches covered."> for (ShardResponse shardResponse : sreq.responses) {</span> <span class="fc" id="L176"> NamedList<Object> response = shardResponse.getSolrResponse()</span> <span class="fc" id="L177"> .getResponse();</span> try { <span class="fc" id="L179"> ArrayList<NamedList<Object>> data = (ArrayList<NamedList<Object>>) response</span> <span class="fc" id="L180"> .findRecursive("mtas", "prefix");</span> <span class="pc bpc" id="L181" title="1 of 2 branches missed."> if (data != null) {</span> <span class="fc" id="L182"> MtasSolrResultUtil.decode(data);</span> } <span class="nc" id="L184"> } catch (ClassCastException e) {</span> <span class="nc" id="L185"> log.debug(e);</span> // shouldnt happen <span class="fc" id="L187"> }</span> <span class="fc" id="L188"> }</span> } <span class="fc" id="L190"> }</span> } <span class="fc" id="L192"> }</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="fc" id="L206"> NamedList<Object> mtasResponse = null;</span> try { <span class="fc" id="L208"> mtasResponse = (NamedList<Object>) rb.rsp.getValues().get("mtas");</span> <span class="nc" id="L209"> } catch (ClassCastException e) {</span> <span class="nc" id="L210"> log.debug(e);</span> <span class="nc" id="L211"> mtasResponse = null;</span> <span class="fc" id="L212"> }</span> <span class="pc bpc" id="L213" title="1 of 2 branches missed."> if (mtasResponse != null) {</span> ArrayList<Object> mtasResponsePrefix; try { <span class="fc" id="L216"> mtasResponsePrefix = (ArrayList<Object>) mtasResponse.get("prefix");</span> <span class="pc bpc" id="L217" title="1 of 2 branches missed."> if (mtasResponsePrefix != null) {</span> NamedList<Object> mtasResponsePrefixItem; <span class="fc bfc" id="L219" title="All 2 branches covered."> for (Object mtasResponsePrefixItemRaw : mtasResponsePrefix) {</span> <span class="fc" id="L220"> mtasResponsePrefixItem = (NamedList<Object>) mtasResponsePrefixItemRaw;</span> <span class="fc" id="L221"> repairPrefixItems(mtasResponsePrefixItem);</span> <span class="fc" id="L222"> MtasSolrResultUtil.rewrite(mtasResponsePrefixItem, searchComponent);</span> <span class="fc" id="L223"> }</span> } <span class="nc" id="L225"> } catch (ClassCastException e) {</span> <span class="nc" id="L226"> log.debug(e);</span> <span class="nc" id="L227"> mtasResponse.remove("prefix");</span> <span class="fc" id="L228"> }</span> } <span class="fc" id="L230"> }</span> /** * Repair prefix items. * * @param mtasResponse the mtas response */ @SuppressWarnings("unchecked") private void repairPrefixItems(NamedList<Object> mtasResponse) { // repair prefix lists try { <span class="fc" id="L241"> ArrayList<NamedList<?>> list = (ArrayList<NamedList<?>>) mtasResponse</span> <span class="fc" id="L242"> .findRecursive("prefix");</span> // MtasSolrResultUtil.rewrite(list); <span class="pc bpc" id="L244" title="1 of 2 branches missed."> if (list != null) {</span> <span class="nc bnc" id="L245" title="All 2 branches missed."> for (NamedList<?> item : list) {</span> <span class="nc" id="L246"> SortedSet<String> singlePosition = (SortedSet<String>) item</span> <span class="nc" id="L247"> .get("singlePosition");</span> <span class="nc" id="L248"> SortedSet<String> multiplePosition = (SortedSet<String>) item</span> <span class="nc" id="L249"> .get("multiplePosition");</span> <span class="nc bnc" id="L250" title="All 4 branches missed."> if (singlePosition != null && multiplePosition != null) {</span> <span class="nc bnc" id="L251" title="All 2 branches missed."> for (String prefix : multiplePosition) {</span> <span class="nc bnc" id="L252" title="All 2 branches missed."> if (singlePosition.contains(prefix)) {</span> <span class="nc" id="L253"> singlePosition.remove(prefix);</span> } <span class="nc" id="L255"> }</span> } <span class="nc" id="L257"> }</span> } <span class="nc" id="L259"> } catch (ClassCastException e) {</span> <span class="nc" id="L260"> log.debug(e);</span> <span class="fc" id="L261"> }</span> <span class="fc" id="L262"> }</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>