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 }