KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > component > menubar > MenuItemsRenderer


1 /*
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * "The contents of this file are subject to the Mozilla Public License
5  * Version 1.1 (the "License"); you may not use this file except in
6  * compliance with the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS"
10  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
11  * License for the specific language governing rights and limitations under
12  * the License.
13  *
14  * The Original Code is ICEfaces 1.5 open source software code, released
15  * November 5, 2006. The Initial Developer of the Original Code is ICEsoft
16  * Technologies Canada, Corp. Portions created by ICEsoft are Copyright (C)
17  * 2004-2006 ICEsoft Technologies Canada, Corp. All Rights Reserved.
18  *
19  * Contributor(s): _____________________.
20  *
21  * Alternatively, the contents of this file may be used under the terms of
22  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"
23  * License), in which case the provisions of the LGPL License are
24  * applicable instead of those above. If you wish to allow use of your
25  * version of this file only under the terms of the LGPL License and not to
26  * allow others to use your version of this file under the MPL, indicate
27  * your decision by deleting the provisions above and replace them with
28  * the notice and other provisions required by the LGPL License. If you do
29  * not delete the provisions above, a recipient may use your version of
30  * this file under either the MPL or the LGPL License."
31  *
32  */

33
34 package com.icesoft.faces.component.menubar;
35
36 import com.icesoft.faces.component.InvalidComponentTypeException;
37 import com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer;
38
39 import javax.faces.component.UIComponent;
40 import javax.faces.context.FacesContext;
41 import javax.faces.el.MethodBinding;
42 import javax.faces.event.ActionListener;
43 import java.io.IOException JavaDoc;
44 import java.util.List JavaDoc;
45
46 public class MenuItemsRenderer extends DomBasicRenderer {
47
48     public boolean getRendersChildren() {
49         return true;
50     }
51
52     public void encodeChildren(FacesContext context, UIComponent component)
53             throws IOException JavaDoc {
54         MenuItems menuItems = (MenuItems) component;
55         List JavaDoc children = (List JavaDoc) menuItems.getValue();
56         // extract the actionListener and action methodBindings from the MenuItems
57
// then attach them to the child MenuItem objects
58
ActionListener[] als = menuItems.getActionListeners();
59         MethodBinding almb = menuItems.getActionListener();
60         MethodBinding amb = menuItems.getAction();
61         setParentsRecursive(component, children, als, almb, amb);
62         renderRecursive(context, children);
63     }
64
65     private void renderRecursive(FacesContext context, List JavaDoc children)
66             throws IOException JavaDoc {
67         for (int i = 0; i < children.size(); i++) {
68             UIComponent nextChildMenuNode = (UIComponent) children.get(i);
69             encodeParentAndChildren(context, nextChildMenuNode);
70         }
71     }
72
73     private void setParentsRecursive(UIComponent parent, List JavaDoc children,
74                                      ActionListener[] als,
75                                      MethodBinding almb, MethodBinding amb) {
76         for (int i = 0; i < children.size(); i++) {
77             UIComponent nextChild = null;
78             if (!((nextChild =
79                     (UIComponent) children.get(i)) instanceof MenuItemBase)) {
80                 throw new InvalidComponentTypeException(
81                         "MenuItemsRenderer expects MenuItemBase children");
82             }
83             nextChild.setParent(parent);
84
85             // here's where we attach the action and actionlistener methodBindings to the MenuItem
86
if( nextChild instanceof MenuItemBase ) {
87                 MenuItemBase nextChildMenuItemBase = (MenuItemBase) nextChild;
88                 if (null != als) {
89                     for(int j = 0; j < als.length; j++) {
90                         nextChildMenuItemBase.removeActionListener(als[j]);
91                         nextChildMenuItemBase.addActionListener(als[j]);
92                     }
93                 }
94                 if (null != almb) {
95                     nextChildMenuItemBase.setActionListener(almb);
96                 }
97                 if (null != amb) {
98                     nextChildMenuItemBase.setAction(amb);
99                 }
100             }
101
102             List JavaDoc grandChildren = nextChild.getChildren();
103             setParentsRecursive(nextChild, grandChildren, als, almb, amb);
104         }
105     }
106 }
107
Popular Tags