001package org.nasdanika.html.model.bootstrap.util;
002
003import java.util.Arrays;
004import java.util.Collection;
005
006import org.eclipse.emf.common.util.EList;
007import org.nasdanika.common.ProgressMonitor;
008import org.nasdanika.html.model.bootstrap.BootstrapFactory;
009import org.nasdanika.html.model.bootstrap.Table;
010import org.nasdanika.html.model.bootstrap.TableCell;
011import org.nasdanika.html.model.bootstrap.TableHeader;
012import org.nasdanika.html.model.bootstrap.TableRow;
013import org.nasdanika.html.model.bootstrap.TableSection;
014
015public class BootstrapUtil {
016        
017
018        /**
019         * Builds a static table.
020         * @param <T>
021         * @param elements
022         * @param base
023         * @param typedElement
024         * @param context
025         * @param progressMonitor
026         * @param columnBuilders
027         * @return
028         */
029        @SafeVarargs
030        public static <T> Table buildTable(
031                        Collection<? extends T> elements, 
032                        boolean buildHeader,
033                        ProgressMonitor progressMonitor,                        
034                        ColumnBuilder<? super T>... columnBuilders) {
035                return buildTable(elements, buildHeader, Arrays.asList(columnBuilders), progressMonitor);
036        }
037        
038        /**
039         * Builds a static table
040         * @param <T>
041         * @param elements
042         * @param columnBuilders
043         * @param base
044         * @param typedElement
045         * @param context
046         * @param progressMonitor
047         * @return
048         */
049        public static <T> Table buildTable(
050                        Collection<? extends T> elements, 
051                        boolean buildHeader,
052                        Collection<ColumnBuilder<? super T>> columnBuilders,
053                        ProgressMonitor progressMonitor) {
054                Table ret = BootstrapFactory.eINSTANCE.createTable();
055                if (buildHeader) {
056                        TableHeader header = BootstrapFactory.eINSTANCE.createTableHeader();
057                        ret.setHeader(header);
058                        TableRow headerRow = BootstrapFactory.eINSTANCE.createTableRow();
059                        header.getRows().add(headerRow);
060                        EList<TableCell> headerRowCells = headerRow.getCells();
061                        for (ColumnBuilder<? super T> cb: columnBuilders) {
062                                TableCell headerCell = BootstrapFactory.eINSTANCE.createTableCell();
063                                headerCell.setHeader(true);
064                                headerRowCells.add(headerCell);
065                                cb.buildHeader(headerCell, progressMonitor);
066                        }
067                }
068                
069                TableSection body = BootstrapFactory.eINSTANCE.createTableSection();
070                ret.setBody(body);
071                EList<TableRow> bodyRows = body.getRows();
072                for (T element: elements) {
073                        TableRow elementRow = BootstrapFactory.eINSTANCE.createTableRow();
074                        bodyRows.add(elementRow);
075                        EList<TableCell> elementRowCells = elementRow.getCells();
076                        for (ColumnBuilder<? super T> cb: columnBuilders) {
077                                TableCell elementCell = BootstrapFactory.eINSTANCE.createTableCell();
078                                elementRowCells.add(elementCell);
079                                cb.buildCell(element, elementCell, progressMonitor);
080                        }
081                }
082                return ret;
083        }
084        
085}