1 29 30 package nextapp.echo2.testapp.interactive; 31 32 import java.io.IOException ; 33 import java.io.InputStream ; 34 import java.io.OutputStream ; 35 36 import org.w3c.dom.Document ; 37 import org.w3c.dom.Element ; 38 39 import nextapp.echo2.app.util.Uid; 40 import nextapp.echo2.webcontainer.ContainerContext; 41 import nextapp.echo2.webrender.ClientProperties; 42 import nextapp.echo2.webrender.Connection; 43 import nextapp.echo2.webrender.ContentType; 44 import nextapp.echo2.webrender.ServerDelayMessage; 45 import nextapp.echo2.webrender.Service; 46 import nextapp.echo2.webrender.WebRenderServlet; 47 import nextapp.echo2.webrender.output.HtmlDocument; 48 import nextapp.echo2.webrender.output.XmlDocument; 49 50 57 public class CoolDelayMessage extends ServerDelayMessage { 58 59 private static int BUFFER_SIZE = 4096; 60 private static String IMAGE_RESOURCE_NAME = Styles.IMAGE_PATH + "ShadowOverlay.png"; 61 62 private static Service IMAGE_SERVICE = new ImageService(); 63 static { 64 WebRenderServlet.getServiceRegistry().add(IMAGE_SERVICE); 65 } 66 67 private static class ImageService implements Service { 68 69 private static final String SERVICE_ID = Uid.generateUidString(); 70 71 74 public String getId() { 75 return SERVICE_ID; 76 } 77 78 81 public int getVersion() { 82 return 0; 83 } 84 85 88 public void service(Connection conn) throws IOException { 89 conn.setContentType(ContentType.IMAGE_PNG); 90 OutputStream out = conn.getOutputStream(); 91 92 InputStream in = null; 93 byte[] buffer = new byte[BUFFER_SIZE]; 94 int bytesRead = 0; 95 96 try { 97 in = CoolDelayMessage.class.getResourceAsStream(IMAGE_RESOURCE_NAME); 98 if (in == null) { 99 throw new IllegalArgumentException ("Specified resource does not exist: " + IMAGE_RESOURCE_NAME + "."); 100 } 101 do { 102 bytesRead = in.read(buffer); 103 if (bytesRead > 0) { 104 out.write(buffer, 0, bytesRead); 105 } 106 } while (bytesRead > 0); 107 } finally { 108 if (in != null) { try { in.close(); } catch (IOException ex) { } } 109 } 110 } 111 } 112 113 private Element messageElement; 114 115 public CoolDelayMessage(ContainerContext containerContext, String messageText) { 116 XmlDocument xmlDocument = new XmlDocument("div", null, null, HtmlDocument.XHTML_1_0_NAMESPACE_URI); 117 Document document = xmlDocument.getDocument(); 118 Element divElement = document.getDocumentElement(); 119 divElement.setAttribute("id", ELEMENT_ID_MESSAGE); 120 divElement.setAttribute("style", "position:absolute;top:0px;left:0px;width:100%;height:100%;cursor:wait;" 121 + "margin:0px;padding:0px;visibility:hidden;z-index:10000;"); 122 123 Element tableElement = document.createElement("table"); 124 tableElement.setAttribute("style", "width:100%;height:100%;border:0px;padding:0px;"); 125 divElement.appendChild(tableElement); 126 127 Element tbodyElement = document.createElement("tbody"); 128 tableElement.appendChild(tbodyElement); 129 130 Element trElement = document.createElement("tr"); 131 tbodyElement.appendChild(trElement); 132 133 Element tdElement = document.createElement("td"); 134 tdElement.setAttribute("style", "width:100%;height:100%;"); 135 tdElement.setAttribute("valign", "middle"); 136 tdElement.setAttribute("align", "center"); 137 trElement.appendChild(tdElement); 138 139 Element longDivElement = document.createElement("div"); 140 longDivElement.setAttribute("id", ELEMENT_ID_LONG_MESSAGE); 141 String longDivStyleText = "color:#4f4f4f;width:277px;padding-top:120px;height:156px;" 142 + "font-family:verdana,arial,helvetica,sans-serif;font-size:14pt;font-weight:bold;font-style:italic;" 143 + "text-align:center;"; 144 if (containerContext.getClientProperties().getBoolean(ClientProperties.PROPRIETARY_IE_PNG_ALPHA_FILTER_REQUIRED)) { 145 longDivStyleText += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" 147 + containerContext.getServiceUri(IMAGE_SERVICE) + "', sizingMethod='scale')"; 148 } else { 149 longDivStyleText += "background-image:url(" + containerContext.getServiceUri(IMAGE_SERVICE) + ");"; 150 } 151 longDivElement.setAttribute("style", longDivStyleText); 152 153 longDivElement.appendChild(document.createTextNode(messageText)); 154 tdElement.appendChild(longDivElement); 155 156 messageElement = divElement; 157 } 158 159 162 public Element getMessage() { 163 return messageElement; 164 } 165 } 166 | Popular Tags |