KickJava   Java API By Example, From Geeks To Geeks.

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


1
2 package org.roller.presentation.tags.menu;
3
4 import org.apache.commons.digester.Digester;
5 import org.apache.commons.logging.Log;
6 import org.apache.commons.logging.LogFactory;
7 import org.roller.RollerException;
8 import org.roller.config.RollerConfig;
9 import org.roller.pojos.UserData;
10 import org.roller.presentation.RollerRequest;
11 import org.xml.sax.SAXException JavaDoc;
12
13 import java.io.InputStream JavaDoc;
14 import java.util.Hashtable JavaDoc;
15 import java.util.Iterator JavaDoc;
16 import java.util.List JavaDoc;
17 import java.util.Vector JavaDoc;
18
19 import javax.servlet.ServletContext JavaDoc;
20 import javax.servlet.http.HttpServletRequest JavaDoc;
21
22 //////////////////////////////////////////////////////////////////////////////
23

24 /**
25  * @author David M Johnson
26  */

27 public class RollerMenuModel extends BaseRollerMenu implements MenuModel
28 {
29     private static Log mLogger =
30         LogFactory.getFactory().getInstance(RollerMenuModel.class);
31         
32     private String JavaDoc mMenuId = null;
33
34     /** Vector of MenuImpl objects */
35     private Vector JavaDoc mMenus = new Vector JavaDoc();
36
37     /** Key used to store selected menu in request */
38     public static final String JavaDoc MENU_KEY = "rmk";
39
40     /** Key used to store selected menu item in request */
41     public static final String JavaDoc MENU_ITEM_KEY = "rmik";
42
43     //------------------------------------------------------------------------
44

45     /** Construct menu model based on menu XML */
46     public RollerMenuModel( String JavaDoc menuId, String JavaDoc config, ServletContext JavaDoc ctx )
47     {
48         try
49         {
50             mMenuId = menuId;
51
52             Digester digester = new Digester();
53             digester.push(this);
54             //digester.setDebug(99);
55
//digester.setClassLoader( getClass().getClassLoader() );
56
//digester.setValidating(true);
57

58             String JavaDoc menuPath = "menu-bar/menu";
59             String JavaDoc menuItemPath = "menu-bar/menu/menu-item";
60
61             digester.addObjectCreate( menuPath,
62                 "org.roller.presentation.tags.menu.MenuImpl");
63             digester.addSetProperties( menuPath );
64             digester.addSetNext( menuPath,"addMenu",
65                 "org.roller.presentation.tags.menu.Menu");
66
67             digester.addObjectCreate( menuItemPath,
68                 "org.roller.presentation.tags.menu.MenuItemImpl");
69             digester.addSetProperties( menuItemPath );
70             digester.addSetNext( menuItemPath, "addItem",
71                 "org.roller.presentation.tags.menu.MenuItemImpl");
72
73             InputStream JavaDoc input = ctx.getResourceAsStream(config);
74             try
75             {
76                 digester.parse(input);
77
78                 if ( getMenus() != null )
79                 {
80                     Vector JavaDoc menus = getMenus();
81                     for (int i=0; i<menus.size(); i++)
82                     {
83                         MenuImpl menu = (MenuImpl)menus.elementAt(i);
84                         menu.setMenuId( mMenuId );
85                         Vector JavaDoc menuItems = menu.getMenuItems();
86                         if ( menuItems != null )
87                         {
88                           for (int j=0; j<menuItems.size(); j++ )
89                           {
90                               MenuItemImpl item =
91                                 (MenuItemImpl)menuItems.elementAt(j);
92                               item.setMenuId( mMenuId );
93                           }
94                         }
95                     }
96                 }
97             }
98             catch (SAXException JavaDoc e)
99             {
100                 mLogger.error("Unexpected exception",e);
101             }
102             finally
103             {
104                 if ( input!=null )
105                 {
106                     try { input.close(); }
107                     catch (Exception JavaDoc e) { mLogger.error("Unexpected exception",e); };
108                 }
109             }
110         }
111         catch (Exception JavaDoc e)
112         {
113             mLogger.error("Unexpected exception",e);
114         }
115     }
116
117     //----------------------------------------------- MenuModel implementation
118

119     public Vector JavaDoc getMenus()
120     {
121         return mMenus;
122     }
123
124     //----------------------------------------------------
125
public Menu getSelectedMenu( HttpServletRequest JavaDoc req ) throws RollerException
126     {
127         MenuImpl def = null;
128         MenuImpl selected = null;
129         for ( int i=0; i<mMenus.size(); i++ )
130         {
131             MenuImpl menu = (MenuImpl)mMenus.elementAt(i);
132             if ( menu.isSelected( req ) )
133             {
134                 selected = menu;
135                 break;
136             }
137             if (def == null)
138             {
139                 def = menu;
140             }
141         }
142         if ( selected != null )
143         {
144             return selected;
145         }
146         else
147         {
148             return def;
149         }
150     }
151
152     //----------------------------------------------------
153
public void addMenu( Menu menu )
154     {
155         mMenus.addElement( menu );
156     }
157
158     //------------------------------------------------------------------------
159

160     /** Create params based on incoming request */
161     static Hashtable JavaDoc createParams( HttpServletRequest JavaDoc req )
162     {
163         Hashtable JavaDoc params = new Hashtable JavaDoc();
164         RollerRequest rreq = RollerRequest.getRollerRequest(req);
165         try
166         {
167             UserData user = rreq.getUser();
168             String JavaDoc fid =
169                 rreq.getFolder()==null ? null : rreq.getFolder().getId();
170             if ( user != null )
171             {
172                 params.put( RollerRequest.USERNAME_KEY, user.getUserName() );
173             }
174             if ( fid != null )
175             {
176                 params.put( RollerRequest.FOLDERID_KEY, fid );
177             }
178         }
179         catch (Exception JavaDoc e)
180         {
181             mLogger.error("ERROR getting user in menu model", e);
182         }
183         return params;
184     }
185 }
186
187
188
Popular Tags