1 //----------------------------------------------------------------------
2 //
3 // PerfectJPattern: "Design patterns are good but components are better!"
4 // AbstractWidget.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.chainofresponsibility;
22
23 import org.perfectjpattern.core.api.behavioral.chainofresponsibility.*;
24
25 /**
26 * Abstract base definition of a AbstractWidget. Adapts or maps the inner
27 * Handler implementation into abstract methods that can be overridden by
28 * subclasses.
29 *
30 * @author <a href="mailto:bravegag@hotmail.com">Giovanni Azua</a>
31 * @version $Revision: 1.0 $Date: Apr 19, 2008 12:25:59 PM $
32 */
33 public abstract
34 class AbstractWidget
35 implements IHelpAware, IPrintAware
36 {
37 //------------------------------------------------------------------------
38 // public
39 //------------------------------------------------------------------------
40 /**
41 * {@inheritDoc}
42 */
43 public IParameterlessHandler
44 getHelpHandler()
45 {
46 return theHelpHandler;
47 }
48
49 //------------------------------------------------------------------------
50 /**
51 * {@inheritDoc}
52 */
53 public IParameterlessHandler
54 getPrintHandler()
55 {
56 return thePrintHandler;
57 }
58
59 //------------------------------------------------------------------------
60 // protected
61 //------------------------------------------------------------------------
62 protected abstract
63 boolean canHandleHelp();
64
65 //------------------------------------------------------------------------
66 protected abstract
67 void handleHelp();
68
69 //------------------------------------------------------------------------
70 protected abstract
71 boolean canHandlePrint();
72
73 //------------------------------------------------------------------------
74 protected abstract
75 void handlePrint();
76
77 //------------------------------------------------------------------------
78 // inner classes
79 //------------------------------------------------------------------------
80 /**
81 * Inner implementation that handles Help requests
82 */
83 private IParameterlessHandler theHelpHandler =
84 new AbstractParameterlessHandler()
85 {
86 //--------------------------------------------------------------------
87 @Override
88 public boolean
89 canHandle(NullRequest aRequest)
90 throws IllegalArgumentException
91 {
92 return canHandleHelp();
93 }
94
95 //--------------------------------------------------------------------
96 public void handle()
97 {
98 handleHelp();
99 }
100 };
101
102 //------------------------------------------------------------------------
103 /**
104 * Inner implementation that handles Print requests
105 */
106 private IParameterlessHandler thePrintHandler =
107 new AbstractParameterlessHandler()
108 {
109 //--------------------------------------------------------------------
110 @Override
111 public boolean
112 canHandle(NullRequest aRequest)
113 throws IllegalArgumentException
114 {
115 return canHandlePrint();
116 }
117
118 //--------------------------------------------------------------------
119 public void
120 handle()
121 {
122 handlePrint();
123 }
124 };
125 }