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}