mmidy       01/04/09 14:06:26

  Modified:    java/src/org/apache/xalan/transformer
                        TransformSnapshotImpl.java TransformerImpl.java
  Log:
  Additional support for tooling. Allow tools to take a snapshot of context and 
restart execution at that point.
  
  Revision  Changes    Path
  1.2       +27 -23    
xml-xalan/java/src/org/apache/xalan/transformer/TransformSnapshotImpl.java
  
  Index: TransformSnapshotImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/TransformSnapshotImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TransformSnapshotImpl.java        2001/03/28 04:42:01     1.1
  +++ TransformSnapshotImpl.java        2001/04/09 21:06:25     1.2
  @@ -4,6 +4,7 @@
   import org.apache.xpath.VariableStack;
   import org.apache.xml.utils.NodeVector;
   import org.apache.xml.utils.BoolStack;
  +import org.apache.xalan.serialize.SerializerToXML;
   import java.util.Stack;
   import org.xml.sax.helpers.NamespaceSupport;
   import java.util.Enumeration;
  @@ -86,8 +87,8 @@
   
     /** Queued start element          */
     QueuedStartElement m_startElement;
  -  
  -  TransformSnapshotImpl(TransformerImpl transformer)
  +     
  +     TransformSnapshotImpl(TransformerImpl transformer)
     {
       try
       {
  @@ -97,7 +98,7 @@
         
         m_startElement = (QueuedStartElement)rtf.m_startElement.clone();
         m_startDoc = (QueuedStartDocument)rtf.m_startDoc.clone();
  -      m_eventCount = rtf.m_eventCount;
  +                     m_eventCount = rtf.m_eventCount;
               
         // yuck.  No clone. Hope this is good enough.
         m_nsSupport = new NamespaceSupport();
  @@ -122,8 +123,9 @@
         m_currentTemplateRuleIsNull = 
(BoolStack)transformer.m_currentTemplateRuleIsNull.clone();
         m_currentTemplateElements = 
(NodeVector)transformer.m_currentTemplateElements.clone();
         m_currentMatchTemplates = 
(NodeVector)transformer.m_currentMatchTemplates.clone();
  -      m_countersTable = (CountersTable)transformer.m_countersTable.clone();
  -      m_attrSetStack = (Stack)transformer.m_attrSetStack.clone();
  +      m_countersTable = 
(CountersTable)transformer.getCountersTable().clone();
  +                     if (transformer.m_attrSetStack  != null)
  +                             m_attrSetStack = 
(Stack)transformer.m_attrSetStack.clone();
       }
       catch(CloneNotSupportedException cnse)
       {
  @@ -138,23 +140,24 @@
         // Are all these clones deep enough?
   
         ResultTreeHandler rtf = transformer.getResultTreeHandler();
  -      
  -      rtf.m_startElement = (QueuedStartElement)m_startElement.clone();
  -      rtf.m_startDoc = (QueuedStartDocument)m_startDoc.clone();
  -      rtf.m_eventCount = m_eventCount;
  -      
  -      // yuck.  No clone. Hope this is good enough.
  -      rtf.m_nsSupport = new NamespaceSupport();
  -      Enumeration prefixes = m_nsSupport.getPrefixes();
  -      while(prefixes.hasMoreElements())
  -      {
  -        String prefix = (String)prefixes.nextElement();
  -        String uri = m_nsSupport.getURI(prefix);
  -        rtf.m_nsSupport.declarePrefix(prefix, uri);
  -      }
  -      
  -      rtf.m_nsContextPushed = m_nsContextPushed;
  -      
  +                     if (rtf != null)
  +                     {
  +                             rtf.m_startElement = 
(QueuedStartElement)m_startElement.clone();
  +                             rtf.m_startDoc = 
(QueuedStartDocument)m_startDoc.clone();
  +                             rtf.m_eventCount = 1; //1 for start document 
event! m_eventCount;
  +                             
  +                             // yuck.  No clone. Hope this is good enough.
  +                             rtf.m_nsSupport = new NamespaceSupport();
  +                             Enumeration prefixes = 
m_nsSupport.getPrefixes();
  +                             while(prefixes.hasMoreElements())
  +                             {
  +                                     String prefix = 
(String)prefixes.nextElement();
  +                                     String uri = m_nsSupport.getURI(prefix);
  +                                     rtf.m_nsSupport.declarePrefix(prefix, 
uri);
  +                             }
  +                             
  +                             rtf.m_nsContextPushed = m_nsContextPushed;
  +                     }
         XPathContext xpc = transformer.getXPathContext();
         
         xpc.setVarStack((VariableStack)m_variableStacks.clone());
  @@ -167,7 +170,8 @@
         transformer.m_currentTemplateElements = 
(NodeVector)m_currentTemplateElements.clone();
         transformer.m_currentMatchTemplates = 
(NodeVector)m_currentMatchTemplates.clone();
         transformer.m_countersTable = (CountersTable)m_countersTable.clone();
  -      transformer.m_attrSetStack = (Stack)m_attrSetStack.clone();
  +                     if (m_attrSetStack  != null)
  +                             transformer.m_attrSetStack = 
(Stack)m_attrSetStack.clone();
       }
       catch(CloneNotSupportedException cnse)
       {
  
  
  
  1.92      +26 -4     
xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java
  
  Index: TransformerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java,v
  retrieving revision 1.91
  retrieving revision 1.92
  diff -u -r1.91 -r1.92
  --- TransformerImpl.java      2001/04/02 10:24:17     1.91
  +++ TransformerImpl.java      2001/04/09 21:06:26     1.92
  @@ -356,7 +356,14 @@
     private boolean m_isTransformDone = false;
     
     private boolean m_hasBeenReset = false;
  -  
  +     private boolean m_shouldReset = true;
  +
  +     public void setShouldReset(boolean shouldReset)
  +     {
  +             m_shouldReset = shouldReset;
  +     }
  +     
  +     
     //==========================================================
     // SECTION: Constructors
     //==========================================================
  @@ -380,7 +387,7 @@
      */
     public void reset()
     {
  -    if(!m_hasBeenReset)
  +    if(!m_hasBeenReset && m_shouldReset)
       {
         m_hasBeenReset = true;
         
  @@ -504,7 +511,7 @@
       if(null == xmlSource)
       {
         m_errorHandler.fatalError(new TransformerException("Can't transform a 
Source of type "+
  -        source.getClass().getName()+"!"));
  +                                                                             
                                                                                
                                                                 ((source == 
null)? "null" : source.getClass().getName())+"!"));
       }
       
       if (null != xmlSource.getSystemId())
  @@ -3006,8 +3013,23 @@
      * from the snapshot point.
      */
     public void executeFromSnapshot(TransformSnapshot ts)
  +             throws TransformerException
  +  {
  +    ElemTemplateElement template = getMatchedTemplate();
  +             Node child = getMatchedNode();
  +             pushElemTemplateElement(template); //needed??
  +    m_xcontext.pushCurrentNode(child); //needed??
  +             this.executeChildTemplates(template, child, null, true); // 
getResultTreeHandler());
  +  }
  +     
  +     /**
  +   * This will execute the following XSLT instructions
  +   * from the snapshot point.
  +   */
  +  public void resetToStylesheet(TransformSnapshot ts)
  +             //throws TransformerException
     {
  -    ((TransformSnapshotImpl)ts).apply(this);
  +    ((TransformSnapshotImpl)ts).apply(this);         
     }
     
     public void stopTransformation()
  
  
  

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

Reply via email to