elena       2002/09/25 11:40:34

  Modified:    java/src/org/apache/xerces/dom DOMNormalizer.java
               java/src/org/apache/xerces/impl RevalidationHandler.java
  Log:
  Applied patch (with minor modifications) from Mikko Honkala <[EMAIL PROTECTED]>
  to update the PSVI in the DOMNormalizer.
  
  Revision  Changes    Path
  1.17      +357 -6    xml-xerces/java/src/org/apache/xerces/dom/DOMNormalizer.java
  
  Index: DOMNormalizer.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMNormalizer.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- DOMNormalizer.java        24 Sep 2002 23:05:16 -0000      1.16
  +++ DOMNormalizer.java        25 Sep 2002 18:40:34 -0000      1.17
  @@ -71,14 +71,20 @@
   
   
   import org.apache.xerces.xni.Augmentations;
  +import org.apache.xerces.xni.NamespaceContext;
   import org.apache.xerces.xni.QName;
   import org.apache.xerces.xni.XMLDocumentHandler;
   import org.apache.xerces.xni.XMLAttributes;
  +import org.apache.xerces.xni.XMLResourceIdentifier;
  +import org.apache.xerces.xni.XMLLocator;
   import org.apache.xerces.xni.XMLString;
   import org.apache.xerces.xni.XNIException;
   import org.apache.xerces.xni.parser.XMLComponent;
   import org.apache.xerces.xni.parser.XMLComponentManager;
   import org.apache.xerces.xni.parser.XMLErrorHandler;
  +import org.apache.xerces.xni.parser.XMLDocumentSource;
  +import org.apache.xerces.xni.psvi.ElementPSVI;
  +import org.apache.xerces.xni.psvi.AttributePSVI;
   
   import org.apache.xerces.xni.grammars.XMLGrammarDescription;
   import org.apache.xerces.xni.grammars.XMLGrammarPool;
  @@ -116,7 +122,7 @@
    * @author Elena Litani, IBM
    * @version $Id$
    */
  -public class DOMNormalizer implements XMLGrammarPool {
  +public class DOMNormalizer implements XMLGrammarPool, XMLDocumentHandler {
   
   
       //
  @@ -171,6 +177,9 @@
       // Validation against namespace aware grammar
       protected boolean fNamespaceValidation = false;
   
  +    // Update PSVI information in the tree
  +    protected boolean fPSVI = false;
  +
       /** stores namespaces in scope */
       protected final NamespaceSupport fNamespaceContext = new NamespaceSupport();
   
  @@ -186,7 +195,9 @@
       /** DOM Locator -  for namespace fixup algorithm */
       protected final DOMLocatorImpl fLocator = new DOMLocatorImpl();
   
  -
  +    /** for setting the PSVI */
  +    protected Node fCurrentNode = null;
  +    private QName fAttrQName = new QName();
   
       // 
       // Constructor
  @@ -201,6 +212,7 @@
               fValidationHandler = null;
               return;
           }
  +        fPSVI = false;
           fSymbolTable = (SymbolTable)componentManager.getProperty(SYMBOL_TABLE);
           if (fSymbolTable == null) {
               fSymbolTable = new SymbolTable();
  @@ -234,10 +246,14 @@
   
           fDocument = document;
           fErrorHandler = fDocument.getErrorHandler();
  -
           if (fValidationHandler != null) {
  +            if (fDocument instanceof PSVIDocumentImpl) {
  +                fPSVI = true;
  +            }
               fValidationHandler.setBaseURI(fDocument.fDocumentURI);
  +            fValidationHandler.setDocumentHandler(this);
               fValidationHandler.startDocument(null, fDocument.encoding, 
fNamespaceContext, null);
  +            
           }
   
           Node kid, next;
  @@ -332,6 +348,7 @@
                       // set error node in the dom error wrapper
                       // so if error occurs we can report an error node
                       fDocument.fErrorHandlerWrapper.fCurrentNode = node;
  +                    fCurrentNode = node;
                       // call re-validation handler
                       fValidationHandler.startElement(fQName, fAttrProxy, null);
                   }
  @@ -362,7 +379,7 @@
                       // set error node in the dom error wrapper
                       // so if error occurs we can report an error node
                       fDocument.fErrorHandlerWrapper.fCurrentNode = node;
  -
  +                    fCurrentNode = node;
                       fValidationHandler.endElement(fQName, null);
                   }
   
  @@ -444,7 +461,7 @@
                       // set error node in the dom error wrapper
                       // so if error occurs we can report an error node
                       fDocument.fErrorHandlerWrapper.fCurrentNode = node;
  -                    
  +                    fCurrentNode = node;
                       fValidationHandler.startCDATA(null);
                       fValidationHandler.characterData(node.getNodeValue(), null);
                       fValidationHandler.endCDATA(null);
  @@ -506,6 +523,7 @@
                               // set error node in the dom error wrapper
                               // so if error occurs we can report an error node
                               fDocument.fErrorHandlerWrapper.fCurrentNode = node;
  +                            fCurrentNode = node;
                               fValidationHandler.characterData(node.getNodeValue(), 
null);
                               if (DEBUG_ND) {
                                   
System.out.println("=====>characterData(),"+nextType);
  @@ -1103,5 +1121,338 @@
       // XMLDocumentHandler methods
       //
   
  +    /**
  +     * The start of the document.
  +     * 
  +     * @param locator  The document locator, or null if the document
  +     *                 location cannot be reported during the parsing
  +     *                 of this document. However, it is <em>strongly</em>
  +     *                 recommended that a locator be supplied that can
  +     *                 at least report the system identifier of the
  +     *                 document.
  +     * @param encoding The auto-detected IANA encoding name of the entity
  +     *                 stream. This value will be null in those situations
  +     *                 where the entity encoding is not auto-detected (e.g.
  +     *                 internal entities or a document entity that is
  +     *                 parsed from a java.io.Reader).
  +     * @param namespaceContext
  +     *                 The namespace context in effect at the
  +     *                 start of this document.
  +     *                 This object represents the current context.
  +     *                 Implementors of this class are responsible
  +     *                 for copying the namespace bindings from the
  +     *                 the current context (and its parent contexts)
  +     *                 if that information is important.
  +     *                 
  +     * @param augs     Additional information that may include infoset augmentations
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void startDocument(XMLLocator locator, String encoding, 
  +                              NamespaceContext namespaceContext,
  +                              Augmentations augs) 
  +        throws XNIException{
  +    }
  +
  +    /**
  +     * Notifies of the presence of an XMLDecl line in the document. If
  +     * present, this method will be called immediately following the
  +     * startDocument call.
  +     * 
  +     * @param version    The XML version.
  +     * @param encoding   The IANA encoding name of the document, or null if
  +     *                   not specified.
  +     * @param standalone The standalone value, or null if not specified.
  +     * @param augs       Additional information that may include infoset 
augmentations
  +     *                   
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void xmlDecl(String version, String encoding, String standalone, 
Augmentations augs)
  +        throws XNIException{
  +    }
  +
  +    /**
  +     * Notifies of the presence of the DOCTYPE line in the document.
  +     * 
  +     * @param rootElement
  +     *                 The name of the root element.
  +     * @param publicId The public identifier if an external DTD or null
  +     *                 if the external DTD is specified using SYSTEM.
  +     * @param systemId The system identifier if an external DTD, null
  +     *                 otherwise.
  +     * @param augs     Additional information that may include infoset augmentations
  +     *                 
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void doctypeDecl(String rootElement, String publicId, String systemId, 
Augmentations augs)
  +        throws XNIException{
  +    }
  +
  +    /**
  +     * A comment.
  +     * 
  +     * @param text   The text in the comment.
  +     * @param augs   Additional information that may include infoset augmentations
  +     *               
  +     * @exception XNIException
  +     *                   Thrown by application to signal an error.
  +     */
  +    public void comment(XMLString text, Augmentations augs) throws XNIException{
  +    }
  +
  +    /**
  +     * A processing instruction. Processing instructions consist of a
  +     * target name and, optionally, text data. The data is only meaningful
  +     * to the application.
  +     * <p>
  +     * Typically, a processing instruction's data will contain a series
  +     * of pseudo-attributes. These pseudo-attributes follow the form of
  +     * element attributes but are <strong>not</strong> parsed or presented
  +     * to the application as anything other than text. The application is
  +     * responsible for parsing the data.
  +     * 
  +     * @param target The target.
  +     * @param data   The data or null if none specified.
  +     * @param augs   Additional information that may include infoset augmentations
  +     *               
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void processingInstruction(String target, XMLString data, Augmentations 
augs)
  +        throws XNIException{
  +    }
  +
  +    /**
  +     * The start of a namespace prefix mapping. This method will only be
  +     * called when namespace processing is enabled.
  +     * 
  +     * @param prefix The namespace prefix.
  +     * @param uri    The URI bound to the prefix.
  +     * @param augs   Additional information that may include infoset augmentations
  +     *               
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void startPrefixMapping(String prefix, String uri, Augmentations augs)
  +        throws XNIException{
  +    }
  +
  +    /**
  +     * The start of an element.
  +     * 
  +     * @param element    The name of the element.
  +     * @param attributes The element attributes.
  +     * @param augs       Additional information that may include infoset 
augmentations
  +     *                   
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void startElement(QName element, XMLAttributes attributes, Augmentations 
augs)
  +        throws XNIException{
  +        if (fPSVI) {
  +            Element currentElement = (Element)fCurrentNode;
  +            int attrCount = attributes.getLength();
  +            for (int i = 0; i < attrCount; i++) {
  +                attributes.getName(i, fAttrQName);
  +                Attr attr = null;
  +                //REVISIT: schema elements must be namespace aware.
  +                //         DTD re-validation is not implemented yet..
  +                attr = 
currentElement.getAttributeNodeNS(fAttrQName.uri,fAttrQName.localpart);
  +
  +                AttributePSVI attrPSVI = 
(AttributePSVI)attributes.getAugmentations(i).getItem(Constants.ATTRIBUTE_PSVI);
  +                if (attrPSVI !=null) {
  +                     ((PSVIAttrNSImpl)attr).setPSVI(attrPSVI);
  +                }
  +            }
  +        }
  +    
  +    }
  +
  +    /**
  +     * An empty element.
  +     * 
  +     * @param element    The name of the element.
  +     * @param attributes The element attributes.
  +     * @param augs       Additional information that may include infoset 
augmentations
  +     *                   
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void emptyElement(QName element, XMLAttributes attributes, Augmentations 
augs)
  +        throws XNIException{
  +        startElement(element, attributes, augs);
  +        endElement(element, augs);
  +    }
  +
  +    /**
  +     * This method notifies the start of a general entity.
  +     * <p>
  +     * <strong>Note:</strong> This method is not called for entity references
  +     * appearing as part of attribute values.
  +     * 
  +     * @param name     The name of the general entity.
  +     * @param identifier The resource identifier.
  +     * @param encoding The auto-detected IANA encoding name of the entity
  +     *                 stream. This value will be null in those situations
  +     *                 where the entity encoding is not auto-detected (e.g.
  +     *                 internal entities or a document entity that is
  +     *                 parsed from a java.io.Reader).
  +     * @param augs     Additional information that may include infoset augmentations
  +     *                 
  +     * @exception XNIException Thrown by handler to signal an error.
  +     */
  +    public void startGeneralEntity(String name, 
  +                                   XMLResourceIdentifier identifier,
  +                                   String encoding,
  +                                   Augmentations augs) throws XNIException{
  +    }
  +
  +    /**
  +     * Notifies of the presence of a TextDecl line in an entity. If present,
  +     * this method will be called immediately following the startEntity call.
  +     * <p>
  +     * <strong>Note:</strong> This method will never be called for the
  +     * document entity; it is only called for external general entities
  +     * referenced in document content.
  +     * <p>
  +     * <strong>Note:</strong> This method is not called for entity references
  +     * appearing as part of attribute values.
  +     * 
  +     * @param version  The XML version, or null if not specified.
  +     * @param encoding The IANA encoding name of the entity.
  +     * @param augs     Additional information that may include infoset augmentations
  +     *                 
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void textDecl(String version, String encoding, Augmentations augs) 
throws XNIException{
  +    }
  +
  +    /**
  +     * This method notifies the end of a general entity.
  +     * <p>
  +     * <strong>Note:</strong> This method is not called for entity references
  +     * appearing as part of attribute values.
  +     * 
  +     * @param name   The name of the entity.
  +     * @param augs   Additional information that may include infoset augmentations
  +     *               
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void endGeneralEntity(String name, Augmentations augs) throws 
XNIException{
  +    }
  +
  +    /**
  +     * Character content.
  +     * 
  +     * @param text   The content.
  +     * @param augs   Additional information that may include infoset augmentations
  +     *               
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void characters(XMLString text, Augmentations augs) throws XNIException{
  +    }
  +
  +    /**
  +     * Ignorable whitespace. For this method to be called, the document
  +     * source must have some way of determining that the text containing
  +     * only whitespace characters should be considered ignorable. For
  +     * example, the validator can determine if a length of whitespace
  +     * characters in the document are ignorable based on the element
  +     * content model.
  +     * 
  +     * @param text   The ignorable whitespace.
  +     * @param augs   Additional information that may include infoset augmentations
  +     *               
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void ignorableWhitespace(XMLString text, Augmentations augs) throws 
XNIException{
  +    }
  +
  +    /**
  +     * The end of an element.
  +     * 
  +     * @param element The name of the element.
  +     * @param augs    Additional information that may include infoset augmentations
  +     *                
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void endElement(QName element, Augmentations augs) throws XNIException{
  +        if (fPSVI) {
  +        
  +            ElementPSVI elementPSVI = 
(ElementPSVI)augs.getItem(Constants.ELEMENT_PSVI);
  +            if (elementPSVI != null) {
  +                
  +                ((PSVIElementNSImpl)fCurrentNode).setPSVI(elementPSVI);
  +                if (elementPSVI.getIsSchemaSpecified()) {
  +                    // default value from XML Schema.
  +                    fCurrentNode.setNodeValue(elementPSVI.getSchemaDefault());
  +                }
  +            }
  +        }
  +    }
  +
  +    /**
  +     * The end of a namespace prefix mapping. This method will only be
  +     * called when namespace processing is enabled.
  +     * 
  +     * @param prefix The namespace prefix.
  +     * @param augs   Additional information that may include infoset augmentations
  +     *               
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void endPrefixMapping(String prefix, Augmentations augs) throws 
XNIException{
  +    }
  +
  +    /**
  +     * The start of a CDATA section.
  +     * 
  +     * @param augs   Additional information that may include infoset augmentations
  +     *               
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void startCDATA(Augmentations augs) throws XNIException{
  +    }
  +
  +    /**
  +     * The end of a CDATA section.
  +     * 
  +     * @param augs   Additional information that may include infoset augmentations
  +     *               
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void endCDATA(Augmentations augs) throws XNIException{
  +    }
  +
  +    /**
  +     * The end of the document.
  +     * 
  +     * @param augs   Additional information that may include infoset augmentations
  +     *               
  +     * @exception XNIException
  +     *                   Thrown by handler to signal an error.
  +     */
  +    public void endDocument(Augmentations augs) throws XNIException{
  +    }
  +
  +
  +    /** Sets the document source. */
  +    public void setDocumentSource(XMLDocumentSource source){
  +    }
  +
  +
  +    /** Returns the document source. */
  +    public XMLDocumentSource getDocumentSource(){
  +        return null;
  +    }
   
   }  // DOMNormalizer class
  
  
  
  1.3       +4 -5      
xml-xerces/java/src/org/apache/xerces/impl/RevalidationHandler.java
  
  Index: RevalidationHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/RevalidationHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RevalidationHandler.java  9 Aug 2002 15:18:17 -0000       1.2
  +++ RevalidationHandler.java  25 Sep 2002 18:40:34 -0000      1.3
  @@ -59,8 +59,7 @@
   
   import org.apache.xerces.xni.Augmentations;
   import org.apache.xerces.xni.XNIException;
  -import org.apache.xerces.xni.XMLDocumentHandler;
  -
  +import org.apache.xerces.xni.parser.XMLDocumentFilter;
   /**
    * DOM Revalidation handler adds additional functionality to XMLDocumentHandler
    * 
  @@ -68,7 +67,7 @@
    * @author Elena Litani, IBM
    * @version $Id$
    */
  -public interface RevalidationHandler extends XMLDocumentHandler{
  +public interface RevalidationHandler extends XMLDocumentFilter {
   
       /**
        * Set the base URI of the document
  @@ -76,7 +75,7 @@
        * @param base
        */
       public void setBaseURI(String base);
  -
  +    
       /**
        * Character content.
        * 
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to