001    /**
002     * Copyright 2005-2013 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.krad.uif.element;
017    
018    import org.kuali.rice.krad.datadictionary.parse.BeanTag;
019    import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
020    import org.kuali.rice.krad.uif.component.Component;
021    import org.kuali.rice.krad.uif.widget.RichTable;
022    
023    import java.util.List;
024    import java.util.Set;
025    
026    /**
027     * Content element that renders a table using the {@link RichTable} widget configured with an Ajax (or Javascript)
028     * data source
029     *
030     * <p>
031     * Note this is different from the table layout manager in that it does not render nested components. The data is
032     * provided directly to the rich table widget which will create the table rows (unlike the table layout which creates
033     * the table from components then invokes the table plugin to decorate). Therefore this component just creates a table
034     * element tag and invokes the rich table script
035     * </p>
036     *
037     * <p>
038     * Nested HTML can be given through the rich table data. However generally this will be read-only data with possibly
039     * some inquiry links
040     * </p>
041     *
042     * @author Kuali Rice Team (rice.collab@kuali.org)
043     */
044    @BeanTag(name = "dataTable-bean", parent = "Uif-DataTable")
045    public class DataTable extends ContentElementBase {
046        private static final long serialVersionUID = 6201998559169962349L;
047    
048        private RichTable richTable;
049    
050        public DataTable() {
051            super();
052        }
053    
054        /**
055         * @see org.kuali.rice.krad.uif.component.Component#getComponentsForLifecycle()
056         */
057        @Override
058        public List<Component> getComponentsForLifecycle() {
059            List<Component> components = super.getComponentsForLifecycle();
060    
061            components.add(richTable);
062    
063            return components;
064        }
065    
066        /**
067         * Widget that will render the data table client side
068         *
069         * @return RichTable instance
070         */
071        @BeanTagAttribute(name = "richTable", type = BeanTagAttribute.AttributeType.SINGLEBEAN)
072        public RichTable getRichTable() {
073            return richTable;
074        }
075    
076        /**
077         * Setter for the rich table widget
078         *
079         * @param richTable
080         */
081        public void setRichTable(RichTable richTable) {
082            this.richTable = richTable;
083        }
084    
085        /**
086         * @see org.kuali.rice.krad.uif.widget.RichTable#getAjaxSource()
087         */
088        @BeanTagAttribute(name = "ajaxSource")
089        public String getAjaxSource() {
090            if (richTable != null) {
091                return richTable.getAjaxSource();
092            }
093    
094            return null;
095        }
096    
097        /**
098         * @see org.kuali.rice.krad.uif.widget.RichTable#setAjaxSource(java.lang.String)
099         */
100        public void setAjaxSource(String ajaxSource) {
101            if (richTable != null) {
102                richTable.setAjaxSource(ajaxSource);
103            }
104        }
105    
106        /**
107         * @see org.kuali.rice.krad.uif.widget.RichTable#getHiddenColumns()
108         */
109        @BeanTagAttribute(name = "hiddenColumns", type = BeanTagAttribute.AttributeType.SETVALUE)
110        public Set<String> getHiddenColumns() {
111            if (richTable != null) {
112                return richTable.getHiddenColumns();
113            }
114    
115            return null;
116        }
117    
118        /**
119         * @see org.kuali.rice.krad.uif.widget.RichTable#setHiddenColumns(java.util.Set<java.lang.String>)
120         */
121        public void setHiddenColumns(Set<String> hiddenColumns) {
122            if (richTable != null) {
123                richTable.setHiddenColumns(hiddenColumns);
124            }
125        }
126    
127        /**
128         * @see org.kuali.rice.krad.uif.widget.RichTable#getSortableColumns()
129         */
130        @BeanTagAttribute(name = "sortableColumns", type = BeanTagAttribute.AttributeType.SETVALUE)
131        public Set<String> getSortableColumns() {
132            if (richTable != null) {
133                return richTable.getSortableColumns();
134            }
135    
136            return null;
137        }
138    
139        /**
140         * @see org.kuali.rice.krad.uif.widget.RichTable#setSortableColumns(java.util.Set<java.lang.String>)
141         */
142        public void setSortableColumns(Set<String> sortableColumns) {
143            if (richTable != null) {
144                richTable.setSortableColumns(sortableColumns);
145            }
146        }
147    
148        /**
149         * @see org.kuali.rice.krad.uif.component.ComponentBase#copy()
150         */
151        @Override
152        protected <T> void copyProperties(T component) {
153            super.copyProperties(component);
154            DataTable dataTableCopy = (DataTable) component;
155    
156            if (this.richTable != null) {
157                dataTableCopy.setRichTable((RichTable) this.richTable.copy());
158            }
159        }
160    }