View Javadoc

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  }