Source code: org/roller/presentation/tags/menu/MenuItemImpl.java
1
2 package org.roller.presentation.tags.menu;
3
4 import org.apache.struts.config.ForwardConfig;
5 import org.apache.struts.config.ModuleConfig;
6 import org.apache.struts.util.RequestUtils;
7
8 import java.util.Hashtable;
9
10 import javax.servlet.ServletContext;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpSession;
13 import javax.servlet.jsp.PageContext;
14
15
16 /////////////////////////////////////////////////////////////////////////
17
18 /**
19 * MenuImpls has collection of menu items. Multiple menus can be used
20 * in one session, but they must have unique names.
21 */
22 public class MenuItemImpl implements MenuItem
23 {
24 private String mMenuId = null;
25
26 /** Name of Struts forward */
27 String mForward = null;
28
29 /** Name of menu item */
30 String mName = null;
31
32 /** Is this the default menu? */
33 boolean mDefault = false;
34
35 //---------------------------------------------------
36
37 public MenuItemImpl() {}
38
39 /** Construct with name and Struts forward */
40 public MenuItemImpl(String n, String f) { mName = n; mForward = f; }
41
42 //---------------------------------------------------
43
44 /** Is this the default menu? */
45 public void setDefault( boolean d ) { mDefault = d; }
46
47 /** Is this the default menu? */
48 public boolean isDefault() { return mDefault; }
49
50 //---------------------------------------------------
51
52 /** Name of menu */
53 public void setName( String v ) { mName = v; }
54
55 /** Name of menu */
56 public String getName() { return mName; }
57
58 //---------------------------------------------------
59
60 /** Parent menu's ID */
61 public void setMenuId( String v ) { mMenuId = v; }
62
63 /** Parent menu's ID */
64 public String getMenuId() { return mMenuId; }
65
66 //---------------------------------------------------
67
68 /** Struts forward */
69 public String getForward() { return mForward; }
70
71 /** Struts forward */
72 public void setForward( String forward ) { mForward = forward; }
73
74 //---------------------------------------------------
75
76 /** Name of Struts forward menu item should link to */
77 public String getUrl( PageContext pctx )
78 {
79 String url = null;
80 try
81 {
82 Hashtable params = RollerMenuModel.createParams(
83 (HttpServletRequest)pctx.getRequest());
84 params.put( RollerMenuModel.MENU_ITEM_KEY, getName() );
85
86 url = RequestUtils.computeURL(
87 pctx,
88 mForward, // forward
89 null, // href
90 null, // page
91 null,
92 params, // params
93 null, // anchor
94 false ); // redirect
95 }
96 catch (Exception e)
97 {
98 pctx.getServletContext().log(
99 "ERROR in menu item creating URL",e);
100 }
101 return url;
102 }
103
104 //---------------------------------------------------
105
106 /** Given a request, tells if menu item is selected */
107 public boolean isSelected( HttpServletRequest req )
108 {
109 boolean selected = false;
110
111 HttpSession ses = req.getSession(true);
112 ServletContext ctx = ses.getServletContext();
113
114 String req_parm = req.getParameter(
115 RollerMenuModel.MENU_ITEM_KEY );
116
117 String ses_parm = (String)ses.getAttribute(
118 mMenuId+"_"+RollerMenuModel.MENU_ITEM_KEY );
119
120 // Q: does session attribute indicate this item is selected?
121 if (req_parm==null && ses_parm!=null && ses_parm.equals(mName))
122 {
123 // Q: Yes it does, so return true - this item is selected
124 selected = true;
125 }
126 // Q: does session attribute indicate this item is selected?
127 else if (req_parm!=null && req_parm.equals(mName))
128 {
129 // Q: Yes it does, so return true - this item is selected
130 selected = true;
131 }
132 else
133 {
134 // Q: Is this item's forward the one being requested?
135 ModuleConfig mConfig = RequestUtils.getModuleConfig(req,ctx);
136 ForwardConfig fConfig = mConfig.findForwardConfig(mForward);
137
138
139 if (fConfig != null)
140 {
141 // Is the forward path in the request's URL?
142 String url = req.getRequestURL().toString();
143
144 if ( url.indexOf( fConfig.getPath() ) != -1 )
145 {
146 // A: Yes it is, so return true - this item is selected
147 selected = true;
148 }
149
150 }
151 }
152 //System.out.println(mName+"="+selected);
153 if (selected)
154 {
155 ses.setAttribute(mMenuId+"_"+RollerMenuModel.MENU_ITEM_KEY,mName);
156 }
157 return selected;
158 }
159 }
160
161