001package org.nasdanika.html.model.bootstrap.gen;
002
003import java.util.HashMap;
004import java.util.Map;
005
006import org.eclipse.emf.ecore.EStructuralFeature;
007import org.nasdanika.common.BiSupplier;
008import org.nasdanika.common.ConsumerFactory;
009import org.nasdanika.common.Context;
010import org.nasdanika.common.Function;
011import org.nasdanika.common.FunctionFactory;
012import org.nasdanika.common.MapCompoundConsumerFactory;
013import org.nasdanika.common.ProgressMonitor;
014import org.nasdanika.emf.EObjectAdaptable;
015import org.nasdanika.html.HTMLElement;
016import org.nasdanika.html.model.bootstrap.BootstrapPackage;
017import org.nasdanika.html.model.bootstrap.Table;
018import org.nasdanika.html.model.bootstrap.TableHeader;
019import org.nasdanika.html.model.bootstrap.TableSection;
020
021public class TableConsumerFactoryAdapter extends TableRowContainerConsumerFactoryAdapter<org.nasdanika.html.model.bootstrap.Table, org.nasdanika.html.bootstrap.Table> {
022
023        public TableConsumerFactoryAdapter(org.nasdanika.html.model.bootstrap.Table table) {
024                super(table);
025        }
026        
027        @SuppressWarnings({ "unchecked", "rawtypes" })
028        @Override
029        protected Function<HTMLElement<?>, HTMLElement<?>> createConfigureFunction(Context context) throws Exception {
030                MapCompoundConsumerFactory<EStructuralFeature,HTMLElement<?>> partsFactory = new MapCompoundConsumerFactory<>("Sections");
031                org.nasdanika.html.model.bootstrap.Table semanticElement = getTarget();
032                
033                TableHeader header = semanticElement.getHeader();
034                if (header != null) {
035                        partsFactory.put(BootstrapPackage.Literals.TABLE__HEADER, (ConsumerFactory<HTMLElement<?>>) (ConsumerFactory) EObjectAdaptable.adaptToConsumerFactoryNonNull(header, org.nasdanika.html.HTMLElement.class));
036                }
037                
038                TableSection body = semanticElement.getBody();
039                if (body != null) {
040                        partsFactory.put(BootstrapPackage.Literals.TABLE__BODY, (ConsumerFactory<HTMLElement<?>>) (ConsumerFactory) EObjectAdaptable.adaptToConsumerFactoryNonNull(body, org.nasdanika.html.HTMLElement.class));
041                }
042                
043                TableSection footer = semanticElement.getFooter();
044                if (footer != null) {
045                        partsFactory.put(BootstrapPackage.Literals.TABLE__FOOTER, (ConsumerFactory<HTMLElement<?>>) (ConsumerFactory) EObjectAdaptable.adaptToConsumerFactoryNonNull(footer, org.nasdanika.html.HTMLElement.class));
046                }
047                
048                FunctionFactory<BiSupplier<Map<EStructuralFeature, HTMLElement<?>>, HTMLElement<?>>, HTMLElement<?>> partsFunctionFactory = partsFactory.asBiSupplierFunctionFactory();
049                
050                return super.createConfigureFunction(context).then(getWrapper(context)).then(createTableFunction(context)).then(partsFunctionFactory.create(context));
051        }
052                
053        /**
054         * Takes table, creates sections as needed and performs other configuration. 
055         * @param context
056         * @return {@link BiSupplier} with a map of sections as first and the argument table as second.
057         */
058        protected Function<org.nasdanika.html.bootstrap.Table, BiSupplier<Map<EStructuralFeature, HTMLElement<?>>, HTMLElement<?>>> createTableFunction(Context context) {
059                return new Function<org.nasdanika.html.bootstrap.Table, BiSupplier<Map<EStructuralFeature, HTMLElement<?>>, HTMLElement<?>>>() {
060        
061                        @Override
062                        public double size() {
063                                return 1;
064                        }
065        
066                        @Override
067                        public String name() {
068                                return "Table";
069                        }
070
071                        @Override
072                        public BiSupplier<Map<EStructuralFeature, HTMLElement<?>>, HTMLElement<?>> execute(org.nasdanika.html.bootstrap.Table table, ProgressMonitor progressMonitor) throws Exception {
073                                Map<EStructuralFeature, HTMLElement<?>> sectionsMap = new HashMap<>();
074                                Table semanticElement = getTarget();
075                                if (semanticElement.getHeader() != null) {
076                                        sectionsMap.put(BootstrapPackage.Literals.TABLE__HEADER, table.header().toHTMLElement());
077                                }
078                                
079                                if (semanticElement.getBody() != null) {
080                                        sectionsMap.put(BootstrapPackage.Literals.TABLE__BODY, table.body().toHTMLElement());
081                                }
082                                
083                                if (semanticElement.getFooter() != null) {
084                                        sectionsMap.put(BootstrapPackage.Literals.TABLE__FOOTER, table.footer().toHTMLElement());
085                                }
086                                                                
087                                table.dark(semanticElement.isDark());
088                                table.striped(semanticElement.isStriped());
089                                table.bordered(semanticElement.isBordered());
090                                table.borderless(semanticElement.isBorderless());
091                                table.hover(semanticElement.isHover());
092                                table.small(semanticElement.isSmall());
093                                
094                                return new BiSupplier<Map<EStructuralFeature,HTMLElement<?>>, HTMLElement<?>>() {
095                                        
096                                        @Override
097                                        public Map<EStructuralFeature, HTMLElement<?>> getFirst() {
098                                                return sectionsMap;
099                                        }
100                                        
101                                        @Override
102                                        public HTMLElement<?> getSecond() {
103                                                return table.toHTMLElement();
104                                        }
105                                        
106                                };
107                        }
108                        
109                };
110        }
111                
112}