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}