1 18 package org.apache.beehive.netui.tags.databinding.datagrid; 19 20 import java.util.Iterator ; 21 import java.io.IOException ; 22 import java.io.StringWriter ; 23 import javax.servlet.jsp.JspException ; 24 import javax.servlet.jsp.JspContext ; 25 import javax.servlet.jsp.tagext.SimpleTagSupport ; 26 import javax.servlet.jsp.tagext.JspFragment ; 27 import javax.servlet.http.HttpServletRequest ; 28 29 import org.apache.beehive.netui.databinding.datagrid.api.rendering.DataGridTagModel; 30 import org.apache.beehive.netui.databinding.datagrid.api.rendering.StyleModel; 31 import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel; 32 import org.apache.beehive.netui.databinding.datagrid.api.DataGridConfigFactory; 33 import org.apache.beehive.netui.databinding.datagrid.api.DataGridConfig; 34 import org.apache.beehive.netui.databinding.datagrid.api.DataGridResourceProvider; 35 import org.apache.beehive.netui.databinding.datagrid.runtime.util.PagedDataSet; 36 import org.apache.beehive.netui.databinding.datagrid.runtime.util.JspUtil; 37 import org.apache.beehive.netui.databinding.datagrid.runtime.rendering.table.TableRenderer; 38 import org.apache.beehive.netui.script.common.IDataAccessProvider; 39 import org.apache.beehive.netui.script.common.DataAccessProviderStack; 40 import org.apache.beehive.netui.tags.ExpressionHandling; 41 import org.apache.beehive.netui.tags.IBehaviorConsumer; 42 import org.apache.beehive.netui.tags.IHtmlI18n; 43 import org.apache.beehive.netui.tags.IHtmlEvents; 44 import org.apache.beehive.netui.tags.IHtmlCore; 45 import org.apache.beehive.netui.tags.html.HtmlConstants; 46 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender; 47 import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender; 48 import org.apache.beehive.netui.tags.rendering.TableTag; 49 import org.apache.beehive.netui.tags.rendering.AbstractHtmlState; 50 import org.apache.beehive.netui.util.internal.InternalStringBuilder; 51 import org.apache.beehive.netui.util.iterator.IteratorFactory; 52 import org.apache.beehive.netui.util.Bundle; 53 54 241 public class DataGrid 242 extends AbstractDataGridHtmlTag 243 implements IDataAccessProvider, IBehaviorConsumer, IHtmlCore, IHtmlEvents, IHtmlI18n { 244 245 private static final String FACET_RESOURCE = "resource"; 246 247 private boolean _renderRowGroups = false; 248 private String _name = null; 249 private String _styleClassPrefix = null; 250 private String _stylePolicyName = null; 251 private String _dataSource = null; 252 private String _resourceBundlePath = null; 253 private DataGridConfig _dataGridConfig = null; 254 private DataGridTagModel _dataGridTagModel = null; 255 private TableTag.State _tableState = new TableTag.State(); 256 257 261 public String getTagName() { 262 return "DataGrid"; 263 } 264 265 283 public void setDataGridConfig(DataGridConfig dataGridConfig) { 284 _dataGridConfig = dataGridConfig; 285 } 286 287 301 public void setName(String name) { 302 _name = name; 303 } 304 305 333 public void setDataSource(String dataSource) { 334 _dataSource = dataSource; 335 } 336 337 367 public void setStyleClassPrefix(String styleClassPrefix) { 368 _styleClassPrefix = styleClassPrefix; 369 } 370 371 391 public void setResourceBundlePath(String resourceBundlePath) { 392 _resourceBundlePath = resourceBundlePath; 393 } 394 395 411 public void setStyleClassPolicy(String stylePolicy) { 412 _stylePolicyName = stylePolicy; 413 } 414 415 441 public void setRenderRowGroups(boolean renderRowGroups) { 442 _renderRowGroups = renderRowGroups; 443 } 444 445 453 public void setOnClick(String onClick) { 454 _tableState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONCLICK, onClick); 455 } 456 457 465 public void setOnDblClick(String onDblClick) { 466 _tableState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONDBLCLICK, onDblClick); 467 } 468 469 477 public void setOnKeyDown(String onKeyDown) { 478 _tableState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONKEYDOWN, onKeyDown); 479 } 480 481 489 public void setOnKeyUp(String onKeyUp) { 490 _tableState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONKEYUP, onKeyUp); 491 } 492 493 501 public void setOnKeyPress(String onKeyPress) { 502 _tableState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONKEYPRESS, onKeyPress); 503 } 504 505 513 public void setOnMouseDown(String onMouseDown) { 514 _tableState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEDOWN, onMouseDown); 515 } 516 517 525 public void setOnMouseUp(String onMouseUp) { 526 _tableState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEUP, onMouseUp); 527 } 528 529 537 public void setOnMouseMove(String onMouseMove) { 538 _tableState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEMOVE, onMouseMove); 539 } 540 541 549 public void setOnMouseOut(String onMouseOut) { 550 _tableState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEOUT, onMouseOut); 551 } 552 553 561 public void setOnMouseOver(String onMouseOver) { 562 _tableState.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEOVER, onMouseOver); 563 } 564 565 573 public void setStyle(String style) { 574 if("".equals(style)) return; 575 576 _tableState.style = style; 577 } 578 579 587 public void setStyleClass(String styleClass) { 588 if("".equals(styleClass)) return; 589 590 _tableState.styleClass = styleClass; 591 } 592 593 601 public void setTitle(String title) { 602 _tableState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.TITLE, title); 603 } 604 605 612 public void setLang(String lang) 613 { 614 _tableState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.LANG, lang); 615 } 616 617 625 public void setDir(String dir) 626 { 627 _tableState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.DIR, dir); 628 } 629 630 638 public void setSummary(String summary) 639 { 640 _tableState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.SUMMARY, summary); 641 } 642 643 650 public void setWidth(String width) 651 { 652 _tableState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.WIDTH, width); 653 } 654 655 662 public void setBorder(String border) 663 { 664 _tableState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.BORDER, border); 665 } 666 667 675 public void setFrame(String frame) 676 { 677 _tableState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.FRAME, frame); 678 } 679 680 687 public void setRules(String rules) 688 { 689 _tableState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.RULES, rules); 690 } 691 692 699 public void setCellspacing(String cellspacing) 700 { 701 _tableState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.CELLSPACING, cellspacing); 702 } 703 704 711 public void setCellpadding(String cellpadding) 712 { 713 _tableState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.CELLPADDING, cellpadding); 714 } 715 716 725 public void setTagId(String tagId) 726 throws JspException { 727 applyTagId(_tableState, tagId); 728 } 729 730 748 public void setBehavior(String name, Object value, String facet) 749 throws JspException { 750 if(facet != null && facet.equals(FACET_RESOURCE)) { 751 _dataGridTagModel.addResourceOverride(name, (value != null ? value.toString() : null)); 752 } 753 else { 754 String s = Bundle.getString("Tags_BehaviorFacetNotSupported", new Object []{facet}); 755 throw new JspException (s); 756 } 757 } 758 759 767 public void doTag() 768 throws JspException , IOException { 769 770 String dataSource = getDataSource(); 772 ExpressionHandling expr = new ExpressionHandling(this); 773 String validExpr = expr.ensureValidExpression(dataSource, "dataSource", "DataSourceError"); 774 Object ds = expr.evaluateExpression(validExpr, "dataSource", getPageContext()); 775 Iterator iterator = IteratorFactory.createIterator(ds); 776 777 JspContext jspContext = getJspContext(); 778 HttpServletRequest request = JspUtil.getRequest(jspContext); 779 780 if(_dataGridConfig == null) 781 _dataGridConfig = DataGridConfigFactory.getInstance(); 782 783 TableRenderer tableRenderer = new TableRenderer(request); 784 PagedDataSet dataSet = new PagedDataSet(dataSource, iterator); 785 786 StyleModel styleModel = _dataGridConfig.getStyleModel(_stylePolicyName, _styleClassPrefix); 787 788 DataGridResourceProvider resourceProvider = null; 789 if(_resourceBundlePath == null) 790 resourceProvider = _dataGridConfig.getDefaultResourceProvider(); 791 else 792 resourceProvider = _dataGridConfig.getResourceProvider(_resourceBundlePath); 793 resourceProvider.setLocale(JspUtil.getLocale(jspContext)); 794 795 _dataGridTagModel = new DataGridTagModel(_name, _dataGridConfig, jspContext); 796 _dataGridTagModel.setDataSet(dataSet); 797 _dataGridTagModel.setStyleModel(styleModel); 798 _dataGridTagModel.setTableRenderer(tableRenderer); 799 _dataGridTagModel.setResourceProvider(resourceProvider); 800 _dataGridTagModel.setRenderRowGroups(_renderRowGroups); 801 802 JspFragment fragment = getJspBody(); 803 if(fragment != null) { 804 String javascript = null; 805 806 if (_tableState.id != null) { 807 javascript = renderNameAndId(request, _tableState, null); 808 } 809 810 boolean addedDataAccessProvider = false; 811 try { 812 InternalStringBuilder builder = new InternalStringBuilder(2048); 813 AbstractRenderAppender appender = new StringBuilderRenderAppender(builder); 814 815 816 DataAccessProviderStack.addDataAccessProvider(this, getJspContext()); 817 DataGridUtil.putDataGridTagModel(getJspContext(), _dataGridTagModel); 818 addedDataAccessProvider = true; 819 820 StringWriter sw = new StringWriter (); 821 826 827 fragment.invoke(sw); 828 829 830 PagerModel pm = _dataGridTagModel.getState().getPagerModel(); 831 _dataGridTagModel.getDataSet().createWindow(pm.getRow(), pm.getPageSize()); 832 833 834 _dataGridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_START); 835 836 if(!_dataGridTagModel.isDisableDefaultPagerRendering()) 837 _dataGridTagModel.renderPager(appender); 838 839 _tableState.styleClass = styleModel.getTableClass(); 840 tableRenderer.openTable(_tableState, appender); 841 842 843 _dataGridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_CAPTION); 844 sw = new StringWriter (); 845 fragment.invoke(sw); 846 String caption = sw.toString(); 847 if(caption != null) 848 appender.append(caption); 849 850 851 _dataGridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_HEADER); 852 sw = new StringWriter (); 853 fragment.invoke(sw); 854 String header = sw.toString(); 855 if(header != null) 856 appender.append(header); 857 858 864 865 String tbody = null; 866 String tfoot = null; 867 868 869 _dataGridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_GRID); 870 sw = new StringWriter (); 871 fragment.invoke(sw); 872 tbody = sw.toString(); 873 874 875 _dataGridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_FOOTER); 876 sw = new StringWriter (); 877 fragment.invoke(sw); 878 String footer = sw.toString(); 879 String trimmed = footer.trim(); 880 if(footer != null && !trimmed.trim().equals("")) 881 tfoot = footer; 882 883 if(_dataGridTagModel.isRenderRowGroups()) { 884 if(tfoot != null) 885 appender.append(tfoot); 886 appender.append(tbody); 887 } 888 else { 889 appender.append(tbody); 890 if(tfoot != null) 891 appender.append(tfoot); 892 } 893 894 tableRenderer.closeTable(appender); 895 896 if(javascript != null) 897 appender.append(javascript); 898 899 _dataGridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_END); 900 901 write(builder.toString()); 902 } 903 finally { 904 if(addedDataAccessProvider) { 905 DataAccessProviderStack.removeDataAccessProvider(getJspContext()); 906 DataGridUtil.removeDataGridTagModel(getJspContext()); 907 } 908 } 909 } 910 } 911 912 918 919 925 public int getCurrentIndex() { 926 return _dataGridTagModel.getCurrentIndex(); 927 } 928 929 935 public Object getCurrentItem() { 936 return _dataGridTagModel.getCurrentItem(); 937 } 938 939 944 public Object getCurrentMetadata() { 945 throw new UnsupportedOperationException (Bundle.getErrorString("Tags_DataAccessProvider_metadataUnsupported", 946 new Object []{getTagName()})); 947 } 948 949 954 public String getDataSource() { 955 return "{" + _dataSource + "}"; 956 } 957 958 965 public IDataAccessProvider getProviderParent() { 966 967 return (IDataAccessProvider)SimpleTagSupport.findAncestorWithClass(this, IDataAccessProvider.class); 968 } 969 } 970 | Popular Tags |