1 2 package org.roller.presentation.tags.menu; 3 4 import java.util.ArrayList ; 5 import java.util.Arrays ; 6 import java.util.List ; 7 import java.util.Vector ; 8 9 import javax.servlet.http.HttpServletRequest ; 10 import javax.servlet.http.HttpSession ; 11 import javax.servlet.jsp.PageContext ; 12 13 import org.roller.RollerException; 14 import org.roller.util.Utilities; 15 16 18 19 public class MenuImpl extends BaseRollerMenu implements Menu 20 { 21 private String mMenuId = null; 22 23 24 Vector mMenuItems = new Vector (); 25 26 27 boolean mDefault = false; 28 29 public MenuImpl() {} 30 31 32 public MenuImpl(String n) { super(n); } 33 34 35 public void addItem( MenuItemImpl item ) { mMenuItems.addElement(item); }; 36 37 38 public void setMenuId( String v ) { mMenuId = v; } 39 40 41 public String getMenuId() { return mMenuId; } 42 43 44 public Vector getMenuItems() { return mMenuItems; } 45 46 48 public MenuItem getSelectedMenuItem( HttpServletRequest req ) throws RollerException 49 { 50 return getSelectedMenuItem( req, true ) ; 51 } 52 53 57 public MenuItem getSelectedMenuItem( HttpServletRequest req, 58 boolean returnDefault ) throws RollerException 59 { 60 MenuItemImpl def = null; 61 MenuItemImpl selected = null; 62 for ( int i=0; i<mMenuItems.size(); i++ ) 63 { 64 MenuItemImpl item = (MenuItemImpl)mMenuItems.elementAt(i); 65 if ( item.isSelected( req ) ) 66 { 67 selected = item; 68 break; 69 } 70 if ( item.isPermitted(req) && def == null) 72 { 73 def = item; 74 } 75 } 76 if ( selected != null ) 77 { 78 return selected; 79 } 80 else if ( returnDefault ) 81 { 82 return def; 83 } 84 else 85 { 86 return null; 87 } 88 } 89 90 94 public MenuItem getDefaultMenuItem( HttpServletRequest req ) 95 throws RollerException 96 { 97 MenuItemImpl def = null; 98 MenuItemImpl selected = null; 99 for ( int i=0; i<mMenuItems.size(); i++ ) 100 { 101 MenuItemImpl item = (MenuItemImpl)mMenuItems.elementAt(i); 103 if (item.isPermitted(req) && def == null) 104 { 105 def = item; 106 } 107 } 108 return def; 109 } 110 111 115 public boolean isSelected( HttpServletRequest req ) throws RollerException 116 { 117 boolean selected = false; 118 HttpSession ses = req.getSession(false); 119 120 String menuKey = req.getParameter(RollerMenuModel.MENU_KEY ); 121 if (null == menuKey) 122 { 123 menuKey = (String )req.getAttribute(RollerMenuModel.MENU_KEY); 124 } 125 if (null == menuKey) 126 { 127 menuKey = (String )ses.getAttribute(mMenuId+"_"+RollerMenuModel.MENU_KEY); 128 } 129 130 if (menuKey != null && menuKey.equals(mName)) 131 { 132 selected = true; 133 } 134 else 135 { 136 if ( getSelectedMenuItem( req, false ) != null ) 137 { 138 selected = true; 139 } 140 } 141 142 if ( ses != null && selected ) 143 { 144 ses.setAttribute(mMenuId + "_" + RollerMenuModel.MENU_KEY, mName); 145 } 146 147 return selected; 148 } 149 150 151 public String getUrl( PageContext pctx ) 152 { 153 String url = null; 154 try 155 { 156 HttpServletRequest req = (HttpServletRequest )pctx.getRequest(); 157 String surl = getDefaultMenuItem( req ).getUrl( pctx ); 158 StringBuffer sb = new StringBuffer ( surl ); 159 if ( surl.indexOf("?") == -1 ) 160 { 161 sb.append( "?" ); 162 } 163 else 164 { 165 sb.append( "&" ); 166 } 167 sb.append( RollerMenuModel.MENU_KEY ); 168 sb.append( "=" ); 169 sb.append( getName() ); 170 url = sb.toString(); 171 } 172 catch (Exception e) 173 { 174 pctx.getServletContext().log( 175 "ERROR in menu creating URL",e); 176 } 177 return url; 178 } 179 180 } 181 182 | Popular Tags |