001package org.nasdanika.html.model.bootstrap.gen; 002 003import java.util.List; 004 005import org.eclipse.emf.common.notify.AdapterFactory; 006import org.eclipse.emf.common.util.EList; 007import org.nasdanika.common.CollectionCompoundConsumerFactory; 008import org.nasdanika.common.ConsumerFactory; 009import org.nasdanika.common.Context; 010import org.nasdanika.common.Function; 011import org.nasdanika.common.ProgressMonitor; 012import org.nasdanika.emf.EObjectAdaptable; 013import org.nasdanika.html.HTMLElement; 014import org.nasdanika.html.bootstrap.RowContainer; 015import org.nasdanika.html.bootstrap.RowContainer.Row; 016import org.nasdanika.html.model.bootstrap.TableCell; 017import org.nasdanika.html.model.bootstrap.TableRow; 018 019/** 020 * Adds a row to the consumed {@link RowContainer} 021 * @author Pavel 022 * 023 */ 024public class TableRowConsumerFactoryAdapter extends BootstrapElementConsumerFactoryAdapter<org.nasdanika.html.model.bootstrap.TableRow, org.nasdanika.html.bootstrap.RowContainer<?,?>> { 025 026 public TableRowConsumerFactoryAdapter(org.nasdanika.html.model.bootstrap.TableRow tableRow, AdapterFactory adapterFactory) { 027 super(tableRow, adapterFactory); 028 } 029 030 @Override 031 protected Function<HTMLElement<?>, HTMLElement<?>> createConfigureFunction(Context context) throws Exception { 032 EList<TableCell> cells = getTarget().getCells(); 033 @SuppressWarnings("rawtypes") 034 List<ConsumerFactory<HTMLElement>> cellConsumers = EObjectAdaptable.adaptToConsumerFactoryNonNull(cells, org.nasdanika.html.HTMLElement.class); 035 CollectionCompoundConsumerFactory<HTMLElement<?>> rowsConsumerFactory = new CollectionCompoundConsumerFactory<>("Creating cells", cellConsumers); 036 037 return getWrapper(context) 038 .then(createTableRowFunction(context)) 039 .then(toHTMLElement(context)) 040 .then(super.createConfigureFunction(context)) 041 .then(rowsConsumerFactory.asFunctionFactory().create(context)); 042 } 043 044 /** 045 * Takes {@link RowContainer}, creates a row, configures and returns for passing to cell consumers. 046 * @param context 047 * @return Row instance to pass to cell consumers. 048 */ 049 protected Function<org.nasdanika.html.bootstrap.RowContainer<?,?>, org.nasdanika.html.bootstrap.RowContainer.Row> createTableRowFunction(Context context) { 050 return new Function<org.nasdanika.html.bootstrap.RowContainer<?,?>, org.nasdanika.html.bootstrap.RowContainer.Row>() { 051 052 @Override 053 public double size() { 054 return 1; 055 } 056 057 @Override 058 public String name() { 059 return "Table row"; 060 } 061 062 @Override 063 public org.nasdanika.html.bootstrap.RowContainer.Row execute(org.nasdanika.html.bootstrap.RowContainer<?,?> rowContainer, ProgressMonitor progressMonitor) throws Exception { 064 TableRow semanticElement = getTarget(); 065 Row ret = rowContainer.row(); 066 ret.color(semanticElement.getColor()); 067 ret.backgroundColor(semanticElement.getBackground()); 068 return ret; 069 } 070 071 }; 072 } 073 074}