You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by th...@apache.org on 2012/01/02 00:41:10 UTC

svn commit: r1226316 - in /cocoon/cocoon3/trunk/cocoon-sax/src: main/java/org/apache/cocoon/sax/component/TextSerializer.java test/java/org/apache/cocoon/sax/component/TextSerializerTest.java

Author: thorsten
Date: Sun Jan  1 23:41:08 2012
New Revision: 1226316

URL: http://svn.apache.org/viewvc?rev=1226316&view=rev
Log:
Adding a generic text serializer extening the xml based

Added:
    cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/TextSerializer.java   (with props)
    cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/TextSerializerTest.java   (with props)

Added: cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/TextSerializer.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/TextSerializer.java?rev=1226316&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/TextSerializer.java (added)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/TextSerializer.java Sun Jan  1 23:41:08 2012
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cocoon.sax.component;
+
+import org.apache.cocoon.sax.util.XMLUtils;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+
+/**
+ * Converts XML into plain text. It omits all XML tags and writes only character
+ * events to the output. Input document must have at least one element - root
+ * element - which should wrap all the text inside it.
+ * 
+ */
+public class TextSerializer extends XMLSerializer {
+
+    /*
+     * Set to true after first XML element
+     */
+    private boolean hasRootElement;
+
+    private boolean hadNoRootElement;
+
+    private final static String ENCODING = "UTF-8";
+
+    private static final String TXT = "text";
+
+    public TextSerializer() {
+        super();
+        super.setOmitXmlDeclaration(true);
+        this.hasRootElement = false;
+    }
+    @Override
+    public void setDocumentLocator (Locator locator) { 
+        // nothing
+      }
+    @Override
+    public void processingInstruction (String target, String data)
+    throws SAXException{
+        // nothing
+    }
+
+
+    @Override
+    public void startElement(String uri, String loc, String raw, Attributes a)
+            throws SAXException {
+        this.hasRootElement = true;
+    }
+
+    @Override
+    public void endElement(final String uri, final String name, final String raw)
+            throws SAXException {
+        // nothing
+    }
+
+    @Override
+    public void endDocument() throws SAXException {
+        if (this.hadNoRootElement) {
+            super.endElement("", "text", "text");
+        }
+        super.endDocument();
+    }
+
+    /**
+     * @throws SAXException
+     *             if text is encountered before root element.
+     */
+    @Override
+    public void characters(char c[], int start, int len) throws SAXException {
+        if (!this.hasRootElement) {
+            this.hasRootElement = this.hadNoRootElement = true;
+            // getLogger().warn("Encountered text before root element. Creating <text> wrapper element.");
+            super.startElement("", "text", "text", XMLUtils.EMPTY_ATTRIBUTES);
+        }
+        super.characters(c, start, len);
+    }
+
+    @Override
+    public void recycle() {
+        this.hasRootElement = false;
+        super.recycle();
+    }
+
+    public static TextSerializer createPlainSerializer() {
+        TextSerializer serializer = null;
+        serializer = new TextSerializer();
+        serializer.setContentType("text/plain;charset=utf-8");
+        serializer.setEncoding(ENCODING);
+        serializer.setMethod(TXT);
+        return serializer;
+    }
+}

Propchange: cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/TextSerializer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/TextSerializerTest.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/TextSerializerTest.java?rev=1226316&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/TextSerializerTest.java (added)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/TextSerializerTest.java Sun Jan  1 23:41:08 2012
@@ -0,0 +1,27 @@
+package org.apache.cocoon.sax.component;
+
+import java.io.ByteArrayOutputStream;
+
+import org.junit.Test;
+
+import static org.apache.cocoon.pipeline.builder.PipelineBuilder.*;
+import static org.junit.Assert.*;
+
+public class TextSerializerTest {
+    
+    @Test
+    public void functional() throws Exception{
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        
+        newNonCachingPipeline()
+        .setStarter(new XMLGenerator("<x><y>1</y><z>2</z></x>"))
+        .setFinisher(new TextSerializer())
+        .withEmptyConfiguration()
+        .setup(baos)
+        .execute();
+        
+        String data = new String(baos.toByteArray());
+        assertEquals("12",data);
+    }
+
+}

Propchange: cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/TextSerializerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native