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