1 /** 2 * Redistribution and use in source and binary forms, with or without 3 * modification, are permitted provided that the following conditions are 4 * met : 5 * 6 * . Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * 9 * . Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * . The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 25 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 package cppncss; 30 31 import java.util.ArrayList; 32 import java.util.List; 33 34 /** 35 * Captures behaviours common to all result outputs. 36 * 37 * @author Mathieu Champlon 38 */ 39 public abstract class AbstractResultOutput implements ResultOutput 40 { 41 private final List<String> labels = new ArrayList<String>(); 42 private int current; 43 private int index; 44 45 /** 46 * {@inheritDoc} 47 */ 48 public final void notify( final String type, final List<String> labels ) 49 { 50 this.labels.clear(); 51 this.labels.addAll( labels ); 52 this.current = 0; 53 this.index = 0; 54 printHeaders( type, labels ); 55 } 56 57 /** 58 * {@inheritDoc} 59 */ 60 public final void notify( final String type, final String item, final int count ) 61 { 62 if( current == 0 ) 63 printIndex( item, ++index ); 64 final String label = labels.get( current ); 65 if( !label.startsWith( type ) ) 66 printMeasurement( label, count ); 67 ++current; 68 current %= labels.size(); 69 if( current == 0 ) 70 printItem( item ); 71 } 72 73 /** 74 * Print measurements headers. 75 * 76 * @param type the type of the measurement 77 * @param labels a list of all measurement names 78 */ 79 protected abstract void printHeaders( String type, List<String> labels ); 80 81 /** 82 * Print the index of an item. 83 * 84 * @param item the name of the item 85 * @param index the index 86 */ 87 protected abstract void printIndex( String item, int index ); 88 89 /** 90 * Print an item. 91 * 92 * @param item the name of the item 93 */ 94 protected abstract void printItem( String item ); 95 96 /** 97 * Print a measurement. 98 * 99 * @param label the name of the measurement 100 * @param count the result value of the measurement 101 */ 102 protected abstract void printMeasurement( String label, int count ); 103 }