jkesselm    2002/08/26 10:58:06

  Modified:    java/src/org/apache/xml/dtm/ref Tag: xslt20
                        DTMManagerDefault.java
               java/src/org/apache/xml/dtm/ref/sax2dtm Tag: xslt20
                        SAX2DTM.java
               java/src/org/apache/xml/dtm/ref/xni2dtm Tag: xslt20
                        FuncValidate.java XNI2DTM.java
  Log:
  Reorg to support typed Temporary Trees (RTFs).
  
  Note that I have given up the safety net which kept getDocument()
  from working for shared DTMs. A better fix might be to leave that
  protection in place and have validate invoke a separate call to
  get the last document built (which would also clean up the
  transform-to-rtf mechanism somewhat). RECONSIDER.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.41.6.1.2.1 +7 -3      
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMManagerDefault.java
  
  Index: DTMManagerDefault.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMManagerDefault.java,v
  retrieving revision 1.41.6.1
  retrieving revision 1.41.6.1.2.1
  diff -u -r1.41.6.1 -r1.41.6.1.2.1
  --- DTMManagerDefault.java    14 Aug 2002 19:45:34 -0000      1.41.6.1
  +++ DTMManagerDefault.java    26 Aug 2002 17:58:05 -0000      1.41.6.1.2.1
  @@ -313,7 +313,11 @@
           //
           // %REVIEW% This is a sloppy way to request this mode;
           // we need to consider architectural improvements.
  -        dtm = new SAX2DTM(this, source, documentID, whiteSpaceFilter,
  +        //
  +        // XSLT20 Temporary Trees may want to contain
  +        // schema-typed nodes, so we actually need
  +        // XNI2DTM rather than SAX2DTM.
  +        dtm = new /*SAX2DTM*/XNI2DTM(this, source, documentID, whiteSpaceFilter,
                                xstringFactory, doIndexing, true);
           if(DEBUG)
                System.out.println("CREATING RTF DTM: "+dtm);
  @@ -343,7 +347,7 @@
        XNISource xsrc=(XNISource)source;
        
           XNI2DTM dtm = new XNI2DTM(this, source, documentID, whiteSpaceFilter,
  -                              xstringFactory, doIndexing);
  +                              xstringFactory, doIndexing, false);
           addDTM(dtm, dtmPos, 0);
           
           xsrc.setDocumentHandler(dtm);
  @@ -404,7 +408,7 @@
         if(reader.getClass().getName().equals("org.apache.xerces.parsers.SAXParser")) 
         {         
           DTM dtm = new XNI2DTM(this, source, documentID, whiteSpaceFilter,
  -                              xstringFactory, doIndexing);
  +                              xstringFactory, doIndexing,false);
           addDTM(dtm, dtmPos, 0);
   
           {
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.29.2.1.2.2 +6 -2      
xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/SAX2DTM.java
  
  Index: SAX2DTM.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/SAX2DTM.java,v
  retrieving revision 1.29.2.1.2.1
  retrieving revision 1.29.2.1.2.2
  diff -u -r1.29.2.1.2.1 -r1.29.2.1.2.2
  --- SAX2DTM.java      22 Aug 2002 20:03:01 -0000      1.29.2.1.2.1
  +++ SAX2DTM.java      26 Aug 2002 17:58:05 -0000      1.29.2.1.2.2
  @@ -1797,8 +1797,12 @@
        // We _shouldn't_ clear it in non-shared DTMs, since -- at this time,
        // anyway -- some of the start-up code assumes that getDocument() on the
        // source document will work after the doc is closed.
  -    if(!JJK_LEAVE_DOCUMENT_CURRENT && m_isSharedDTM)
  -         m_currentDocumentNode= NULL; // no longer open
  +     //
  +     // ISSUE: The validate operation needs to retrieve last doc written to
  +     // an RTF. We either need a separate call to obtain that, or we need to
  +     // remove this safety net. Gonk
  +    //if(!JJK_LEAVE_DOCUMENT_CURRENT && m_isSharedDTM)
  +     //   m_currentDocumentNode= NULL; // no longer open
            
       m_endDocumentOccured = true;
     }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.4.1.2.1 +46 -12    
