All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.enhydra.xml.xmlc.parsers.xerces.XercesTracer Maven / Gradle / Ivy

The newest version!
/*
 * Enhydra Java Application Server Project
 * 
 * The contents of this file are subject to the Enhydra Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License on
 * the Enhydra web site ( http://www.enhydra.org/ ).
 * 
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 
 * the License for the specific terms governing rights and limitations
 * under the License.
 * 
 * The Initial Developer of the Enhydra Application Server is Lutris
 * Technologies, Inc. The Enhydra Application Server and portions created
 * by Lutris Technologies, Inc. are Copyright Lutris Technologies, Inc.
 * All Rights Reserved.
 * 
 * Contributor(s):
 * 
 * $Id: XercesTracer.java,v 1.3 2005/01/26 08:29:24 jkjome Exp $
 */

package org.enhydra.xml.xmlc.parsers.xerces;

import org.enhydra.apache.xerces.framework.XMLAttrList;
import org.enhydra.apache.xerces.framework.XMLContentSpec;
import org.enhydra.apache.xerces.readers.XMLEntityHandler;
import org.enhydra.apache.xerces.utils.QName;
import org.enhydra.apache.xerces.utils.StringPool;
import org.enhydra.apache.xerces.validators.common.XMLAttributeDecl;
import org.enhydra.xml.io.InputSourceOps;
import org.enhydra.xml.xmlc.XMLCError;
import org.enhydra.xml.xmlc.parsers.ParseTracer;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;

/**
 * Tracing for parser callbacks.  Isolated in a class because it
 * was getting to complex and crowding the actuall handlers.
 */
class XercesTracer {
    /**
     * Verbose tracing.
     */
    private ParseTracer fTracer;

    /**
     * String pool used to lookup strings by index.
     */
    private StringPool fStringPool;

    /**
     * Is the tracer enabled?
     */
    private boolean fIsEnabled;

    /**
     * Constructor.
     */
    protected XercesTracer(StringPool stringPool,
                           ParseTracer tracer) {
        fStringPool = stringPool;
        fTracer = tracer;
        fIsEnabled = (fTracer != null) && fTracer.enabled();
    }

    /*
     * Determine if tracing is enabled.
     */
    public boolean enabled() {
        return fIsEnabled;
    }

    /**
     * Convert XMLEntityHandler.ENTITYTYPE_* to a string
     */
    private String getEntityTypeString(int entityType) {
        switch (entityType) {
        case XMLEntityHandler.ENTITYTYPE_INTERNAL_PE:
            return "INTERNAL_PE";
        case XMLEntityHandler.ENTITYTYPE_EXTERNAL_PE:
            return "EXTERNAL_PE";
        case XMLEntityHandler.ENTITYTYPE_INTERNAL:
            return "INTERNAL";
        case XMLEntityHandler.ENTITYTYPE_EXTERNAL:
            return "EXTERNAL";
        case XMLEntityHandler.ENTITYTYPE_UNPARSED:
            return "UNPARSED";
        case XMLEntityHandler.ENTITYTYPE_DOCUMENT:
            return "DOCUMENT";
        case XMLEntityHandler.ENTITYTYPE_EXTERNAL_SUBSET:
            return "EXTERNAL_SUBSET";
        default:
            throw new XMLCError("Xerces parser bug: request for entity type");
        }
    }

    /**
     * Convert XMLEntityHandler.CONTEXT_* to a string
     */
    private String getEntityContextString(int entityContent) {
        switch (entityContent) {
        case XMLEntityHandler.ENTITYREF_IN_ATTVALUE:
            return "IN_ATTVALUE";
        case XMLEntityHandler.ENTITYREF_IN_DEFAULTATTVALUE:
            return "IN_DEFAULTATTVALUE";
        case XMLEntityHandler.ENTITYREF_IN_CONTENT:
            return "IN_CONTENT";
        case XMLEntityHandler.ENTITYREF_IN_DTD_AS_MARKUP:
            return "IN_DTD_AS_MARKUP";
        case XMLEntityHandler.ENTITYREF_IN_ENTITYVALUE:
            return "IN_ENTITYVALUE";
        case XMLEntityHandler.ENTITYREF_IN_DTD_WITHIN_MARKUP:
            return "IN_DTD_WITHIN_MARKUP";
        case XMLEntityHandler.ENTITYREF_DOCUMENT:
            return "DOCUMENT";
        case XMLEntityHandler.ENTITYREF_EXTERNAL_SUBSET:
            return "EXTERNAL_SUBSET";
        default:
            throw new XMLCError("Xerces parser bug: request for unknown entity context");
        }
    }

