1 //---------------------------------------------------------------------- 2 // 3 // PerfectJPattern: "Design patterns are good but components are better!" 4 // Example.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 java.util.*; 24 25 import org.perfectjpattern.core.api.behavioral.chainofresponsibility.*; 26 27 /** 28 * Startup Main for the Chain Of Responsibility Pattern Example code 29 * 30 * @author <a href="mailto:bravegag@hotmail.com">Giovanni Azua</a> 31 * @version $Revision: 1.0 $Date: Apr 5, 2008 10:11:17 PM $ 32 */ 33 // CHECKSTYLE:OFF 34 public final 35 class Example 36 // CHECKSTYLE:ON 37 { 38 //------------------------------------------------------------------------ 39 // public 40 //------------------------------------------------------------------------ 41 public static void 42 main(String[] anArguments) 43 { 44 //--------------------------------------------------------------- 45 // Create all components of the Chain of Responsibility 46 //--------------------------------------------------------------- 47 Button myOkButton = new Button("OK"); 48 Button myPrintButton = new Button("Print"); 49 Dialog mySaveDialog = new Dialog("Save"); 50 Dialog myPrintDialog = new Dialog("Print"); 51 Application myApplication = new Application(); 52 53 //--------------------------------------------------------------- 54 // Build "Show Help" Chain of Responsibility 55 //--------------------------------------------------------------- 56 myOkButton.getHelpHandler().setSuccessor(myPrintDialog. 57 getHelpHandler()); 58 myPrintButton.getHelpHandler().setSuccessor(myPrintDialog. 59 getHelpHandler()); 60 myPrintDialog.getHelpHandler().setSuccessor(myApplication. 61 getHelpHandler()); 62 mySaveDialog.getHelpHandler().setSuccessor(myApplication. 63 getHelpHandler()); 64 65 //--------------------------------------------------------------- 66 // Execute "Show Help" Chain of Responsibility from OK Button 67 //--------------------------------------------------------------- 68 myOkButton.getHelpHandler().start(); 69 70 //--------------------------------------------------------------- 71 // Execute "Show Help" Chain of Responsibility from Save Dialog 72 //--------------------------------------------------------------- 73 mySaveDialog.getHelpHandler().start(); 74 75 //--------------------------------------------------------------- 76 // Build "Print" Chain of Responsibility with a strategy 77 // AllHandleStrategy different than the default GoF Chain 78 // OnlyOneHandleStrategy 79 //--------------------------------------------------------------- 80 myOkButton.getPrintHandler().setSuccessor(myPrintDialog. 81 getPrintHandler()); 82 myPrintButton.getPrintHandler().setSuccessor(myPrintDialog. 83 getPrintHandler()); 84 myPrintDialog.getPrintHandler().setSuccessor(myApplication. 85 getPrintHandler()); 86 mySaveDialog.getPrintHandler().setSuccessor(myApplication. 87 getPrintHandler()); 88 89 //--------------------------------------------------------------- 90 // for this use-case we switch to the default Strategy 91 // AllHandleStrategy 92 //--------------------------------------------------------------- 93 List<IHandler<NullRequest>> myHandlers = new ArrayList<IHandler< 94 NullRequest>>(); 95 myHandlers.add(myOkButton.getPrintHandler()); 96 myHandlers.add(myPrintButton.getPrintHandler()); 97 myHandlers.add(myPrintDialog.getPrintHandler()); 98 myHandlers.add(mySaveDialog.getPrintHandler()); 99 myHandlers.add(myApplication.getPrintHandler()); 100 101 for (IHandler<NullRequest> myHandler : myHandlers) 102 { 103 myHandler.setChainStrategy(AllHandleStrategy.getInstance()); 104 } 105 106 //--------------------------------------------------------------- 107 // Execute the "Print" Chain of Responsibility from OK Button 108 //--------------------------------------------------------------- 109 myOkButton.getPrintHandler().start(); 110 111 //--------------------------------------------------------------- 112 // Execute the "Print" Chain of Responsibility from Save Dialog 113 //--------------------------------------------------------------- 114 mySaveDialog.getPrintHandler().start(); 115 } 116 }