001package org.nasdanika.html.model.bootstrap.gen;
002
003import java.util.List;
004
005import org.nasdanika.common.BiSupplier;
006import org.nasdanika.common.Consumer;
007import org.nasdanika.common.Context;
008import org.nasdanika.common.Function;
009import org.nasdanika.common.ProgressMonitor;
010import org.nasdanika.common.Supplier;
011import org.nasdanika.common.SupplierFactory;
012import org.nasdanika.common.persistence.ConfigurationException;
013import org.nasdanika.html.HTMLFactory;
014import org.nasdanika.html.HTMLPage;
015import org.nasdanika.html.bootstrap.BootstrapFactory;
016import org.nasdanika.html.model.bootstrap.Page;
017
018public class PageSupplierFactoryAdapter extends org.nasdanika.html.model.html.gen.PageSupplierFactoryAdapter {
019        
020        public PageSupplierFactoryAdapter(Page page) {
021                super(page);
022        }
023        
024        @Override
025        public boolean isAdapterForType(Object type) {
026                return type == SupplierFactory.class;
027        }
028        
029        protected Function<BiSupplier<List<Object>,List<Object>>, HTMLPage> createPageFunction(Context context) {
030                return new Function<BiSupplier<List<Object>,List<Object>>, HTMLPage>() {
031                        
032                        @Override
033                        public double size() {
034                                return 1;
035                        }
036                        
037                        @Override
038                        public String name() {
039                                return "Bootstrap Page";
040                        }
041                        
042                        @Override
043                        public HTMLPage execute(BiSupplier<List<Object>,List<Object>> headAndBody, ProgressMonitor progressMonitor) throws Exception {
044                                BootstrapFactory factory = context.get(BootstrapFactory.class, BootstrapFactory.INSTANCE);
045                                HTMLFactory htmlFactory = factory.getHTMLFactory();
046                                Page semanticElement = (Page) getTarget();
047                                String pageName = context.interpolateToString(semanticElement.getName());
048                                HTMLPage ret = htmlFactory.page();
049                                ret.title(pageName);
050                                ret.lang(semanticElement.getLanguage());
051                                
052                                if (semanticElement.isCdn()) {
053                                        factory.bootstrapCdnHTMLPage(ret, semanticElement.getTheme());
054                                } else if (semanticElement.getTheme() != null) {
055                                        throw new ConfigurationException("Theme cannot be specified when 'cdn' is set to 'false'");                     
056                                }
057                                
058                                factory.bootstrapHTMLPage(ret);
059                                
060                                for (String styleseet: semanticElement.getStylesheets()) {
061                                        ret.stylesheet(styleseet);
062                                }
063                                for (String script: semanticElement.getScripts()) {
064                                        ret.script(script);
065                                }                               
066                                for (Object he: headAndBody.getFirst()) {
067                                        ret.head(he);
068                                }
069                                for (Object he: context.get(PAGE_HEAD_PROPERTY, List.class)) {
070                                        ret.head(he);
071                                }
072                                for (Object be: context.get(PAGE_BODY_PROPERTY, List.class)) {
073                                        ret.body(be);
074                                }
075                                for (Object be: headAndBody.getSecond()) {
076                                        ret.body(be);
077                                }
078                                return ret;
079                        }
080                };
081                
082        }
083
084}