// Text - Xalan extension element for inserting text
package com.nwalsh.xalan;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.net.URL;
import java.net.MalformedURLException;
import org.xml.sax.SAXException;
import org.xml.sax.AttributeList;
import org.xml.sax.ContentHandler;
import org.w3c.dom.*;
import org.apache.xerces.dom.*;
import org.apache.xpath.objects.XObject;
import org.apache.xpath.XPath;
import org.apache.xpath.NodeSet;
import org.apache.xalan.extensions.XSLProcessorContext;
import org.apache.xalan.transformer.TransformerImpl;
import org.apache.xalan.templates.StylesheetRoot;
import org.apache.xalan.templates.ElemExtensionCall;
import org.apache.xalan.templates.OutputProperties;
import org.apache.xalan.res.XSLTErrorResources;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.TransformerException;
/**
* <p>Xalan extension element for inserting text
*
* <p>$Id: Text.java,v 1.1 2001/04/02 13:03:45 nwalsh Exp $</p>
*
* <p>Copyright (C) 2001 Norman Walsh.</p>
*
* <p>This class provides a
* <a href="http://xml.apache.org/xalan/">Xalan</a>
* extension element for inserting text into a result tree.</p>
*
* <p><b>Change Log:</b></p>
* <dl>
* <dt>1.0</dt>
* <dd><p>Initial release.</p></dd>
* </dl>
*
* @author Norman Walsh
* <a href="mailto:ndw@nwalsh.com">ndw@nwalsh.com</a>
*
* @version $Id: Text.java,v 1.1 2001/04/02 13:03:45 nwalsh Exp $
*
*/
public class Text {
/**
* <p>Constructor for Text</p>
*
* <p>Does nothing.</p>
*/
public Text() {
}
public NodeList insertfile(XSLProcessorContext context,
ElemExtensionCall elem)
throws MalformedURLException,
FileNotFoundException,
IOException,
TransformerException {
String href = getFilename(context, elem);
NodeSet textNodes = new NodeSet();
Document textDoc = DOMImplementationImpl.getDOMImplementation().createDocument(null, "tmpDoc", null);
URL fileURL = null;
try {
try {
fileURL = new URL(href);
} catch (MalformedURLException e1) {
try {
fileURL = new URL("file:" + href);
} catch (MalformedURLException e2) {
System.out.println("Cannot open " + href);
return null;
}
}
InputStreamReader isr = new InputStreamReader(fileURL.openStream());
BufferedReader is = new BufferedReader(isr);
char chars[] = new char[4096];
int len = 0;
while ((len = is.read(chars)) > 0) {
String s = new String(chars, 0, len);
// Does it matter that this produces multiple, adjacent text
// nodes? I don't think so...
textNodes.addNode(textDoc.createTextNode(s));
}
is.close();
} catch (Exception e) {
System.out.println("Cannot read " + href);
}
return textNodes;
}
private String getFilename(XSLProcessorContext context, ElemExtensionCall elem)
throws java.net.MalformedURLException,
java.io.FileNotFoundException,
java.io.IOException,
javax.xml.transform.TransformerException {
String fileName;
fileName = ((ElemExtensionCall)elem).getAttribute ("href",
context.getContextNode(),
context.getTransformer());
if(fileName == null) {
context.getTransformer().getMsgMgr().error(elem,
"No 'href' on text, or not a filename");
}
return fileName;
}
}