KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > roller > presentation > tags > menu > MenuImpl


1
2 package org.roller.presentation.tags.menu;
3
4 import java.util.ArrayList JavaDoc;
5 import java.util.Arrays JavaDoc;
6 import java.util.List JavaDoc;
7 import java.util.Vector JavaDoc;
8
9 import javax.servlet.http.HttpServletRequest JavaDoc;
10 import javax.servlet.http.HttpSession JavaDoc;
11 import javax.servlet.jsp.PageContext JavaDoc;
12
13 import org.roller.RollerException;
14 import org.roller.util.Utilities;
15
16 /////////////////////////////////////////////////////////////////////////
17

18 /** MenuImpl model has collection of menus */
19 public class MenuImpl extends BaseRollerMenu implements Menu
20 {
21     private String JavaDoc mMenuId = null;
22
23     /** Vector of MenuItemImpl objects */
24     Vector JavaDoc mMenuItems = new Vector JavaDoc();
25     
26     /** Is this the default menu? */
27     boolean mDefault = false;
28     
29     public MenuImpl() {}
30
31     /** Construct with name */
32     public MenuImpl(String JavaDoc n) { super(n); }
33     
34     /** Add MenuItemImpl to MenuImpl */
35     public void addItem( MenuItemImpl item ) { mMenuItems.addElement(item); };
36     
37     /** Parent menu's ID */
38     public void setMenuId( String JavaDoc v ) { mMenuId = v; }
39
40     /** Parent menu's ID */
41     public String JavaDoc getMenuId() { return mMenuId; }
42
43     /** Collection of MenuItemImpl objects */
44     public Vector JavaDoc getMenuItems() { return mMenuItems; }
45
46     /** Get currently selected menu item in this menu
47      * @throws RollerException*/

48     public MenuItem getSelectedMenuItem( HttpServletRequest JavaDoc req ) throws RollerException
49     {
50         return getSelectedMenuItem( req, true ) ;
51     }
52
53     /**
54      * Get currently selected menu item in this menu
55      * @throws RollerException
56      */

57     public MenuItem getSelectedMenuItem( HttpServletRequest JavaDoc req,
58             boolean returnDefault ) throws RollerException
59     {
60         MenuItemImpl def = null;
61         MenuItemImpl selected = null;
62         for ( int i=0; i<mMenuItems.size(); i++ )
63         {
64             MenuItemImpl item = (MenuItemImpl)mMenuItems.elementAt(i);
65             if ( item.isSelected( req ) )
66             {
67                 selected = item;
68                 break;
69             }
70             // Set first permitted and enabled menu item in each menu as default
71
if ( item.isPermitted(req) && def == null)
72             {
73                 def = item;
74             }
75         }
76         if ( selected != null )
77         {
78             return selected;
79         }
80         else if ( returnDefault )
81         {
82             return def;
83         }
84         else
85         {
86             return null;
87         }
88     }
89     
90     /**
91      * Get default menu item (first one that is permitted)
92      * @throws RollerException
93      */

94     public MenuItem getDefaultMenuItem( HttpServletRequest JavaDoc req )
95         throws RollerException
96     {
97         MenuItemImpl def = null;
98         MenuItemImpl selected = null;
99         for ( int i=0; i<mMenuItems.size(); i++ )
100         {
101             // Set first permitted and enabled menu item in each menu as default
102
MenuItemImpl item = (MenuItemImpl)mMenuItems.elementAt(i);
103             if (item.isPermitted(req) && def == null)
104             {
105                 def = item;
106             }
107         }
108         return def;
109     }
110
111     /**
112      * Is this menu selected?
113      * @throws RollerException
114      */

115     public boolean isSelected( HttpServletRequest JavaDoc req ) throws RollerException
116     {
117         boolean selected = false;
118         HttpSession JavaDoc ses = req.getSession(false);
119         
120         String JavaDoc menuKey = req.getParameter(RollerMenuModel.MENU_KEY );
121         if (null == menuKey)
122         {
123             menuKey = (String JavaDoc)req.getAttribute(RollerMenuModel.MENU_KEY);
124         }
125         if (null == menuKey)
126         {
127             menuKey = (String JavaDoc)ses.getAttribute(mMenuId+"_"+RollerMenuModel.MENU_KEY);
128         }
129
130         if (menuKey != null && menuKey.equals(mName))
131         {
132             selected = true;
133         }
134         else
135         {
136             if ( getSelectedMenuItem( req, false ) != null )
137             {
138                 selected = true;
139             }
140         }
141
142         if ( ses != null && selected )
143         {
144             ses.setAttribute(mMenuId + "_" + RollerMenuModel.MENU_KEY, mName);
145         }
146
147         return selected;
148     }
149
150     /** Name of Struts forward menu item should link to */
151     public String JavaDoc getUrl( PageContext JavaDoc pctx )
152     {
153         String JavaDoc url = null;
154         try
155         {
156             HttpServletRequest JavaDoc req = (HttpServletRequest JavaDoc)pctx.getRequest();
157             String JavaDoc surl = getDefaultMenuItem( req ).getUrl( pctx );
158             StringBuffer JavaDoc sb = new StringBuffer JavaDoc( surl );
159             if ( surl.indexOf("?") == -1 )
160             {
161                 sb.append( "?" );
162             }
163             else
164             {
165                 sb.append( "&amp;" );
166             }
167             sb.append( RollerMenuModel.MENU_KEY );
168             sb.append( "=" );
169             sb.append( getName() );
170             url = sb.toString();
171         }
172         catch (Exception JavaDoc e)
173         {
174             pctx.getServletContext().log(
175                 "ERROR in menu creating URL",e);
176         }
177         return url;
178     }
179
180 }
181
182
Popular Tags