Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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