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 ; 12 13 import java.io.InputStream ; 14 import java.util.Hashtable ; 15 import java.util.Iterator ; 16 import java.util.List ; 17 import java.util.Vector ; 18 19 import javax.servlet.ServletContext ; 20 import javax.servlet.http.HttpServletRequest ; 21 22 24 27 public class RollerMenuModel extends BaseRollerMenu implements MenuModel 28 { 29 private static Log mLogger = 30 LogFactory.getFactory().getInstance(RollerMenuModel.class); 31 32 private String mMenuId = null; 33 34 35 private Vector mMenus = new Vector (); 36 37 38 public static final String MENU_KEY = "rmk"; 39 40 41 public static final String MENU_ITEM_KEY = "rmik"; 42 43 45 46 public RollerMenuModel( String menuId, String config, ServletContext ctx ) 47 { 48 try 49 { 50 mMenuId = menuId; 51 52 Digester digester = new Digester(); 53 digester.push(this); 54 58 String menuPath = "menu-bar/menu"; 59 String 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 input = ctx.getResourceAsStream(config); 74 try 75 { 76 digester.parse(input); 77 78 if ( getMenus() != null ) 79 { 80 Vector 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 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 e) 99 { 100 mLogger.error("Unexpected exception",e); 101 } 102 finally 103 { 104 if ( input!=null ) 105 { 106 try { input.close(); } 107 catch (Exception e) { mLogger.error("Unexpected exception",e); }; 108 } 109 } 110 } 111 catch (Exception e) 112 { 113 mLogger.error("Unexpected exception",e); 114 } 115 } 116 117 119 public Vector getMenus() 120 { 121 return mMenus; 122 } 123 124 public Menu getSelectedMenu( HttpServletRequest 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 public void addMenu( Menu menu ) 154 { 155 mMenus.addElement( menu ); 156 } 157 158 160 161 static Hashtable createParams( HttpServletRequest req ) 162 { 163 Hashtable params = new Hashtable (); 164 RollerRequest rreq = RollerRequest.getRollerRequest(req); 165 try 166 { 167 UserData user = rreq.getUser(); 168 String 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 e) 180 { 181 mLogger.error("ERROR getting user in menu model", e); 182 } 183 return params; 184 } 185 } 186 187 188 | Popular Tags |