<?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> <span class="fc" id="L110"> break;</span> } else { <span class="fc" id="L112"> boundaryEndKey = entry.getKey();</span> } } else { <span class="fc" id="L115"> endKey = entry.getKey();</span> <span class="fc" id="L116"> boundaryEndKey = entry.getKey();</span> <span class="fc" id="L117"> previous = entry.getValue();</span> } } else { <span class="fc" id="L120"> endKey = entry.getKey();</span> } <span class="fc" id="L122"> counter++;</span> <span class="fc" id="L123"> }</span> <span class="fc" id="L124"> list = list.subMap(startKey, boundaryEndKey);</span> <span class="fc" id="L125"> } else {</span> <span class="nc" id="L126"> list = new TreeMap<>();</span> } <span class="pc bpc" id="L128" title="1 of 4 branches missed."> if (list.size() > 0 && sortType != null) {</span> <span class="fc" id="L129"> lastSortValue = list.get(list.lastKey()).getComparableValue();</span> } <span class="fc" id="L131"> }</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="L141"> this(collectorType, null, null);</span> <span class="fc" id="L142"> this.item = item;</span> <span class="fc" id="L143"> }</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="L153"> String sortDirection) {</span> <span class="fc" id="L154"> list = null;</span> <span class="fc" id="L155"> item = null;</span> <span class="fc" id="L156"> lastSortValue = null;</span> <span class="fc" id="L157"> this.collectorType = collectorType;</span> <span class="fc" id="L158"> this.sortType = sortType;</span> <span class="fc" id="L159"> this.sortDirection = sortDirection;</span> <span class="fc" id="L160"> }</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="L170"> 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="L182" title="1 of 2 branches missed."> if (collectorType.equals(DataCollector.COLLECTOR_TYPE_LIST)) {</span> <span class="pc bpc" id="L183" title="2 of 6 branches missed."> if (reduce && startKey != null && endKey != null) {</span> <span class="fc" id="L184"> return list.subMap(startKey, endKey);</span> } else { <span class="fc" id="L186"> return list;</span> } } else { <span class="nc" id="L189"> 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="L202" title="1 of 2 branches missed."> if (collectorType.equals(DataCollector.COLLECTOR_TYPE_LIST)) {</span> <span class="fc" id="L203"> LinkedHashMap<String, MtasDataItemNumberComparator> comparatorList = new LinkedHashMap<>();</span> <span class="fc bfc" id="L204" title="All 2 branches covered."> for (Entry<String, MtasDataItem<T1, T2>> entry : list.entrySet()) {</span> <span class="fc" id="L205"> comparatorList.put(entry.getKey(),</span> <span class="fc" id="L206"> entry.getValue().getComparableValue());</span> <span class="fc" id="L207"> }</span> <span class="fc" id="L208"> return comparatorList;</span> } else { <span class="nc" id="L210"> 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="L221"> 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="L231" title="1 of 2 branches missed."> if (collectorType.equals(DataCollector.COLLECTOR_TYPE_DATA)) {</span> <span class="fc" id="L232"> return item;</span> } else { <span class="nc" id="L234"> throw new IOException("type " + collectorType + " not supported");</span> } } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ @Override public String toString() { <span class="nc" id="L245"> StringBuilder buffer = new StringBuilder();</span> <span class="nc" id="L246"> buffer.append(this.getClass().getSimpleName() + "(");</span> <span class="nc" id="L247"> buffer.append(collectorType + "," + sortType + "," + sortDirection);</span> <span class="nc" id="L248"> buffer.append(")");</span> <span class="nc" id="L249"> 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>