1 //----------------------------------------------------------------------
2 //
3 // PerfectJPattern: "Design patterns are good but components are better!"
4 // NullHandler.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.api.behavioral.chainofresponsibility;
22
23 import org.perfectjpattern.core.api.creational.singleton.ISingleton;
24
25 /**
26 * Null Object Pattern implementation of <code>IHandler</code>.
27 * <br/><br/>
28 * <code>NullHandler</code> is a Singleton therefore it may not be directly
29 * instantiated, neither it may be extended.
30 *
31 * @author <a href="mailto:bravegag@hotmail.com">Giovanni Azua</a>
32 * @version $Revision: 1.0 $ $Date: Jun 23, 2007 1:40:23 PM $
33 */
34 public final
35 class NullHandler
36 implements IHandler<Object>, ISingleton
37 {
38 //------------------------------------------------------------------------
39 // public
40 //------------------------------------------------------------------------
41 /**
42 * Returns Singleton instance of <code>NullHandler</code>.
43 *
44 * @return Singleton instance of <code>NullHandler</code>.
45 */
46 public static NullHandler
47 getInstance()
48 {
49 return INSTANCE;
50 }
51
52 //------------------------------------------------------------------------
53 /**
54 * {@inheritDoc}
55 */
56 public IHandler<Object>
57 getSuccessor()
58 throws UnsupportedOperationException
59 {
60 throw new UnsupportedOperationException("'NullHandler' does not " +
61 "support method getSuccessor().");
62 }
63
64 //------------------------------------------------------------------------
65 /**
66 * {@inheritDoc}
67 */
68 public void
69 start(Object aRequest)
70 throws IllegalArgumentException
71 {
72 // do nothing
73 }
74
75 //------------------------------------------------------------------------
76 /**
77 * {@inheritDoc}
78 */
79 public boolean
80 canHandle(Object aRequest)
81 throws IllegalArgumentException
82 {
83 return true;
84 }
85
86 //------------------------------------------------------------------------
87 /**
88 * {@inheritDoc}
89 */
90 public void
91 handle(Object aRequest)
92 {
93 // do nothing
94 }
95
96 //------------------------------------------------------------------------
97 /**
98 * {@inheritDoc}
99 */
100 public void
101 setSuccessor(IHandler<Object> aSuccessor)
102 throws UnsupportedOperationException
103 {
104 throw new UnsupportedOperationException("'NullHandler' does not " +
105 "support method setSuccessor().");
106 }
107
108 //------------------------------------------------------------------------
109 /**
110 * {@inheritDoc}
111 */
112 public void
113 setChainStrategy(IChainStrategy aStrategy)
114 throws IllegalArgumentException
115 {
116 throw new UnsupportedOperationException("'NullHandler' does not " +
117 "support method setChainStrategy().");
118 }
119
120 //------------------------------------------------------------------------
121 // private
122 //------------------------------------------------------------------------
123 private
124 NullHandler()
125 {
126 // do nothing
127 }
128
129 //------------------------------------------------------------------------
130 // members
131 //------------------------------------------------------------------------
132 /**
133 * Singleton instance of <code>NullHandler</code>
134 */
135 private static final NullHandler INSTANCE = new NullHandler();
136 }