001: /*
002: * This file is part of the Echo Web Application Framework (hereinafter "Echo").
003: * Copyright (C) 2002-2005 NextApp, Inc.
004: *
005: * Version: MPL 1.1/GPL 2.0/LGPL 2.1
006: *
007: * The contents of this file are subject to the Mozilla Public License Version
008: * 1.1 (the "License"); you may not use this file except in compliance with
009: * the License. You may obtain a copy of the License at
010: * http://www.mozilla.org/MPL/
011: *
012: * Software distributed under the License is distributed on an "AS IS" basis,
013: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
014: * for the specific language governing rights and limitations under the
015: * License.
016: *
017: * Alternatively, the contents of this file may be used under the terms of
018: * either the GNU General Public License Version 2 or later (the "GPL"), or
019: * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
020: * in which case the provisions of the GPL or the LGPL are applicable instead
021: * of those above. If you wish to allow use of your version of this file only
022: * under the terms of either the GPL or the LGPL, and not to allow others to
023: * use your version of this file under the terms of the MPL, indicate your
024: * decision by deleting the provisions above and replace them with the notice
025: * and other provisions required by the GPL or the LGPL. If you do not delete
026: * the provisions above, a recipient may use your version of this file under
027: * the terms of any one of the MPL, the GPL or the LGPL.
028: */
029:
030: package nextapp.echo2.webrender;
031:
032: import java.io.IOException;
033: import java.io.InputStream;
034: import java.io.Serializable;
035:
036: import javax.xml.parsers.DocumentBuilder;
037: import javax.xml.parsers.DocumentBuilderFactory;
038: import javax.xml.parsers.ParserConfigurationException;
039:
040: import org.w3c.dom.Document;
041: import org.w3c.dom.Element;
042: import org.xml.sax.SAXException;
043:
044: /**
045: * Representation of a client/server-interaction delay message.
046: * Client/server-interaction delay messages are presented to the user
047: * while the client is communicating synchronously with the server.
048: */
049: public abstract class ServerDelayMessage implements Serializable {
050:
051: /**
052: * The element id of the "main delay message" element which will be made
053: * visible when the any client/server interaction occurs.
054: */
055: public static final String ELEMENT_ID_MESSAGE = "serverDelayMessage";
056:
057: /**
058: * The element id of the "long delay message" element which will be made
059: * visible when the delay pane has been displayed for a set amount
060: * of time.
061: */
062: public static final String ELEMENT_ID_LONG_MESSAGE = "serverDelayMessageLong";
063:
064: /**
065: * Creates a new concrete <code>ServerDelayMessage</code> implementation
066: * based on the HTML fragment contained in the specified
067: * <code>CLASSPATH</code> resource
068: *
069: * @param resourceName the <code>CLASSPATH</code> resource containing the
070: * HTML fragment
071: * @return the created <code>ServerDelayMessage</code>
072: * @throws IOException if the resource cannot be found or parsed
073: */
074: public static ServerDelayMessage createFromResource(
075: String resourceName) throws IOException {
076: Document document;
077: InputStream in = null;
078: try {
079: DocumentBuilderFactory factory = DocumentBuilderFactory
080: .newInstance();
081: DocumentBuilder builder = factory.newDocumentBuilder();
082: in = ServerDelayMessage.class
083: .getResourceAsStream(resourceName);
084: if (in == null) {
085: throw new IOException("Resource not found: "
086: + resourceName + ".");
087: }
088: document = builder.parse(in);
089: } catch (ParserConfigurationException ex) {
090: throw new IOException("Failed to parse InputStream.");
091: } catch (SAXException ex) {
092: throw new IOException("Failed to parse InputStream.");
093: } finally {
094: if (in != null) {
095: try {
096: in.close();
097: } catch (IOException ex) {
098: }
099: }
100: }
101:
102: final Element messageElement = document.getDocumentElement();
103: return new ServerDelayMessage() {
104:
105: /**
106: * @see nextapp.echo2.webrender.ServerDelayMessage#getMessage()
107: */
108: public Element getMessage() {
109: return messageElement;
110: }
111: };
112: }
113:
114: /**
115: * Returns the message content as an HTML element
116: *
117: * @return the HTML element
118: */
119: public abstract Element getMessage();
120: }
|