blob: f08d5f57546bda02aa42905c424f3e5fa378e396 [file] [log] [blame]
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.transform.ptests;
import org.xml.sax.ContentHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.Locator;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* A customized ContentHandler. It writes whole XML file with extra tag on every
* XML elements.
*/
public class MyContentHandler implements ContentHandler {
/**
* FileWrite to write content to.
*/
private final BufferedWriter bWriter;
/**
* Create FileWiter for the processing.
* @param fileName Output file name.
* @throws org.xml.sax.SAXException
*/
public MyContentHandler(String fileName) throws SAXException {
try {
bWriter = new BufferedWriter(new FileWriter(fileName));
} catch (IOException ex) {
throw new SAXException("Open file error", ex);
}
}
/**
* Do nothing when set document locator.
*/
@Override
public void setDocumentLocator (Locator locator) {
}
/**
* Open the output file when start to process the document. Write a
* startDocument tag to output File if opening file successfully.
* @throws SAXException if file writing failed.
*/
@Override
public void startDocument () throws SAXException {
//Bug # 4448884 filed. setDocumentLocator method should be called
//first. The bug won't be fixed. So startDocument is the next method
println("startDocument");
}
/**
* Write a startDocument tag to output File after processing whole document.
* Follow with closing the output file.
* @throws SAXException if file writing failed.
*/
@Override
public void endDocument() throws SAXException {
println("endDocument");
try {
bWriter.flush();
bWriter.close();
} catch (IOException ex) {
throw new SAXException("Close file error", ex);
}
}
/**
* Write a startPrefixMapping appending with prefix and URI to output File
* before entering the scope of a prefix-URI mapping.
* @param prefix the Namespace prefix being declared.
* @param uri the Namespace URI the prefix is mapped to.
* @throws SAXException if file writing failed.
*/
@Override
public void startPrefixMapping (String prefix, String uri)
throws SAXException {
println("startPrefixMapping: " + prefix + ", " + uri);
}
/**
* Write a endPrefixMapping appending with prefix to output File after a
* prefix-URI mapping.
* @param prefix the Namespace prefix being declared.
* @throws SAXException if file writing failed.
*/
@Override
public void endPrefixMapping (String prefix) throws SAXException {
println("endPrefixMapping: " + prefix);
}
/**
* Write a startElement appending with namespaceURI,localName,qName and
* iteration on attributes to output File when start processing element.
* @param namespaceURI the Namespace URI.
* @param localName the local name (without prefix).
* @param qName the qualified name (with prefix).
* @param atts the attributes attached to the element.
* @throws SAXException if file writing failed.
*/
@Override
public void startElement (String namespaceURI, String localName,
String qName, Attributes atts)
throws SAXException {
String str = "startElement: " + namespaceURI + ", " + namespaceURI +
", " + qName;
int n = atts.getLength();
for(int i = 0; i < n; i++) {
str = str + ", " + atts.getQName(i);
}
println(str);
}
/**
* Write a startElement appending with namespaceURI,qName and to output File
* after processing element finished.
* @param namespaceURI the Namespace URI.
* @param localName the local name (without prefix).
* @param qName the qualified name (with prefix).
* @throws SAXException if file writing failed.
*/
@Override
public void endElement (String namespaceURI, String localName,
String qName) throws SAXException {
println("endElement: " + namespaceURI + ", " + namespaceURI + ", " + qName);
}
/**
* Write characters tag to file when receive character data.
* @param ch the characters from the XML document
* @param start the start position in the array
* @param length the number of characters to read from the array
* @throws SAXException if file writing failed.
*/
@Override
public void characters (char ch[], int start, int length)
throws SAXException {
println("characters");
}
/**
* Write ignorableWhitespace tag to file when receive notification of
* ignorable whitespace in element content.
* @param ch an array holds all ignorable whitespace.
* @param start start position of ignorable whitespace.
* @param length length of ignorable whitespace.
* @throws SAXException if file writing failed.
*/
@Override
public void ignorableWhitespace (char ch[], int start, int length)
throws SAXException {
println("ignorableWhitespace");
}
/**
* Write processingInstruction tag when receive notification of a processing
* instruction.
* @param target the processing instruction target
* @param data the processing instruction data, or null if none was
* supplied. The data does not include any whitespace
* separating it from the target.
* @throws SAXException if file writing failed.
*/
@Override
public void processingInstruction (String target, String data)
throws SAXException {
println("processingInstruction: " + target + ", " + target);
}
/**
* Write the entity name to file when receive notification of a skipped entity.
* @param name entity name that skipped
* @throws SAXException if file writing failed.
*/
@Override
public void skippedEntity (String name) throws SAXException {
println("skippedEntity: " + name);
}
/**
* Print a string output to file along with a new line.
* @param output string needed to be written to file.
* @throws SAXException if file writing failed.
*/
private void println(String output) throws SAXException {
try {
bWriter.write(output, 0, output.length());
bWriter.newLine();
} catch (IOException ex) {
throw new SAXException("bWriter error", ex);
}
}
}