001package org.nasdanika.html.model.html.gen;
002
003import org.nasdanika.common.Context;
004import org.nasdanika.common.Supplier;
005import org.nasdanika.common.SupplierFactory;
006
007public abstract class HtmlElementSupplierFactoryAdapter<M extends org.nasdanika.html.model.html.HtmlElement, T extends org.nasdanika.html.HTMLElement<?>> extends HtmlElementAdapter<M,T> implements SupplierFactory<T> {
008        
009        protected HtmlElementSupplierFactoryAdapter(M htmlElement) {
010                super(htmlElement);
011        }
012        
013        @Override
014        public boolean isAdapterForType(Object type) {
015                return type == SupplierFactory.class;
016        }
017                
018        /**
019         * Creates element from content.
020         * @param context
021         * @return
022         */
023        protected abstract Supplier<T> createHTMLElementSupplier(Context context) throws Exception;
024        
025        @Override
026        public Supplier<T> create(Context context) throws Exception {
027                SupplierFactory<T> elementSupplierFactory = this::createHTMLElementSupplier;
028                return elementSupplierFactory.then(this::createConfigureFunction).create(context);
029        }       
030        
031}