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}