1 18 19 package org.apache.roller.ui.core.tags.menu; 20 21 import java.util.ArrayList ; 22 import java.util.Iterator ; 23 import java.util.List ; 24 import java.util.Vector ; 25 import javax.servlet.ServletContext ; 26 27 import javax.servlet.http.HttpServletRequest ; 28 import javax.servlet.http.HttpSession ; 29 import javax.servlet.jsp.PageContext ; 30 import org.apache.struts.Globals; 31 import org.apache.struts.action.ActionMapping; 32 import org.apache.struts.config.ForwardConfig; 33 import org.apache.struts.config.ModuleConfig; 34 import org.apache.struts.util.RequestUtils; 35 36 import org.apache.roller.RollerException; 37 import org.apache.roller.ui.core.RollerContext; 38 39 41 42 public class MenuImpl extends BaseRollerMenu implements Menu { 43 private String mMenuId = null; 44 45 46 Vector mMenuItems = new Vector (); 47 48 49 boolean mDefault = false; 50 51 public MenuImpl() {} 52 53 54 public MenuImpl(String n) { super(n, null); } 55 56 57 public void addItem( MenuItemImpl item ) { mMenuItems.addElement(item); }; 58 59 60 public void setMenuId( String v ) { mMenuId = v; } 61 62 63 public String getMenuId() { return mMenuId; } 64 65 66 public Vector getMenuItems() { return mMenuItems; } 67 68 70 public MenuItem getSelectedMenuItem( HttpServletRequest req ) throws RollerException { 71 return getSelectedMenuItem( req, true ) ; 72 } 73 74 78 public MenuItem getSelectedMenuItem( HttpServletRequest req, 79 boolean returnDefault ) throws RollerException { 80 MenuItemImpl def = null; 81 MenuItemImpl selected = null; 82 for ( int i=0; i<mMenuItems.size(); i++ ) { 83 MenuItemImpl item = (MenuItemImpl)mMenuItems.elementAt(i); 84 if ( item.isSelected( req ) ) { 85 selected = item; 86 break; 87 } 88 if ( item.isPermitted(req) && def == null) { 90 def = item; 91 } 92 } 93 if ( selected != null ) { 94 return selected; 95 } else if ( returnDefault ) { 96 return def; 97 } else { 98 return null; 99 } 100 } 101 102 106 public MenuItem getDefaultMenuItem( HttpServletRequest req ) 107 throws RollerException { 108 MenuItemImpl def = null; 109 MenuItemImpl selected = null; 110 for ( int i=0; i<mMenuItems.size(); i++ ) { 111 MenuItemImpl item = (MenuItemImpl)mMenuItems.elementAt(i); 113 if (item.isPermitted(req) && def == null) { 114 def = item; 115 } 116 } 117 return def; 118 } 119 120 124 public boolean isSelected( HttpServletRequest req ) throws RollerException { 125 boolean selected = false; 126 HttpSession ses = req.getSession(false); 127 128 String menuKey = req.getParameter(RollerMenuModel.MENU_KEY ); 130 if (null == menuKey) { 131 menuKey = (String )req.getAttribute(RollerMenuModel.MENU_KEY); 132 } 133 if (menuKey != null && menuKey.equals(mName)) { 134 selected = true; 135 } 136 else if (getSelectedMenuItem(req, false) != null) { 138 selected = true; 139 } 140 else if (mForward != null) { 142 ServletContext ctx = RollerContext.getServletContext(); 143 ModuleConfig mConfig = RequestUtils.getModuleConfig(req, ctx); 144 ActionMapping amapping = (ActionMapping)req.getAttribute(Globals.MAPPING_KEY); 145 List fconfigs = new ArrayList (); 146 fconfigs.add(mConfig.findForwardConfig(mForward)); 147 if (mSubforwards != null) { 148 String [] subforwards = mSubforwards.split(","); 149 for (int i=0; i<subforwards.length; i++) { 150 fconfigs.add(mConfig.findForwardConfig(subforwards[i])); 151 } 152 } 153 for (Iterator iter = fconfigs.iterator(); iter.hasNext();) { 154 ForwardConfig fconfig = (ForwardConfig)iter.next(); 155 String fwdPath = fconfig.getPath(); 156 int end = fwdPath.indexOf(".do"); 157 fwdPath = (end == -1) ? fwdPath : fwdPath.substring(0, end); 158 if (fwdPath.equals(amapping.getPath())) { 159 selected = true; 160 break; 161 } 162 } 163 } 164 return selected; 165 } 166 167 168 public String getUrl(PageContext pctx) { 169 String url = null; 170 try { 171 if (mForward == null && mMenuItems != null && mMenuItems.size() > 0) { 173 HttpServletRequest req = (HttpServletRequest )pctx.getRequest(); 174 String surl = getDefaultMenuItem( req ).getUrl( pctx ); 175 StringBuffer sb = new StringBuffer ( surl ); 176 if ( surl.indexOf("?") == -1 ) { 177 sb.append( "?" ); 178 } else { 179 sb.append( "&" ); 180 } 181 sb.append( RollerMenuModel.MENU_KEY ); 182 sb.append( "=" ); 183 sb.append( getName() ); 184 url = sb.toString(); 185 } else { 186 return super.getUrl(pctx); 187 } 188 } catch (Exception e) { 189 pctx.getServletContext().log( 190 "ERROR in menu creating URL",e); 191 } 192 return url; 193 } 194 195 } 196 197 | Popular Tags |