package jpaoletti.jpm.struts.tags; import java.util.Calendar; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.JspWriter; import jpaoletti.jpm.core.PMSession; import jpaoletti.jpm.core.PresentationManager; import jpaoletti.jpm.menu.Menu; import jpaoletti.jpm.menu.MenuItem; import jpaoletti.jpm.menu.MenuList; import jpaoletti.jpm.struts.MenuItemContext; /** * Display the menu * * @author jpaoletti * @since 15/09/2011 * @version v1.2 * */ public class MenuTag extends PMTags { private PMSession pmsession; @Override public int doStartTag() throws JspException { try { final JspWriter out = pageContext.getOut(); out.println("<div id='menu'>"); out.println("<ul>"); if (pmsession != null && pmsession.getMenu() != null) { final MenuList list = (MenuList) pmsession.getMenu(); for (Menu m : list.getSubmenus()) { printMenu(m, out); } } out.println("</ul>"); out.println("<div class='menu-button-bar'>"); out.println("<a href='index.jsp' title=" + PresentationManager.getMessage("home") + "><div class='home'></div></a>"); final String contact = PresentationManager.getPm().getContact(); if (contact != null) { out.println("<a href='mailto:" + contact + "' title=" + PresentationManager.getMessage("contact") + "><div class='contact'></div></a>"); } final String copyright = PresentationManager.getPm().getCopyright(); if (copyright != null) { out.println("<div class='copyright' title='" + PresentationManager.getMessage("header.copyright", copyright, Calendar.getInstance().get(Calendar.YEAR)) + "'>©</div>"); } if (PresentationManager.getPm().isHideableHeader()) { out.println("<a href='#' id='btnColapseExpand' title='" + PresentationManager.getMessage("header.expand") + "'><div class='expand'></div></a>"); } if (pmsession != null) { out.println("<a href='" + PMTags.plainUrl(pmsession, "logout.do") + "' title=" + PresentationManager.getMessage("logout") + "><div class='logout'></div></a>"); } out.println("<div class='version'>v" + PresentationManager.getPm().getAppversion() + "</div>"); out.println("</div>"); out.println("</div>"); } catch (Exception ex) { throw new JspTagException("MessageTag: " + ex.getMessage()); } return SKIP_BODY; } @Override public int doEndTag() { return EVAL_PAGE; } protected void printMenu(final Menu m, final JspWriter out) { try { //Base case if (m instanceof MenuItem) { final MenuItem item = (MenuItem) m; out.print("<li>"); if (item.getLocation() == null) { out.print("<a href='#'>" + PresentationManager.getMessage(m.getText()) + "</a>"); } else { final MenuItemContext ctx = (MenuItemContext) item.getLocation().build(item, getContextPath(), getPmsession()); out.print(ctx.getPrefix()); out.print(PresentationManager.getMessage(ctx.getValue())); out.print(ctx.getSufix()); } out.print("</li>"); } else { final MenuList list = (MenuList) m; out.print("<li>"); out.print("<a href='#'>" + PresentationManager.getMessage(m.getText()) + "</a>"); out.print("<ul>"); for (Menu sm : list.getSubmenus()) { printMenu(sm, out); } out.print("</ul>"); out.print("</li>"); } } catch (Exception e) { PresentationManager.getPm().error(e); } } public PMSession getPmsession() { return pmsession; } public void setPmsession(PMSession pmsession) { this.pmsession = pmsession; } }