View Javadoc

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.structural.composite;
22  
23  import java.util.*;
24  
25  import org.perfectjpattern.core.api.structural.composite.*;
26  
27  /**
28   * Startup Main for the Composite 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 composition using the reusable Composite implementation
46          //---------------------------------------------------------------
47          IComposite<IGraphic> myNestedComposite = new Composite<IGraphic>(
48              IGraphic.class);
49          myNestedComposite.add(new Rectangle());                
50          myNestedComposite.add(new Line());
51          myNestedComposite.add(new Line());
52  
53          IComposite<IGraphic> myComposite = new Composite<IGraphic>(IGraphic.
54              class);
55          myComposite.add(new Rectangle());        
56          myComposite.add(new Text());
57          myComposite.add(new Text());
58          myComposite.add(myNestedComposite.getComponent());
59  
60          //---------------------------------------------------------------
61          // Optionally define a custom order for the Composition
62          //---------------------------------------------------------------
63          Comparator<IGraphic> myComparator = new Comparator<IGraphic>()
64          {
65              //----------------------------------------------------------------
66              public int 
67              compare(IGraphic aGraphicA, IGraphic aGraphicB)
68              {
69                  //
70                  // let's say we want to order alphabetically by type, except for
71                  // nested Composite types, we want Composites at the beginning
72                  //
73                  String myNameA = aGraphicA.getClass().getSimpleName();
74                  String myNameB = aGraphicB.getClass().getSimpleName();
75                  
76                  return myNameA.compareTo(myNameB);
77              }            
78          };
79          
80          Collections.sort(myNestedComposite, myComparator);
81          Collections.sort(myComposite, myComparator);
82          
83          //---------------------------------------------------------------
84          // Acquire reference to an IGraphic view of the Composite and call 
85          // business methods on it
86          //---------------------------------------------------------------
87          IGraphic myGraphic = myComposite.getComponent();
88          myGraphic.draw();        
89      }
90  }