1 15 package org.apache.tapestry.html; 16 17 import java.util.Date ; 18 import java.util.Iterator ; 19 20 import org.apache.hivemind.HiveMind; 21 import org.apache.tapestry.AbstractComponent; 22 import org.apache.tapestry.IAsset; 23 import org.apache.tapestry.IMarkupWriter; 24 import org.apache.tapestry.IPage; 25 import org.apache.tapestry.IRender; 26 import org.apache.tapestry.IRequestCycle; 27 import org.apache.tapestry.Tapestry; 28 import org.apache.tapestry.coerce.ValueConverter; 29 import org.apache.tapestry.engine.IEngineService; 30 import org.apache.tapestry.engine.ILink; 31 import org.apache.tapestry.spec.IApplicationSpecification; 32 33 43 44 public abstract class Shell extends AbstractComponent 45 { 46 private static final String generatorContent = "Tapestry Application Framework, version " 47 + Tapestry.VERSION; 48 49 protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) 50 { 51 long startTime = 0; 52 53 boolean rewinding = cycle.isRewinding(); 54 55 if (!rewinding) 56 { 57 startTime = System.currentTimeMillis(); 58 59 writeDocType(writer, cycle); 60 61 IPage page = getPage(); 62 63 writer.comment("Application: " + getApplicationSpecification().getName()); 64 65 writer.comment("Page: " + page.getPageName()); 66 writer.comment("Generated: " + new Date ()); 67 68 writer.begin("html"); 69 writer.println(); 70 writer.begin("head"); 71 writer.println(); 72 73 writeMetaTag(writer, "name", "generator", generatorContent); 74 75 if (getRenderContentType()) 76 writeMetaTag(writer, "http-equiv", "Content-Type", writer.getContentType()); 77 78 getBaseTagWriter().render(writer, cycle); 79 80 writer.begin("title"); 81 82 writer.print(getTitle()); 83 writer.end(); writer.println(); 85 86 IRender delegate = getDelegate(); 87 88 if (delegate != null) 89 delegate.render(writer, cycle); 90 91 IAsset stylesheet = getStylesheet(); 92 93 if (stylesheet != null) 94 writeStylesheetLink(writer, cycle, stylesheet); 95 96 Iterator i = (Iterator ) getValueConverter().coerceValue( 97 getStylesheets(), 98 Iterator .class); 99 100 while (i.hasNext()) 101 { 102 stylesheet = (IAsset) i.next(); 103 104 writeStylesheetLink(writer, cycle, stylesheet); 105 } 106 107 writeRefresh(writer, cycle); 108 109 writer.end(); } 111 112 114 renderBody(writer, cycle); 115 116 if (!rewinding) 117 { 118 writer.end(); writer.println(); 120 121 long endTime = System.currentTimeMillis(); 122 123 writer.comment("Render time: ~ " + (endTime - startTime) + " ms"); 124 } 125 126 } 127 128 private void writeDocType(IMarkupWriter writer, IRequestCycle cycle) 129 { 130 String doctype = getDoctype(); 132 if (HiveMind.isNonBlank(doctype)) 133 { 134 writer.printRaw("<!DOCTYPE " + doctype + ">"); 135 writer.println(); 136 } 137 } 138 139 private void writeStylesheetLink(IMarkupWriter writer, IRequestCycle cycle, IAsset stylesheet) 140 { 141 writer.beginEmpty("link"); 142 writer.attribute("rel", "stylesheet"); 143 writer.attribute("type", "text/css"); 144 writer.attribute("href", stylesheet.buildURL(cycle)); 145 writer.println(); 146 } 147 148 private void writeRefresh(IMarkupWriter writer, IRequestCycle cycle) 149 { 150 int refresh = getRefresh(); 151 152 if (refresh <= 0) 153 return; 154 155 158 IEngineService pageService = getPageService(); 159 String pageName = getPage().getPageName(); 160 161 ILink link = pageService.getLink(cycle, pageName); 162 163 StringBuffer buffer = new StringBuffer (); 164 buffer.append(refresh); 165 buffer.append("; URL="); 166 buffer.append(link.getAbsoluteURL()); 167 168 writeMetaTag(writer, "http-equiv", "Refresh", buffer.toString()); 169 } 170 171 private void writeMetaTag(IMarkupWriter writer, String key, String value, String content) 172 { 173 writer.beginEmpty("meta"); 174 writer.attribute(key, value); 175 writer.attribute("content", content); 176 writer.println(); 177 } 178 179 public abstract IRender getDelegate(); 180 181 public abstract int getRefresh(); 182 183 public abstract IAsset getStylesheet(); 184 185 public abstract Object getStylesheets(); 186 187 public abstract String getTitle(); 188 189 public abstract String getDoctype(); 190 191 public abstract boolean getRenderContentType(); 192 193 194 public abstract ValueConverter getValueConverter(); 195 196 197 198 public abstract IEngineService getPageService(); 199 200 201 202 public abstract IApplicationSpecification getApplicationSpecification(); 203 204 205 206 public abstract IRender getBaseTagWriter(); 207 } | Popular Tags |