<?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>MtasDataCollectorResult.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.codec.util.collector</a> > <span class="el_source">MtasDataCollectorResult.java</span></div><h1>MtasDataCollectorResult.java</h1><pre class="source lang-java linenums">package mtas.codec.util.collector; import java.io.IOException; import java.io.Serializable; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.NavigableMap; import java.util.SortedMap; import java.util.TreeMap; import mtas.codec.util.CodecUtil; import mtas.codec.util.DataCollector; /** * The Class MtasDataCollectorResult. * * @param <T1> the generic type * @param <T2> the generic type */ public class MtasDataCollectorResult<T1 extends Number & Comparable<T1>, T2 extends Number & Comparable<T2>> implements Serializable { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 1L; /** The list. */ private SortedMap<String, MtasDataItem<T1, T2>> list; /** The item. */ private MtasDataItem<T1, T2> item; /** The sort type. */ private String sortType; /** The sort direction. */ private String sortDirection; /** The collector type. */ private String collectorType; /** The last sort value. */ private MtasDataItemNumberComparator lastSortValue; /** The start key. */ String startKey; /** The end key. */ String endKey; /** * Instantiates a new mtas data collector result. * * @param collectorType the collector type * @param sortType the sort type * @param sortDirection the sort direction * @param basicList the basic list * @param start the start * @param number the number * @throws IOException Signals that an I/O exception has occurred. */ public MtasDataCollectorResult(String collectorType, String sortType, String sortDirection, NavigableMap<String, MtasDataItem<T1, T2>> basicList, Integer start, Integer number) throws IOException { <span class="fc" id="L67"> this(collectorType, sortType, sortDirection);</span> <span class="pc bpc" id="L68" title="1 of 4 branches missed."> if (sortType == null || sortType.equals(CodecUtil.SORT_TERM)) {</span> <span class="pc bpc" id="L69" title="1 of 4 branches missed."> if (sortDirection == null || sortDirection.equals(CodecUtil.SORT_ASC)) {</span> <span class="fc" id="L70"> list = basicList;</span> <span class="pc bpc" id="L71" title="1 of 2 branches missed."> } else if (sortDirection.equals(CodecUtil.SORT_DESC)) {</span> <span class="fc" id="L72"> list = basicList.descendingMap();</span> } else { <span class="nc" id="L74"> throw new IOException("unknown sort direction " + sortDirection);</span> } <span class="pc bpc" id="L76" title="1 of 2 branches missed."> } else if (CodecUtil.isStatsType(sortType)) {</span> // comperator <span class="fc" id="L78"> Comparator<String> valueComparator = new Comparator<String>() {</span> @Override public int compare(String k1, String k2) { <span class="fc" id="L81"> int compare = basicList.get(k1).compareTo(basicList.get(k2));</span> <span class="fc bfc" id="L82" title="All 2 branches covered."> return compare == 0 ? k1.compareTo(k2) : compare;</span> } }; <span class="fc" id="L85"> SortedMap<String, MtasDataItem<T1, T2>> sortedByValues = new TreeMap<>(</span> valueComparator); <span class="fc" id="L87"> sortedByValues.putAll(basicList);</span> <span class="fc" id="L88"> list = sortedByValues;</span> <span class="fc" id="L89"> } else {</span> <span class="nc" id="L90"> throw new IOException("unknown sort type " + sortType);</span> } <span class="pc bpc" id="L92" title="1 of 2 branches missed."> int listStart = start == null ? 0 : start;</span> <span class="pc bpc" id="L93" title="2 of 6 branches missed."> if (number == null || (start == 0 && number >= list.size())) {</span> // do nothing, full list is ok <span class="pc bpc" id="L95" title="2 of 4 branches missed."> } else if (listStart < list.size() && number > 0) {</span> // subset <span class="fc" id="L97"> String boundaryEndKey = null;</span> <span class="fc" id="L98"> int counter = 0;</span> <span class="fc" id="L99"> MtasDataItem<T1, T2> previous = null;</span> <span class="fc bfc" id="L100" title="All 2 branches covered."> for (Entry<String, MtasDataItem<T1, T2>> entry : list.entrySet()) {</span> <span class="fc bfc" id="L101" title="All 2 branches covered."> if (listStart == counter) {</span> <span class="fc" id="L102"> startKey = entry.getKey();</span> <span class="fc bfc" id="L103" title="All 2 branches covered."> } else if (listStart + number <= counter) {</span> <span class="pc bpc" id="L104" title="1 of 4 branches missed."> if (sortType == null || sortType.equals(CodecUtil.SORT_TERM)) {</span> <span class="fc" id="L105"> endKey = entry.getKey();</span> <span class="fc" id="L106"> boundaryEndKey = entry.getKey();</span> <span class="fc" id="L107"> break;</span> <span class="fc bfc" id="L108" title="All 2 branches covered."> } else if (previous != null) {</span> <span class="fc bfc" id="L109" title="All 2 branches covered."> if (previous.compareTo(entry.getValue()) != 0) {</span> //ready, previous not equal to this item <span class="fc" id="L111"> break;</span> } else { //register this as possible boundaryEndKey, but continue <span class="fc" id="L114"> boundaryEndKey = entry.getKey();</span> } } else { //possibly ready, but check next <span class="fc" id="L118"> endKey = entry.getKey();</span> <span class="fc" id="L119"> boundaryEndKey = entry.getKey();</span> <span class="fc" id="L120"> previous = entry.getValue();</span> } } <span class="fc" id="L123"> counter++;</span> <span class="fc" id="L124"> } </span> <span class="pc bpc" id="L125" title="1 of 2 branches missed."> if(startKey!=null) {</span> <span class="pc bpc" id="L126" title="1 of 2 branches missed."> if(boundaryEndKey!=null) {</span> <span class="fc" id="L127"> list = list.subMap(startKey, boundaryEndKey);</span> } else { <span class="nc" id="L129"> list = list.tailMap(startKey);</span> } } else { <span class="nc" id="L132"> list = new TreeMap<>();</span> } <span class="fc" id="L134"> } else {</span> <span class="nc" id="L135"> list = new TreeMap<>();</span> } <span class="pc bpc" id="L137" title="1 of 4 branches missed."> if (list.size() > 0 && sortType != null) {</span> <span class="fc" id="L138"> lastSortValue = list.get(list.lastKey()).getComparableValue();</span> } <span class="fc" id="L140"> }</span> /** * Instantiates a new mtas data collector result. * * @param collectorType the collector type * @param item the item */ public MtasDataCollectorResult(String collectorType, MtasDataItem<T1, T2> item) { <span class="fc" id="L150"> this(collectorType, null, null);</span> <span class="fc" id="L151"> this.item = item;</span> <span class="fc" id="L152"> }</span> /** * Instantiates a new mtas data collector result. * * @param collectorType the collector type * @param sortType the sort type * @param sortDirection the sort direction */ public MtasDataCollectorResult(String collectorType, String sortType, <span class="fc" id="L162"> String sortDirection) {</span> <span class="fc" id="L163"> list = null;</span> <span class="fc" id="L164"> item = null;</span> <span class="fc" id="L165"> lastSortValue = null;</span> <span class="fc" id="L166"> this.collectorType = collectorType;</span> <span class="fc" id="L167"> this.sortType = sortType;</span> <span class="fc" id="L168"> this.sortDirection = sortDirection;</span> <span class="fc" id="L169"> }</span> /** * Gets the list. * * @return the list * @throws IOException Signals that an I/O exception has occurred. */ public final SortedMap<String, MtasDataItem<T1, T2>> getList() throws IOException { <span class="fc" id="L179"> return getList(true);</span> } /** * Gets the list. * * @param reduce the reduce * @return the list * @throws IOException Signals that an I/O exception has occurred. */ public final SortedMap<String, MtasDataItem<T1, T2>> getList(boolean reduce) throws IOException { <span class="pc bpc" id="L191" title="1 of 2 branches missed."> if (collectorType.equals(DataCollector.COLLECTOR_TYPE_LIST)) {</span> <span class="pc bpc" id="L192" title="2 of 6 branches missed."> if (reduce && startKey != null && endKey != null) {</span> <span class="fc" id="L193"> return list.subMap(startKey, endKey);</span> } else { <span class="fc" id="L195"> return list;</span> } } else { <span class="nc" id="L198"> throw new IOException("type " + collectorType + " not supported");</span> } } /** * Gets the comparator list. * * @return the comparator list * @throws IOException Signals that an I/O exception has occurred. */ @SuppressWarnings("rawtypes") public final Map<String, MtasDataItemNumberComparator> getComparatorList() throws IOException { <span class="pc bpc" id="L211" title="1 of 2 branches missed."> if (collectorType.equals(DataCollector.COLLECTOR_TYPE_LIST)) {</span> <span class="fc" id="L212"> LinkedHashMap<String, MtasDataItemNumberComparator> comparatorList = new LinkedHashMap<>();</span> <span class="fc bfc" id="L213" title="All 2 branches covered."> for (Entry<String, MtasDataItem<T1, T2>> entry : list.entrySet()) {</span> <span class="fc" id="L214"> comparatorList.put(entry.getKey(),</span> <span class="fc" id="L215"> entry.getValue().getComparableValue());</span> <span class="fc" id="L216"> }</span> <span class="fc" id="L217"> return comparatorList;</span> } else { <span class="nc" id="L219"> throw new IOException("type " + collectorType + " not supported");</span> } } /** * Gets the last sort value. * * @return the last sort value */ @SuppressWarnings("rawtypes") public final MtasDataItemNumberComparator getLastSortValue() { <span class="fc" id="L230"> return lastSortValue;</span> } /** * Gets the data. * * @return the data * @throws IOException Signals that an I/O exception has occurred. */ public final MtasDataItem<T1, T2> getData() throws IOException { <span class="pc bpc" id="L240" title="1 of 2 branches missed."> if (collectorType.equals(DataCollector.COLLECTOR_TYPE_DATA)) {</span> <span class="fc" id="L241"> return item;</span> } else { <span class="nc" id="L243"> throw new IOException("type " + collectorType + " not supported");</span> } } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ @Override public String toString() { <span class="nc" id="L254"> StringBuilder buffer = new StringBuilder();</span> <span class="nc" id="L255"> buffer.append(this.getClass().getSimpleName() + "(");</span> <span class="nc" id="L256"> buffer.append(collectorType + "," + sortType + "," + sortDirection);</span> <span class="nc" id="L257"> buffer.append(")");</span> <span class="nc" id="L258"> return buffer.toString();</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>