xml-xalan/java/src/org/apache/xml/dtm/ref/xni2dtm/Attic/FuncValidate.java
  
  Index: FuncValidate.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/xni2dtm/Attic/FuncValidate.java,v
  retrieving revision 1.1.4.1
  retrieving revision 1.1.4.1.2.1
  diff -u -r1.1.4.1 -r1.1.4.1.2.1
  --- FuncValidate.java 14 Aug 2002 19:45:35 -0000      1.1.4.1
  +++ FuncValidate.java 26 Aug 2002 17:58:06 -0000      1.1.4.1.2.1
  @@ -17,9 +17,13 @@
    * 
    * %REVIEW% Current code validates only a single root element. If we want more,
    * we can do it but it'll take a bit more coding.
  + * 
  + * %BUG% Need to change this to write into the RTFDTM -- which should
  + * be an instance of XNI2DTM for this purpose -- rather than always
  + * instantiating a new DTM.
    * */
   public class FuncValidate {
  -     private static final boolean JJK_DISABLE_VALIDATOR=false; // debugging hook
  +     private static final boolean JJK_USE_RTFDTM=true; // validate into shared DTM
        private static final boolean JJK_DUMMY_CODE=true; // debugging hook
        
        
  @@ -85,9 +89,6 @@
                // those through a secondary channel, eg by turning them into custom
                // annotations until they get back to XNI.
                XNISource xsrc;
  -             if(JJK_DISABLE_VALIDATOR)
  -                     xsrc=new XNISource(d2x,null); // Test: Just flow thru
  -             else
                {
                        // ISSUE: Do we need to explicitly normalize namespaces?
                        
  @@ -172,14 +173,47 @@
                // as that thought might be -- the source DTM might be an RTF and
                // might Go Away. We probably _should_ make it an RTF DTM, but those
                // currently aren't supported for XNI.
  -             DTM newDTM=xctxt.getDTM(xsrc,
  -                     true, // unique
  -                     null, // whitespace filter
  -                     false, // incremental -- not supported at this writing
  -                     false // doIndexing -- open to debate
  -                     );
  -             
  -             return newDTM.getNode(newDTM.getDocument());
  +             if(!JJK_USE_RTFDTM)
  +             {
  +                     DTM newDTM=xctxt.getDTM(xsrc,
  +                             true, // unique
  +                             null, // whitespace filter
  +                             false, // incremental -- not supported at this writing
  +                             false // doIndexing -- open to debate
  +                             );
  +                     return newDTM.getNode(newDTM.getDocument());
  +             }
  +             else
  +             {
  +                     XNI2DTM dtm=(XNI2DTM)xctxt.getRTFDTM();
  +         xsrc.setDocumentHandler(dtm);
  +             xsrc.setErrorHandler(dtm);
  +            // XNI's document scanner does support incremental.
  +             // Would require yet another flavor of incremental-source to
  +         // glue it to our APIs. For now, just run it to completion.
  +             // MOVE THIS DOWN !!!!!
  +             // %REVIEW%
  +             
  +             try
  +         {
  +                 xsrc.reset();
  +                     xsrc.scanDocument(true);                        
  +             }
  +             catch (RuntimeException re)
  +         {
  +               throw re;
  +             }
  +         catch (Exception e)
  +             {
  +               throw new org.apache.xml.utils.WrappedRuntimeException(e);
  +         }
  +
  +                     // We need to retrieve this. Requires either removing our
  +                     // block-getDocument-in-shared-DTMs hook (giving up a safety 
net)
  +                     // or creating a separate retrieve-last-document-built call.
  +                     // See SAX2DTM.getDocument for discussion.          
  +                     return dtm.getNode(dtm.getDocument());
  +             }               
        }
   }
   
  
  
  
  1.2.4.1.2.5 +31 -26    