    /**
     * Convert XMLContentSpec.CONTEXTSPECNODE_* to a string
     */
    private String getContentSpecTypeString(int contentSpecType) {
        switch (contentSpecType) {
        case XMLContentSpec.CONTENTSPECNODE_LEAF:
            return "LEAF";
        case XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE:
            return "ZERO_OR_ONE";
        case XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE:
            return "ZERO_OR_MORE";
        case XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE:
            return "ONE_OR_MORE";
        case XMLContentSpec.CONTENTSPECNODE_CHOICE:
            return "CHOICE";
        case XMLContentSpec.CONTENTSPECNODE_SEQ:
            return "SEQ";
        case XMLContentSpec.CONTENTSPECNODE_ANY:
            return "ANY";
        case XMLContentSpec.CONTENTSPECNODE_ANY_OTHER:
            return "ANY_OTHER";
        case XMLContentSpec.CONTENTSPECNODE_ANY_NS:
            return "ANY_NS";
        case XMLContentSpec.CONTENTSPECNODE_ANY_LAX:
            return "ANY_LAX";
        case XMLContentSpec.CONTENTSPECNODE_ANY_OTHER_LAX:
            return "ANY_OTHER_LAX";
        case XMLContentSpec.CONTENTSPECNODE_ANY_NS_LAX:
            return "ANY_NS_LAX";
        case XMLContentSpec.CONTENTSPECNODE_ANY_SKIP:
            return "ANY_SKIP";
        case XMLContentSpec.CONTENTSPECNODE_ANY_OTHER_SKIP:
            return "ANY_OTHER_SKIP";
        case XMLContentSpec.CONTENTSPECNODE_ANY_NS_SKIP:
            return "ANY_NS_SKIP";
        default:
            throw new XMLCError("Xerces parser bug: request for unknown contentspec type");
        }
    }

    /**
     * Get a string from the string pool.
     */
    private String getString(int index) {
        return fStringPool.toString(index);
    }

    /**
     * Get a formatted QName.
     */
    private String formatQName(QName qname) {
        return getString(qname.rawname);
    }

    /**
     * @see EntityResolver#resolveEntity
     */
    public void resolveEntity(String publicId,
                              String systemId,
                              InputSource source) {
        if (fIsEnabled) {
            fTracer.trace("resolveEntity: \""
                         + publicId + "\" \""
                         + systemId + "\" => "
                         + InputSourceOps.getName(source));
        }
        
    }

    /** 
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startDocument
     */
    public void startDocument() {
        if (fIsEnabled) {
            fTracer.trace("startDocument");
        }
    }

    /**
     * Handle end document.
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#endDocument
     */
    public void endDocument() {
        if (fIsEnabled) {
            fTracer.trace("endDocument");
        }
    }

    /**
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#xmlDecl
     */
    public void xmlDecl(int version, int encoding, int standalone) throws Exception {
        if (fIsEnabled) {
            fTracer.trace("xmlDecl: " + getString(version)
                          + " " + getString(encoding)
                          + " " + getString(standalone));
        }
    }

    /**
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#textDecl
     */
    public void textDecl(int version, int encoding) throws Exception {
        if (fIsEnabled) {
            fTracer.trace("textDecl: " + getString(version)
                          + " " + getString(encoding));
        }
    }

