blob: 3f2f8271b58cdad686c3203b0601ba74da146dbc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.internal.oxm;
import org.eclipse.persistence.internal.oxm.record.ExtendedContentHandler;
import org.eclipse.persistence.internal.oxm.record.MarshalRecord;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
/**
* INTERNAL:
* <p><b>Purpose</b>: This class is used to tranfer SAX events to a TopLink OXM
* Marshal Record. Used by XMLFragment mappings to write peices of XML to a
* marshal record.</p>
*/
public class MarshalRecordContentHandler implements ExtendedContentHandler {
protected MarshalRecord marshalRecord;
protected NamespaceResolver resolver;
public MarshalRecordContentHandler(MarshalRecord record, NamespaceResolver resolver) {
marshalRecord = record;
this.resolver = resolver;
}
public void setMarshalRecord(MarshalRecord record) {
this.marshalRecord = record;
}
public MarshalRecord getMarshalRecord() {
return marshalRecord;
}
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
XPathFragment frag = new XPathFragment(qName);
marshalRecord.openStartElement(frag, resolver);
for (int i = 0; i < atts.getLength(); i++) {
marshalRecord.attribute(atts.getURI(i), atts.getLocalName(i), atts.getQName(i), atts.getValue(i));
}
marshalRecord.closeStartElement();
}
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
XPathFragment frag = new XPathFragment(qName);
marshalRecord.endElement(frag, resolver);
}
public void startPrefixMapping(String prefix, String uri) throws SAXException {
marshalRecord.startPrefixMapping(prefix, uri);
}
public void processingInstruction(String target, String data) throws SAXException {
//refContentHandler.processingInstruction(target, data);
}
public void setDocumentLocator(Locator locator) {
//refContentHandler.setDocumentLocator(locator);
}
public void startDocument() throws SAXException {
//do nothing. startDocument() on the content handler is not triggered when fragment on XMLMarshaller is true
}
public void endDocument() throws SAXException {
//do nothing. startDocument() on the content handler is not triggered when fragment on XMLMarshaller is true
}
public void skippedEntity(String name) throws SAXException {
//refContentHandler.skippedEntity(name);
}
public void endPrefixMapping(String prefix) throws SAXException {
marshalRecord.endPrefixMapping(prefix);
}
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
//refContentHandler.ignorableWhitespace(ch, start, length);
}
public void characters(char[] ch, int start, int length) throws SAXException {
String characters = new String(ch, start, length);
characters(characters);
}
public void characters(CharSequence charSequence) throws SAXException {
String characters = charSequence.toString();
if (characters.trim().length() > 0) {
marshalRecord.characters(characters);
}
}
@Override
public void setNil(boolean isNil) {}
}