001package org.nasdanika.html.model.bootstrap.gen; 002 003import java.util.List; 004 005import org.nasdanika.common.Supplier; 006import org.nasdanika.common.Context; 007import org.nasdanika.common.Function; 008import org.nasdanika.common.ProgressMonitor; 009import org.nasdanika.common.SupplierFactory; 010import org.nasdanika.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<Supplier.FunctionResult<List<Object>,List<Object>>, HTMLPage> createPageFunction(Context context) { 028 return new Function<Supplier.FunctionResult<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(Supplier.FunctionResult<List<Object>,List<Object>> headAndBody, ProgressMonitor progressMonitor) { 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.argument()) { 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.result()) { 074 ret.body(be); 075 } 076 return ret; 077 } 078 }; 079 080 } 081 082}