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