001: //** Copyright Statement ***************************************************
002: //The Salmon Open Framework for Internet Applications (SOFIA)
003: // Copyright (C) 1999 - 2002, Salmon LLC
004: //
005: // This program is free software; you can redistribute it and/or
006: // modify it under the terms of the GNU General Public License version 2
007: // as published by the Free Software Foundation;
008: //
009: // This program is distributed in the hope that it will be useful,
010: // but WITHOUT ANY WARRANTY; without even the implied warranty of
011: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012: // GNU General Public License for more details.
013: //
014: // You should have received a copy of the GNU General Public License
015: // along with this program; if not, write to the Free Software
016: // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
017: //
018: // For more information please visit http://www.salmonllc.com
019: //** End Copyright Statement ***************************************************
020: package com.salmonllc.html;
021:
022: /////////////////////////
023: //$Archive: /JADE/SourceCode/com/salmonllc/html/HtmlRaw.java $
024: //$Author: Dan $
025: //$Revision: 15 $
026: //$Modtime: 10/30/02 2:58p $
027: /////////////////////////
028:
029: import com.salmonllc.sql.DataStoreBuffer;
030: import com.salmonllc.sql.DataStoreEvaluator;
031: import com.salmonllc.sql.DataStoreExpression;
032:
033: import com.salmonllc.html.events.*;
034:
035: import java.io.BufferedReader;
036: import java.io.FileInputStream;
037: import java.io.InputStream;
038: import java.io.InputStreamReader;
039:
040: /**
041: * This type can be used to add a region of raw HTML to the page. The HTML can be static or can be loaded from an input stream.
042: */
043: public class HtmlRaw extends HtmlComponent {
044: private String _html;
045: private DataStoreEvaluator _dsEval = null;
046: private InputStream _in = null;
047:
048: private class _PageAdapter implements PageListener {
049: private String _fileName;
050: private HtmlRaw _par;
051:
052: public _PageAdapter(HtmlRaw parent, String fileName) {
053: _par = parent;
054: _fileName = fileName;
055: _par.getPage().addPageListener(this );
056: }
057:
058: public void clear() {
059: _par.getPage().removePageListener(this );
060: _fileName = null;
061: _par = null;
062: }
063:
064: public String getFileName() {
065: return _fileName;
066: }
067:
068: public void pageRequested(PageEvent p) throws Exception {
069: setInputStream(new FileInputStream(_fileName));
070: }
071:
072: public void pageRequestEnd(PageEvent p) throws Exception {
073: }
074:
075: public void pageSubmitEnd(PageEvent p) {
076: }
077:
078: public void pageSubmitted(PageEvent p) {
079: }
080: }
081:
082: private _PageAdapter _fileProcessor;
083:
084: /**
085: * Constructs a new raw html component
086: * @param html - The html to place in the page.
087: * @param p - page to use.
088: */
089: public HtmlRaw(String html, HtmlPage p) {
090: super ("", p);
091: _html = html;
092: }
093:
094: /**
095: * Constructs a raw html component
096: * @param name - The name of the component in the page
097: * @param html - The html to place in the page.
098: * @param p - page to use.
099: */
100: public HtmlRaw(String name, String html, HtmlPage p) {
101: super (name, p);
102: _html = html;
103: }
104:
105: public void generateHTML(java.io.PrintWriter p, int rowNo)
106: throws Exception {
107: if (_dsEval != null) {
108: Object res;
109:
110: if (rowNo > -1)
111: res = _dsEval.evaluateRow(rowNo);
112: else
113: res = _dsEval.evaluateRow();
114:
115: if (res == null)
116: _html = null;
117: else
118: _html = res.toString();
119: }
120:
121: if (!getVisible())
122: return;
123:
124: if (_in != null) {
125: BufferedReader buf = new BufferedReader(
126: new InputStreamReader(_in, "ISO8859_1"));
127: char[] c = new char[1024];
128: int bytesRead = 0;
129: while (true) {
130: bytesRead = buf.read(c, 0, 1024);
131: if (bytesRead <= 0)
132: break;
133: p.write(c, 0, bytesRead);
134: }
135: buf.close();
136: }
137:
138: if (_html == null)
139: return;
140:
141: p.print(_html);
142: }
143:
144: /**
145: * Use this method get the name of the file on the server's file system to be streamed back to the browser.
146: */
147: public String getFileName() {
148: if (_fileProcessor != null)
149: return null;
150: else
151: return _fileProcessor.getFileName();
152:
153: }
154:
155: /**
156: * This method returns the HTML in the component.
157: */
158: public String getHtml() {
159: return _html;
160: }
161:
162: public boolean processParms(java.util.Hashtable h, int row) {
163: return false;
164: }
165:
166: /**
167: * Use this method to bind this component to an expression in a DataStore
168: * @param ds The DataStore to bind to.
169: * @param expression The expression to bind to.
170: * @see DataStoreEvaluator
171: */
172: public void setExpression(DataStoreBuffer ds,
173: DataStoreExpression expression) throws Exception {
174: _dsEval = new DataStoreEvaluator(ds, expression);
175: }
176:
177: /**
178: * Use this method to bind this component to an expression in a DataStore
179: * @param ds The DataStore to bind to.
180: * @param expression The expression to bind to.
181: * @see DataStoreEvaluator
182: */
183: public void setExpression(DataStoreBuffer ds, String expression)
184: throws Exception {
185: _dsEval = new DataStoreEvaluator(ds, expression);
186: }
187:
188: /**
189: * Use this method to specify the name of the file on the server's file system to be streamed back to the browser.
190: */
191: public void setFileName(String name) {
192: if (_fileProcessor != null)
193: _fileProcessor.clear();
194:
195: _fileProcessor = new _PageAdapter(this , name);
196:
197: }
198:
199: /**
200: * This method sets the HTML that the componnt will generate.
201: */
202: public void setHtml(String html) {
203: _html = html;
204: }
205:
206: /**
207: * This method sets the input stream that the component will draw it's HTML from.
208: */
209: public void setInputStream(InputStream in) {
210: _in = in;
211: }
212:
213: /**
214: * This method gets the DataStoreEvaluator being used for expressions.
215: * @return DataStoreEvaluator
216: * @see DataStoreEvaluator
217: */
218: public DataStoreEvaluator getExpression() {
219: return _dsEval;
220: }
221: }
|