    /**
     * Handle start of element.
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startElement
     */
    public void startElement(QName element,
                             XMLAttrList attrList,
                             int attrListHandle) {
        if (fIsEnabled) {
            StringBuffer buf = new StringBuffer("startElement: " + 
                                                formatQName(element));
            int attrIndex = attrListHandle;
            while (attrIndex >= 0) {
                if (attrList.isSpecified(attrIndex)) {
                    String uri = getString(attrList.getAttrURI(attrIndex));
                    buf.append(" ");
                    if (uri != null) {
                        buf.append("<");
                        buf.append(uri);
                        buf.append(">");
                    }
                    buf.append(getString(attrList.getAttrName(attrIndex)));
                    buf.append("=\"");
                    buf.append(getString(attrList.getAttValue(attrIndex)));
                    buf.append("\"");
                }
                attrIndex = attrList.getNextAttr(attrIndex);
            }
            fTracer.trace(buf.toString());
            fTracer.enter();
        }
    }

    /**
     * Handle end element.
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#endElement
     */
    public void endElement(QName element) {
        if (fIsEnabled) {
            fTracer.leave();
            fTracer.trace("endElement: " + formatQName(element));
        }
    }

    /** 
     * Handle start of a namespace declaration scope. 
     *
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startNamespaceDeclScope
     */
    public void startNamespaceDeclScope(int prefix, int uri) {
        if (fIsEnabled) {
            fTracer.trace("startNamespaceDeclScope: " + getString(prefix)
                          + " " + getString(uri));
            fTracer.enter();
        }
    }

    /** 
     * Handle end of a namespace declaration scope. 
     *
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startNamespaceDeclScope
     */
    public void endNamespaceDeclScope(int prefix) {
        if (fIsEnabled) {
            fTracer.leave();
            fTracer.trace("endNamespaceDeclScope: " + getString(prefix));
        }
    }

    /**
     * Handle the start of an entity reference.
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startEntityReference
     */
    public void startEntityReference(int entityName,
                                     int entityType,
                                     int entityContext,
                                     boolean processed) {
        if (fIsEnabled) {
            fTracer.trace("startEntityReference: "
                          + getString(entityName)
                          + " " +  getEntityTypeString(entityType)
                          + " " +  getEntityContextString(entityContext)
                          + ((processed) ? "" : " (ignored)"));
            fTracer.enter();
        }
    }

    /**
     * Handle the end of an entity reference.
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#endEntityReference
     */
    public void endEntityReference(int entityName,
                                   int entityType,
                                   int entityContext,
                                   boolean processed) {
        if (fIsEnabled) {
            fTracer.leave();
            fTracer.trace("endEntityReference: " + getString(entityName)
                          + ((processed) ? "" : " (ignored)"));

        }
    }

    /** 
     * Handle start of CDATA section. 
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startCDATA
     */
    public void startCDATA() {
        if (fIsEnabled) {
            fTracer.trace("startCDATA");
            fTracer.enter();
        }
    }

    /** 
     * Handle for end of CDATA section.
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#endCDATA
     */
    public void endCDATA() {
        if (fIsEnabled) {
            fTracer.leave();
            fTracer.trace("endCDATA");
        }
    }

    /** 
     * Handle processing instruction.
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#processingInstruction
     */
    public void processingInstruction(int target,
                                      int data) {
        if (fIsEnabled) {
            fTracer.trace("processingInstruction: " + getString(target));
        }
    }

    /**
     * Handle a comment.
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#comment
     */
    public void comment(int comment) {
        if (fIsEnabled) {
            fTracer.trace("comment: " + getString(comment));
        }
    }

    /**
     * Handle characters.
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#characters
     */
    public void characters(char ch[],
                           int start,
                           int length) {
        if (fIsEnabled) {
            fTracer.trace("characters: \"" + new String(ch, start, length) + "\"");
        }
    }

    /**
     * Handle ignorable whitespace.
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#ignorableWhitespace
     */
    public void ignorableWhitespace(char ch[],
                                    int start,
                                    int length) {
        if (fIsEnabled) {
            fTracer.trace("ignorableWhitespace: " + length);
        }
    }

    /**
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#startDTD
     */
    public void startDTD(QName rootElement,
                         int publicId,
                         int systemId) {
        if (fIsEnabled) {
            fTracer.trace("startDTD: " + formatQName(rootElement)
                         + " " + getString(publicId)
                         + " " + getString(systemId));
            fTracer.enter();
        }
    }

    /**
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#internalSubset
     */
    public void internalSubset(int internalSubset) {
        if (fIsEnabled) {
            fTracer.trace("internalSubset: " + getString(internalSubset));
        }
    }

