1 18 19 package org.apache.roller.ui.core.tags.menu; 20 21 import java.io.InputStream ; 22 import java.util.Hashtable ; 23 import java.util.Vector ; 24 import javax.servlet.ServletContext ; 25 import javax.servlet.http.HttpServletRequest ; 26 import org.apache.commons.digester.Digester; 27 import org.apache.commons.logging.Log; 28 import org.apache.commons.logging.LogFactory; 29 import org.apache.roller.RollerException; 30 import org.apache.roller.pojos.WebsiteData; 31 import org.apache.roller.ui.core.BasePageModel; 32 import org.xml.sax.SAXException ; 33 34 35 38 public class RollerMenuModel extends BaseRollerMenu implements MenuModel { 39 40 private static Log mLogger = LogFactory.getLog(RollerMenuModel.class); 41 42 private String mMenuId = null; 43 44 45 private Vector mMenus = new Vector (); 46 47 48 public static final String MENU_KEY = "rmk"; 49 50 51 public static final String MENU_ITEM_KEY = "rmik"; 52 53 54 55 public RollerMenuModel( String menuId, String config, ServletContext ctx ) { 56 try { 57 mMenuId = menuId; 58 59 Digester digester = new Digester(); 60 digester.push(this); 61 65 String menuPath = "menu-bar/menu"; 66 String menuItemPath = "menu-bar/menu/menu-item"; 67 68 digester.addObjectCreate( menuPath, 69 "org.apache.roller.ui.core.tags.menu.MenuImpl"); 70 digester.addSetProperties( menuPath ); 71 digester.addSetNext( menuPath,"addMenu", 72 "org.apache.roller.ui.core.tags.menu.Menu"); 73 74 digester.addObjectCreate( menuItemPath, 75 "org.apache.roller.ui.core.tags.menu.MenuItemImpl"); 76 digester.addSetProperties( menuItemPath ); 77 digester.addSetNext( menuItemPath, "addItem", 78 "org.apache.roller.ui.core.tags.menu.MenuItemImpl"); 79 80 InputStream input = ctx.getResourceAsStream(config); 81 try { 82 digester.parse(input); 83 84 if ( getMenus() != null ) { 85 Vector menus = getMenus(); 86 for (int i=0; i<menus.size(); i++) { 87 MenuImpl menu = (MenuImpl)menus.elementAt(i); 88 menu.setMenuId( mMenuId ); 89 Vector menuItems = menu.getMenuItems(); 90 if ( menuItems != null ) { 91 for (int j=0; j<menuItems.size(); j++ ) { 92 MenuItemImpl item = 93 (MenuItemImpl)menuItems.elementAt(j); 94 item.setMenuId( mMenuId ); 95 } 96 } 97 } 98 } 99 } catch (SAXException e) { 100 mLogger.error("Unexpected exception",e); 101 } finally { 102 if ( input!=null ) { 103 try { input.close(); } catch (Exception e) { mLogger.error("Unexpected exception",e); }; 104 } 105 } 106 } catch (Exception e) { 107 mLogger.error("Unexpected exception",e); 108 } 109 } 110 111 112 public Vector getMenus() { 113 return mMenus; 114 } 115 116 117 public Menu getSelectedMenu( HttpServletRequest req ) throws RollerException { 118 MenuImpl def = null; 119 MenuImpl selected = null; 120 for ( int i=0; i<mMenus.size(); i++ ) { 121 MenuImpl menu = (MenuImpl)mMenus.elementAt(i); 122 if ( menu.isSelected( req ) ) { 123 selected = menu; 124 break; 125 } 126 if (def == null) { 127 def = menu; 128 } 129 } 130 if ( selected != null ) { 131 return selected; 132 } else { 133 return def; 134 } 135 } 136 137 138 public void addMenu( Menu menu ) { 139 mMenus.addElement( menu ); 140 } 141 142 143 144 static Hashtable createParams(HttpServletRequest req) { 145 Hashtable params = new Hashtable (); 146 try { 147 WebsiteData website = getRequestedWeblog(req); 148 BasePageModel pageModel = (BasePageModel)req.getAttribute("model"); 149 if (website == null && pageModel != null) { 150 website = pageModel.getWebsite(); 151 } 152 if (website != null) { 153 params.put("weblog", website.getHandle()); 154 } 155 } catch (Exception e) { 156 mLogger.error("ERROR getting user in menu model", e); 157 } 158 return params; 159 } 160 161 } 162 | Popular Tags |