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}