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}