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.socketadapter;
28
29 import java.lang.reflect.Method;
30
31 import org.perfidix.exceptions.AbstractPerfidixMethodException;
32 import org.perfidix.exceptions.SocketViewException;
33 import org.perfidix.meter.AbstractMeter;
34 import org.perfidix.ouput.AbstractOutput;
35 import org.perfidix.result.BenchmarkResult;
36
37 /**
38 * Listener for Perclipse
39 *
40 * @author Sebastian Graf, University of Konstanz
41 */
42 public final class SocketListener extends AbstractOutput {
43
44 /**
45 * Instance to the perclipse view.
46 */
47 private transient final IUpdater view;
48
49 /**
50 * Constructor with the port for initalising the connection to the view.
51 *
52 * @param paramView
53 * connection to the perclipse view
54 */
55 public SocketListener(final IUpdater paramView) {
56 super();
57 view = paramView;
58 }
59
60 /** {@inheritDoc} */
61 @Override
62 public boolean listenToException(final AbstractPerfidixMethodException exec) {
63 try {
64 return view.updateErrorInElement((exec.getMethod().getDeclaringClass().getName() + "." + exec
65 .getMethod().getName()), exec);
66 } catch (final SocketViewException e) {
67 throw new IllegalStateException(e);
68 }
69
70 }
71
72 /** {@inheritDoc} */
73 @Override
74 public boolean listenToResultSet(final Method meth, final AbstractMeter meter, final double data) {
75 try {
76 return view.updateCurrentElement(meter, (meth.getDeclaringClass().getName() + "." + meth
77 .getName()));
78 } catch (final SocketViewException e) {
79 throw new IllegalStateException(e);
80 }
81 }
82
83 /** {@inheritDoc} */
84 @Override
85 public void visitBenchmark(final BenchmarkResult res) {
86 throw new UnsupportedOperationException("Operation is not permitted!");
87 }
88
89 }