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}