You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by ti...@apache.org on 2005/01/13 20:45:31 UTC

svn commit: r125092 - /cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java /cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java

Author: tim
Date: Thu Jan 13 11:45:29 2005
New Revision: 125092

URL: http://svn.apache.org/viewcvs?view=rev&rev=125092
Log:
Add support framework for tracking source locations for the forms transformer and do minor code formatting.
Modified:
   cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java
   cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java

Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java?view=diff&rev=125092&p1=cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java&r1=125091&p2=cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java&r2=125092
==============================================================================
--- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java	(original)
+++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java	Thu Jan 13 11:45:29 2005
@@ -17,6 +17,7 @@
 
 import java.util.LinkedList;
 
+import org.apache.avalon.framework.CascadingRuntimeException;
 import org.apache.cocoon.xml.AbstractXMLPipe;
 import org.apache.cocoon.xml.SaxBuffer;
 import org.apache.cocoon.xml.XMLConsumer;
@@ -26,6 +27,7 @@
 import org.xml.sax.SAXException;
 import org.xml.sax.ext.LexicalHandler;
 import org.xml.sax.helpers.AttributesImpl;
+import org.xml.sax.helpers.LocatorImpl;
 
 // TODO: Reduce the Element creation and deletion churn by providing startElement
 // and endElement methods which do not create or use Elements on the stack.
@@ -170,6 +172,33 @@
     }
 
     protected class Output extends AbstractXMLPipe {
+
+        protected class Buffer extends SaxBuffer {
+            LocatorImpl myLocator = new LocatorImpl();
+
+            public void setDocumentLocator(Locator locator) {
+                super.setDocumentLocator(locator);
+                if (locator != null) {
+                    try {
+                        myLocator.setPublicId(locator.getPublicId());
+                        myLocator.setSystemId(locator.getSystemId());
+                        myLocator.setLineNumber(locator.getLineNumber());
+                        myLocator.setColumnNumber(locator.getColumnNumber());
+                    } catch (Exception e) {
+                         throw new CascadingRuntimeException("Error while handling locator", e);
+                    }
+                }
+            }
+            public void toSAX(ContentHandler contentHandler) throws SAXException {
+                if (locators == null)
+                    locators = new LinkedList();
+                locators.addFirst(EffectPipe.this.locator);
+                EffectPipe.this.locator = myLocator;
+                super.toSAX(contentHandler);
+                EffectPipe.this.locator = (Locator)locators.removeFirst();
+            }
+        }
+
         private LinkedList buffers = null;
         private SaxBuffer saxBuffer = null;
         private LinkedList elements  = null;
@@ -280,7 +309,8 @@
                 }
                 buffers.addFirst(saxBuffer);
             }
-            saxBuffer = new SaxBuffer();
+            saxBuffer = (SaxBuffer)new Buffer();
+            ((Buffer)saxBuffer).setDocumentLocator(locator);
         }
 
         protected void bufferFini() {
@@ -331,6 +361,7 @@
     protected LinkedList elements = null;
     protected Element input = null;
 
+    protected LinkedList locators = null;
     protected Locator locator = null;
     protected String name     = null;
     protected String publicId = null;
@@ -348,6 +379,7 @@
     public void init() {
         handlers = new LinkedList();
         elements = new LinkedList();
+        locators = new LinkedList();
         out = new Output();
     }
 
@@ -374,6 +406,8 @@
         super.recycle();
         handlers = null;
         elements = null;
+        locators = null;
+        locator = null;
         out = null;
     }
 
@@ -386,9 +420,13 @@
         }
     }
 
-    public void startDocument() throws SAXException { event = EVENT_START_DOCUMENT; handler = handler.process(); }
+    public void startDocument() throws SAXException {
+        event = EVENT_START_DOCUMENT; handler = handler.process();
+    }
 
-    public void endDocument() throws SAXException { event = EVENT_END_DOCUMENT; handler = handler.process(); }
+    public void endDocument() throws SAXException {
+        event = EVENT_END_DOCUMENT; handler = handler.process();
+    }
 
     public void startPrefixMapping(String prefix, String uri) throws SAXException {
         input = new Element(prefix, uri);

Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java?view=diff&rev=125092&p1=cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java&r1=125091&p2=cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java&r2=125092
==============================================================================
--- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java	(original)
+++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java	Thu Jan 13 11:45:29 2005
@@ -38,6 +38,7 @@
 import org.xml.sax.SAXException;
 import org.xml.sax.ext.LexicalHandler;
 import org.xml.sax.helpers.AttributesImpl;
+import org.xml.sax.Locator;
 
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -169,6 +170,15 @@
         contextWidgets = new LinkedList();
         chooseWidgets = new LinkedList();
         classes = new HashMap();
+    protected String getLocation() {
+        String location = null;
+        if (locator != null) {
+            location = " (" + locator.getSystemId() + ":"
+            + locator.getLineNumber() + ":" + locator.getColumnNumber() + ")";
+        } else {
+            location = "unknown";
+        }
+        return location;
     }
 
     protected String getWidgetId(Attributes attributes) throws SAXException {
@@ -259,6 +269,7 @@
         public Handler process() throws SAXException {
             switch (event) {
             case EVENT_SET_DOCUMENT_LOCATOR:
+                out.copy();
                 return this;
             case EVENT_START_PREFIX_MAPPING:
                 if(Constants.TEMPLATE_NS.equals(input.uri)) {
@@ -276,7 +287,7 @@
                         return formHandler;
                     } else {
                         throwSAXException("CForms template \"" + input.loc +
-                                "\" not permitted outside \"form-template\"");
+                                "\" not permitted outside \"form-template\" (" + getLocation() + ")");
                     }
                 } else {
                     // Pass through all others.