xml-xalan/java/src/org/apache/xml/dtm/ref/xni2dtm/Attic/XNI2DTM.java
  
  Index: XNI2DTM.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/xni2dtm/Attic/XNI2DTM.java,v
  retrieving revision 1.2.4.1.2.4
  retrieving revision 1.2.4.1.2.5
  diff -u -r1.2.4.1.2.4 -r1.2.4.1.2.5
  --- XNI2DTM.java      23 Aug 2002 14:36:35 -0000      1.2.4.1.2.4
  +++ XNI2DTM.java      26 Aug 2002 17:58:06 -0000      1.2.4.1.2.5
  @@ -155,16 +155,18 @@
      * @param xstringfactory XMLString factory for creating character content.
      * @param doIndexing true if the caller considers it worth it to use 
      *                   indexing schemes.
  +   * @param shared true if the caller may want to write multiple documents
  +   *    into this DTM and prune them away again. This should be set true
  +   *    only for Result-Tree-Fragment/Temporary-Tree DTMs.
      */
     public XNI2DTM(DTMManager mgr, Source source, int dtmIdentity,
                    DTMWSFilter whiteSpaceFilter,
                    org.apache.xml.utils.XMLStringFactory xstringfactory,
  -                 boolean doIndexing)
  +                 boolean doIndexing, boolean shared)
     {
       super(mgr, source, dtmIdentity, whiteSpaceFilter, 
  -          xstringfactory, doIndexing);
  +          xstringfactory, doIndexing, shared);
     }
  -
     
     /** ADDED for XNI, SUPPLEMENTS non-schema-typed addNode:
      * 
  @@ -401,7 +403,6 @@
      */
     public void clearCoRoutine(boolean callDoTerminate)
     {
  -
       if (null != m_incrementalXNISource)
       {
         if (callDoTerminate)
  @@ -409,6 +410,8 @@
   
         m_incrementalXNISource = null;
       }
  +    else
  +     super.clearCoRoutine(callDoTerminate);
     }
   
     /** ADDED FOR XNI, REPLACES setIncrementalSAXSource:
  @@ -448,7 +451,7 @@
      */
     public boolean needsTwoThreads()
     {
  -    return null != m_incrementalXNISource;
  +    return null != m_incrementalXNISource || super.needsTwoThreads();
     }
   
     /** OVERRIDDEN FOR XNI:
  @@ -465,29 +468,31 @@
     protected boolean nextNode()
     {
       if (null == m_incrementalXNISource)
  -      return false;
  -
  -    if (m_endDocumentOccured)
  -    {
  -      clearCoRoutine();
  -      return false;
  -    }
  -
  -    try
  +     return super.nextNode();
  +    else
       {
  -      boolean gotMore = m_incrementalXNISource.parse(false);
  -      if (!gotMore)
  -      {
  -        // EOF reached without satisfying the request
  -        clearCoRoutine();  // Drop connection, stop trying
  -        // %TBD% deregister as its listener?
  -      }
  -      return gotMore;
  +         if (m_endDocumentOccured)
  +     {
  +           clearCoRoutine();
  +       return false;
  +         }
  +
  +         try
  +     {
  +           boolean gotMore = m_incrementalXNISource.parse(false);
  +       if (!gotMore)
  +           {
  +         // EOF reached without satisfying the request
  +             clearCoRoutine();  // Drop connection, stop trying
  +         // %TBD% deregister as its listener?
  +           }
  +       return gotMore;
  +         }
  +     catch(RuntimeException e)
  +         { throw e; }
  +     catch(Exception e)
  +         { throw new WrappedRuntimeException(e); }
       }
  -    catch(RuntimeException e)
  -    {      throw e;    }
  -    catch(Exception e)
  -    {      throw new WrappedRuntimeException(e);    }
     }
     
     ////////////////////////////////////////////////////////////////////
  
  
  

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

Reply via email to