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