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