1 18 package org.apache.beehive.netui.databinding.datagrid.api.rendering; 19 20 import org.apache.beehive.netui.util.internal.InternalStringBuilder; 21 22 import java.util.Map ; 23 import java.net.URISyntaxException ; 24 import javax.servlet.http.HttpServletRequest ; 25 26 import org.apache.beehive.netui.databinding.datagrid.api.exceptions.CellDecoratorException; 27 import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel; 28 import org.apache.beehive.netui.databinding.datagrid.runtime.util.JspUtil; 29 import org.apache.beehive.netui.tags.rendering.AnchorTag; 30 import org.apache.beehive.netui.tags.rendering.TagRenderingBase; 31 import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender; 32 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender; 33 import org.apache.beehive.netui.util.logging.Logger; 34 import org.apache.beehive.netui.util.Bundle; 35 36 44 public abstract class PagerRenderer { 45 46 private static final Logger LOGGER = Logger.getInstance(PagerRenderer.class); 47 private static final String EMPTY_STRING = ""; 48 49 private PagerModel _pagerModel; 50 private DataGridTagModel _gridModel; 51 private HttpServletRequest _request = null; 52 private TagRenderingBase _anchorTag = null; 53 private AnchorTag.State _anchorState = new AnchorTag.State(); 54 55 62 public void setDataGridTagModel(DataGridTagModel dataGridTagModel) { 63 assert dataGridTagModel != null; 64 65 _gridModel = dataGridTagModel; 66 _pagerModel = _gridModel.getState().getPagerModel(); 67 _request = JspUtil.getRequest(_gridModel.getJspContext()); 68 _anchorTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, _request); 69 } 70 71 82 public String render() { 83 if(_gridModel.getDataSet().getSize() == 0) 84 return noDataRender(); 85 else 86 return internalRender(); 87 } 88 89 93 protected PagerModel getPagerModel() { 94 return _pagerModel; 95 } 96 97 101 protected DataGridTagModel getDataGridTagModel() { 102 return _gridModel; 103 } 104 105 109 protected String internalRender() { 110 return EMPTY_STRING; 111 } 112 113 117 protected String noDataRender() { 118 return _gridModel.getMessage(IDataGridMessageKeys.DATAGRID_MSG_NODATA); 119 } 120 121 125 protected String buildLiveFirstLink() { 126 InternalStringBuilder builder = new InternalStringBuilder(); 127 AbstractRenderAppender appender = new StringBuilderRenderAppender(builder); 128 129 buildAnchor(appender, _gridModel.getUrlBuilder().getQueryParamsForFirstPage(), IDataGridMessageKeys.PAGER_MSG_FIRST); 130 131 return builder.toString(); 132 } 133 134 140 protected String buildDeadFirstLink() { 141 return _gridModel.getMessage(IDataGridMessageKeys.PAGER_MSG_FIRST); 142 } 143 144 149 protected String buildLivePreviousLink() { 150 InternalStringBuilder builder = new InternalStringBuilder(); 151 AbstractRenderAppender appender = new StringBuilderRenderAppender(builder); 152 153 buildAnchor(appender, _gridModel.getUrlBuilder().getQueryParamsForPreviousPage(), IDataGridMessageKeys.PAGER_MSG_PREVIOUS); 154 155 return builder.toString(); 156 } 157 158 164 protected String buildDeadPreviousLink() { 165 return _gridModel.getMessage(IDataGridMessageKeys.PAGER_MSG_PREVIOUS); 166 } 167 168 173 protected String buildLiveNextPageLink() { 174 InternalStringBuilder builder = new InternalStringBuilder(); 175 AbstractRenderAppender appender = new StringBuilderRenderAppender(builder); 176 buildAnchor(appender, _gridModel.getUrlBuilder().getQueryParamsForNextPage(), IDataGridMessageKeys.PAGER_MSG_NEXT); 177 return builder.toString(); 178 } 179 180 186 protected String buildDeadNextLink() { 187 return _gridModel.getMessage(IDataGridMessageKeys.PAGER_MSG_NEXT); 188 } 189 190 194 protected String buildLiveLastLink() { 195 InternalStringBuilder builder = new InternalStringBuilder(); 196 AbstractRenderAppender appender = new StringBuilderRenderAppender(builder); 197 buildAnchor(appender, _gridModel.getUrlBuilder().getQueryParamsForLastPage(), IDataGridMessageKeys.PAGER_MSG_LAST); 198 return builder.toString(); 199 } 200 201 207 protected String buildDeadLastLink() { 208 return _gridModel.getMessage(IDataGridMessageKeys.PAGER_MSG_LAST); 209 } 210 211 217 protected final void buildAnchor(AbstractRenderAppender appender, Map queryParams, String labelKey) { 218 assert appender != null; 219 assert queryParams != null; 220 assert labelKey != null && labelKey.length() > 0; 221 222 _anchorState.href = buildPageUri(queryParams); 223 _anchorTag.doStartTag(appender, _anchorState); 224 appender.append(_gridModel.getMessage(labelKey)); 225 _anchorTag.doEndTag(appender); 226 _anchorState.clear(); 227 } 228 229 protected String buildPageUri(Map queryParams) { 230 String uri = null; 231 232 238 String href = _pagerModel.getPageHref() != null ? _pagerModel.getPageHref() : _request.getRequestURI(); 239 240 try { 241 uri = JspUtil.createURL(href, 242 _pagerModel.getPageAction(), 243 null, 244 null, 245 queryParams, 246 _gridModel.getJspContext()); 247 } 248 catch(URISyntaxException mue) { 249 String message = Bundle.getErrorString("Rendering_URLException", new Object []{_pagerModel.getPageHref(), _pagerModel.getPageAction()}); 250 LOGGER.error(message, mue); 251 throw new CellDecoratorException(message, mue); 252 } 253 254 return uri; 255 } 256 257 } 258 | Popular Tags |