Clover Coverage Report - perfectjpattern(Aggregated)
Coverage timestamp: Sat Feb 28 2009 14:35:07 CET
../../../../../img/srcFileCovDistChart10.png 0% of files have more coverage
7   83   4   3.5
0   36   0.57   2
2     2  
1    
 
  AsynchronousSubject       Line # 41 7 0% 4 0 100% 1.0
 
  (1)
 
1    //----------------------------------------------------------------------
2    //
3    // PerfectJPattern: "Design patterns are good but components are better!"
4    // AsynchronousSubject.java Copyright (c) 2009 Giovanni Azua Garcia
5    // bravegag@hotmail.com
6    //
7    // This program is free software; you can redistribute it and/or
8    // modify it under the terms of the GNU General Public License
9    // as published by the Free Software Foundation; either version 3
10    // of the License, or (at your option) any later version.
11    //
12    // This program is distributed in the hope that it will be useful,
13    // but WITHOUT ANY WARRANTY; without even the implied warranty of
14    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15    // GNU General Public License for more details.
16    //
17    // You should have received a copy of the GNU General Public License
18    // along with this program; if not, see <http://www.gnu.org/licenses/>.
19    //
20    //----------------------------------------------------------------------
21    package org.perfectjpattern.core.behavioral.observer;
22   
23    import org.apache.commons.lang.*;
24    import org.perfectjpattern.core.api.behavioral.observer.*;
25   
26   
27    /**
28    * Implementation of <code>ISubject</code> that notifies Observer instances
29    * from separate threads of execution.
30    * <br/>
31    *
32    * @see Subject
33    *
34    * @param <E> Type of event data this <code>ISubject</code>
35    * notifies with.
36    *
37    * @author <a href="mailto:bravegag@hotmail.com">Giovanni Azua</a>
38    * @version $Revision: 1.0 $ $Date: Nov 13, 2007 10:28:42 PM $
39    */
40    public
 
41    class AsynchronousSubject<E>
42    extends Subject<E>
43    {
44    //------------------------------------------------------------------------
45    // public
46    //------------------------------------------------------------------------
47    /**
48    * {@inheritDoc}
49    */
 
50  2 toggle @SuppressWarnings("unchecked")
51    @Override
52    public void
53    notifyObservers(final E anEventData)
54    {
55  2 Validate.notNull(anEventData, "'anEventData' must not be null");
56   
57  2 IObserver<E>[] myObservers = getObservers().toArray(EMPTY_ARRAY);
58   
59  2 for (final IObserver<E> myObserver : myObservers)
60    {
61  4 new Thread(
62    new Runnable()
63    {
64    //--------------------------------------------------------
 
65  4 toggle public void
66    run()
67    {
68  4 try
69    {
70  4 myObserver.update(anEventData);
71    }
72    // CHECKSTYLE:OFF
73    catch (Throwable anException)
74    // CHECKSTYLE:ON
75    {
76  1 detach(myObserver);
77    }
78    }
79    }
80    ).start();
81    }
82    }
83    }