    /** 
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#endDTD
     */
    public void endDTD() {
        if (fIsEnabled) {
            fTracer.leave();
        }
    }

    /**
     * 
     *
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#elementDecl
     */
    public void elementDecl(QName elementDecl,
                            int contentSpecType, 
                            int contentSpecIndex,
                            XMLContentSpec.Provider contentSpecProvider) {
        if (fIsEnabled) {
            fTracer.trace("elementDecl: " + formatQName(elementDecl)
                          + " " + getContentSpecTypeString(contentSpecType)
                          + " " + XMLContentSpec.toString(contentSpecProvider,
                                                          fStringPool,
                                                          contentSpecIndex));
        }
    }
    
    /**
     * Get the attribute type as a string.
     */
    private String getAttrTypeString(int attType,
                                     boolean attList) {
        switch (attType) {
        case XMLAttributeDecl.TYPE_ENTITY: 
            return (attList ? "ENTITIES" : "ENTITY");

        case XMLAttributeDecl.TYPE_ID:
            return "ID";

        case XMLAttributeDecl.TYPE_IDREF:
            return (attList ? "IDREFS" : "IDREF");

        case XMLAttributeDecl.TYPE_NMTOKEN:
            return (attList ? "NMTOKENS" : "NMTOKEN");

        case XMLAttributeDecl.TYPE_NOTATION:
            return "NOTATION";

        case XMLAttributeDecl.TYPE_CDATA: 
            return "string";
        default:
            return "invalid-attType";
        }
    }

    /**
     * 
     *
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#attlistDecl
     */
    public void attlistDecl(QName elementDecl,
                            QName attributeDecl,
                            int attType,
                            boolean attList,
                            String enumString,
                            int attDefaultType,
                            int attDefaultValue) {
        //FIXME:  boolean attList not handled
        if (fIsEnabled) {
            fTracer.trace("attlistDecl: " + formatQName(elementDecl)
                          + " " + formatQName(attributeDecl)
                          + " " + getAttrTypeString(attType, attList)
                          + " " + enumString
                          + " " + getString(attDefaultType)
                          + " " + getString(attDefaultValue));
        }
    }

    /**
     * 
     *
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#internalPEDecl
     */
    public void internalPEDecl(int entityName,
                               int entityValue) {
        if (fIsEnabled) {
            fTracer.trace("internalPEDecl: " + getString(entityName)
                          + " \"" + getString(entityValue) + "\"");
        }
    }

    /**
     * 
     *
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#externalPEDecl
     */
    public void externalPEDecl(int entityName,
                               int publicId,
                               int systemId) {
        if (fIsEnabled) {
            fTracer.trace("externalPEDecl: " + getString(entityName)
                          + " " + getString(publicId)
                          + " " + getString(systemId));
        }
    }

    /**
     * 
     *
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#internalEntityDecl
     */
    public void internalEntityDecl(int entityName,
                                   int entityValue) {
        if (fIsEnabled) {
            fTracer.trace("internalEntityDecl: " + getString(entityName)
                         + " \"" + getString(entityValue) + "\"");
        }
    }

    /**
     * 
     *
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#externalEntityDecl
     */
    public void externalEntityDecl(int entityName,
                                   int publicId,
                                   int systemId) {
        if (fIsEnabled) {
            fTracer.trace("externalEntityDecl: " + getString(entityName)
                          + " " + getString(publicId)
                          + " " + getString(systemId));
        }
    }

    /**
     * 
     *
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#unparsedEntityDecl
     */
    public void unparsedEntityDecl(int entityName,
                                   int publicId,
                                   int systemId,
                                   int notationName) {
        if (fIsEnabled) {
            fTracer.trace("unparsedEntityDecl: " + getString(entityName)
                          + " " + getString(publicId)
                          + " " + getString(systemId)
                          + " " + getString(notationName));
        }
    }

    /**
     * 
     *
     * @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#notationDecl
     */
    public void notationDecl(int notationName,
                             int publicId,
                             int systemId) {
        if (fIsEnabled) {
            fTracer.trace("notationDecl: " + getString(notationName)
                          + " " + getString(publicId)
                          + " " + getString(systemId));
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy