/* * Pager Tag Library * * Copyright (C) 2002 James Klicman <james@jsptags.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.frameworkset.common.tag.pager.tags; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.PageContext; import com.frameworkset.common.tag.pager.parser.PageTagExport; import com.frameworkset.common.tag.pager.parser.ParseException; import com.frameworkset.common.tag.pager.parser.TagExportParser; public abstract class PageTagSupport extends PagerTagSupport { private String export = null; private PageTagExport pageTagExport = null; private Object oldPageUrl = null; private Object oldPageNumber = null; private Object oldFirstItem = null; private Object oldLastItem = null; public final void setExport(String value) throws JspException { if (export != value) { try { pageTagExport = TagExportParser.parsePageTagExport(value); } catch (ParseException ex) { throw new JspTagException(ex.getMessage()); } } export = value; } public final String getExport() { return export; } protected final void setPageAttributes(long page) { if (pageTagExport == null) { pageContext.setAttribute(PageTagExport.PAGE_URL, pagerContext.getPageUrl(page)); pageContext.setAttribute(PageTagExport.PAGE_NUMBER, pagerContext.getPageNumber(page)); } else { String name; if ((name = pageTagExport.getPageUrl()) != null) pageContext.setAttribute(name, pagerContext.getPageUrl(page)); if ((name = pageTagExport.getPageNumber()) != null) pageContext.setAttribute(name, pagerContext.getPageNumber(page)); int maxPageItems = pagerContext.getMaxPageItems(); if ((name = pageTagExport.getFirstItem()) != null) { long firstItem = (page * maxPageItems) + 1; pageContext.setAttribute(name, new Long(firstItem)); } if ((name = pageTagExport.getLastItem()) != null) { long lastItem = Math.min((page + 1) * maxPageItems, pagerContext.getItemCount()); pageContext.setAttribute(name, new Long(lastItem)); } } } protected final void setOffsetAttributes(long offset) { if (pageTagExport == null) { pageContext.setAttribute(PageTagExport.PAGE_URL, pagerContext.getOffsetUrl(offset,pagerContext.getSortKey(),pagerContext.getDesc())); pageContext.setAttribute(PageTagExport.PAGE_NUMBER, pagerContext.getOffsetPageNumber(offset)); } else { String name; if ((name = pageTagExport.getPageUrl()) != null) pageContext.setAttribute(name, pagerContext.getOffsetUrl(offset,pagerContext.getSortKey(),pagerContext.getDesc())); if ((name = pageTagExport.getPageNumber()) != null) pageContext.setAttribute(name, pagerContext.getOffsetPageNumber(offset)); int maxPageItems = pagerContext.getMaxPageItems(); if ((name = pageTagExport.getFirstItem()) != null) { long firstItem = offset + 1; pageContext.setAttribute(name, new Long(firstItem)); } if ((name = pageTagExport.getLastItem()) != null) { long lastItem = Math.min(offset + maxPageItems, pagerContext.getItemCount()); pageContext.setAttribute(name, new Long(lastItem)); } } } protected final void removeAttributes() { if (pageTagExport == null) { pageContext.removeAttribute(PageTagExport.PAGE_URL,PageContext.PAGE_SCOPE); pageContext.removeAttribute(PageTagExport.PAGE_NUMBER,PageContext.PAGE_SCOPE); } else { String name; if ((name = pageTagExport.getPageUrl()) != null) pageContext.removeAttribute(name,PageContext.PAGE_SCOPE); if ((name = pageTagExport.getPageNumber()) != null) pageContext.removeAttribute(name,PageContext.PAGE_SCOPE); if ((name = pageTagExport.getFirstItem()) != null) pageContext.removeAttribute(name,PageContext.PAGE_SCOPE); if ((name = pageTagExport.getLastItem()) != null) pageContext.removeAttribute(name,PageContext.PAGE_SCOPE); } } public int doStartTag() throws JspException { super.doStartTag(); if (pageTagExport == null) { oldPageUrl = pageContext.getAttribute(PageTagExport.PAGE_URL); oldPageNumber = pageContext.getAttribute(PageTagExport.PAGE_NUMBER); } else { String name; if ((name = pageTagExport.getPageUrl()) != null) oldPageUrl = pageContext.getAttribute(name); if ((name = pageTagExport.getPageNumber()) != null) oldPageNumber = pageContext.getAttribute(name); if ((name = pageTagExport.getFirstItem()) != null) oldFirstItem = pageContext.getAttribute(name); if ((name = pageTagExport.getLastItem()) != null) oldLastItem = pageContext.getAttribute(name); } return EVAL_BODY_INCLUDE; } public int doEndTag() throws JspException { if (pageTagExport == null) { restoreAttribute(PageTagExport.PAGE_URL, oldPageUrl); restoreAttribute(PageTagExport.PAGE_NUMBER, oldPageNumber); oldPageUrl = null; oldPageNumber = null; } else { String name; if ((name = pageTagExport.getPageUrl()) != null) { restoreAttribute(name, oldPageUrl); oldPageUrl = null; } if ((name = pageTagExport.getPageNumber()) != null) { restoreAttribute(name, oldPageNumber); oldPageNumber = null; } if ((name = pageTagExport.getFirstItem()) != null) { restoreAttribute(name, oldFirstItem); oldFirstItem = null; } if ((name = pageTagExport.getLastItem()) != null) { restoreAttribute(name, oldLastItem); oldLastItem = null; } } super.doEndTag(); return EVAL_PAGE; } public void release() { export = null; pageTagExport = null; oldPageUrl = null; oldPageNumber = null; oldFirstItem = null; oldLastItem = null; super.release(); } } /* vim:set ts=4 sw=4: */