1 /** 2 * Copyright (c) 2012, University of Konstanz, Distributed Systems Group 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * * Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 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 * * Neither the name of the University of Konstanz nor the 13 * names of its contributors may 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 COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 * ANY EXPRESS OR 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 <COPYRIGHT HOLDER> BE LIABLE FOR ANY 20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 package org.perfidix.result; 28 29 import java.util.Collection; 30 import java.util.Hashtable; 31 import java.util.Map; 32 33 /** 34 * The result container contains more results. It is by definition recursive, so 35 * it can handle as much diversity as possible 36 * 37 * @author Alexander Onea, neue Couch 38 * @author Sebastian Graf, University of Konstanz 39 * @param <ResultType> 40 * the type of the children. 41 */ 42 public abstract class AbstractResultContainer<ResultType extends AbstractResult> extends AbstractResult { 43 44 /** Map of all elements with the Mapping Method/Class -> ResultType. */ 45 protected transient final Map<Object, ResultType> elements; 46 47 /** 48 * Constructor. 49 * 50 * @param paramElem 51 * related element 52 */ 53 protected AbstractResultContainer(final Object paramElem) { 54 super(paramElem); 55 elements = new Hashtable<Object, ResultType>(); 56 } 57 58 /** 59 * Getting all elements which are included in this result. That means: {@link BenchmarkResult} -> 60 * {@link ClassResult}; {@link ClassResult} -> {@link MethodResult}; 61 * 62 * @return a {@link Collection} of the included results. 63 */ 64 public final Collection<ResultType> getIncludedResults() { 65 return elements.values(); 66 } 67 68 /** 69 * Getting the results for one object. 70 * 71 * @param obj 72 * the object, can be a Class or a Method 73 * @return the result for this object 74 */ 75 public final ResultType getResultForObject(final Object obj) { 76 return elements.get(obj); 77 } 78 79 }