001package org.nasdanika.html.model.bootstrap.gen; 002 003import org.nasdanika.common.ConsumerFactory; 004import org.nasdanika.common.Context; 005import org.nasdanika.common.Function; 006import org.nasdanika.common.ProgressMonitor; 007import org.nasdanika.common.Supplier; 008import org.nasdanika.emf.EObjectAdaptable; 009import org.nasdanika.html.HTMLElement; 010import org.nasdanika.html.model.bootstrap.Appearance; 011import org.nasdanika.html.model.html.gen.HtmlElementSupplierFactoryAdapter; 012 013public abstract class BootstrapElementSupplierFactoryAdapter<M extends org.nasdanika.html.model.bootstrap.BootstrapElement, T extends org.nasdanika.html.bootstrap.BootstrapElement<?,?>> extends HtmlElementSupplierFactoryAdapter<M, org.nasdanika.html.HTMLElement<?>> { 014 015 public BootstrapElementSupplierFactoryAdapter(M bootstrapElement) { 016 super(bootstrapElement); 017 } 018 019 @Override 020 protected Function<HTMLElement<?>, HTMLElement<?>> createConfigureFunction(Context context) throws Exception { 021 Appearance appearance = getTarget().getAppearance(); 022 if (appearance == null) { 023 return super.createConfigureFunction(context); 024 } 025 @SuppressWarnings({ "rawtypes", "unchecked" }) 026 ConsumerFactory<HTMLElement<?>> appearanceConsumerFactory = (ConsumerFactory) EObjectAdaptable.adaptToConsumerFactoryNonNull(appearance, org.nasdanika.html.HTMLElement.class); 027 return super.createConfigureFunction(context).then(appearanceConsumerFactory.asFunctionFactory().create(context)); 028 } 029 030 @Override 031 protected Supplier<HTMLElement<?>> createHTMLElementSupplier(Context context) throws Exception { 032 return createBootstrapElementSupplier(context).then(new Function<T, HTMLElement<?>>() { 033 034 @Override 035 public double size() { 036 return 1; 037 } 038 039 @Override 040 public String name() { 041 return "Bootstrap element to HTML element"; 042 } 043 044 @Override 045 public HTMLElement<?> execute(T bootstrapElement, ProgressMonitor progressMonitor) throws Exception { 046 return bootstrapElement.toHTMLElement(); 047 } 048 049 }); 050 } 051 052 protected Supplier<T> createBootstrapElementSupplier(Context context) throws Exception { 053 throw new UnsupportedOperationException("Override this method or createHTMLElementSupplier()"); 054 } 055 056 /** 057 * Retrieves wrapping bootstrap element. 058 * @param context 059 * @return 060 */ 061 protected Function<org.nasdanika.html.HTMLElement<?>, T> getWrapper(Context context) { 062 return new Function<org.nasdanika.html.HTMLElement<?>, T>() { 063 064 @Override 065 public double size() { 066 return 1; 067 } 068 069 @Override 070 public String name() { 071 return "Retrieving wrapping bootstrap element"; 072 } 073 074 @SuppressWarnings("unchecked") 075 @Override 076 public T execute(HTMLElement<?> htmlElement, ProgressMonitor progressMonitor) throws Exception { 077 return (T) htmlElement.getData(org.nasdanika.html.bootstrap.BootstrapElement.class); 078 } 079 080 }; 081 } 082 083}