[ 
https://issues.apache.org/jira/browse/COCOON3-77?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13144969#comment-13144969
 ] 

Andre Juffer commented on COCOON3-77:
-------------------------------------

# This patch file was generated by NetBeans IDE
# It uses platform neutral UTF-8 encoding and \n newlines.
--- Locally New
+++ Locally New
@@ -0,0 +1,235 @@
+/*
+ * 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.components.serializers.util;
+
+import org.apache.cocoon.components.serializers.encoding.TextEncoder;
+import org.apache.cocoon.components.serializers.encoding.XMLEncoder;
+
+import org.xml.sax.SAXException;
+import org.xml.sax.Attributes;
+
+/**
+ * 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.
+ * 
+ * @author André Juffer, Triacle Biocomputing
+ */
+public class TextSerializer extends XMLSerializer {
+    
+    private static final XMLEncoder XML_ENCODER = new TextEncoder();
+    
+    /*
+     * Set to true after first XML element
+     */
+    private boolean hasRootElement;
+    
+    private final static String CHARSET = "UTF-8";
+    
+    public TextSerializer()
+        throws Exception
+    {
+        super(XML_ENCODER);
+        super.setEncoding(CHARSET);        
+        this.hasRootElement = false;
+    }    
+    
+    @Override
+    public void head()
+    {
+        // Do nothing.
+    }
+    
+    @Override
+    public void startElement(String uri,
+                             String loc,
+                             String raw,
+                             Attributes a)
+            throws SAXException
+    {
+        this.hasRootElement = true;
+    }
+    
+    /**
+     * @throws SAXException if text is encountered before root element.
+     */
+    @Override
+    public void characters(char c[], int start, int len)
+            throws SAXException 
+    {
+       if ( !this.hasRootElement )
+            throw new SAXException("Encountered text before root element");
+       super.characters(c, start, len);
+    }
+    
+    @Override
+    public void recycle()
+    {
+        this.hasRootElement = false;
+        super.recycle();
+    }
+    
+    /**
+     * @return text/plain; charset= followed by character set, by default UTF-8
+     */
+    @Override
+    public String getMimeType()
+    {
+        return("text/plain; charset=" + this.charset.getName());
+    }
+    
+    @Override
+    public void startElementImpl(String uri,
+                                 String local,
+                                 String qual,
+                                 String namespaces[][],
+                                 String attributes[][])
+        throws SAXException
+    {
+        // Do nothing.
+    }
+    
+    @Override
+    public void endElementImpl(String uri,
+                               String local,
+                               String qual)
+        throws SAXException
+    {
+        // Do nothing.
+    }
+    
+    
+    @Override
+    public void charactersImpl(char[] chars,
+                               int start,
+                               int len)
+        throws SAXException
+    {
+        super.encode(chars, start, len);
+    }
+    
+    
+    @Override
+    public void body(String uri,
+                     String local,
+                     String qual)
+    {
+        // Do nothing.
+    }
+
+    @Override
+    public void skippedEntity(String name)
+        throws SAXException
+    {
+        // Do nothing.
+    }
+    
+    @Override
+    public void processingInstruction(String target, String data)
+        throws SAXException
+    {        
+        // Do nothing.
+    }
+    
+    @Override
+    public void ignorableWhitespace(char[] ch,
+                                    int start,
+                                    int length)
+        throws SAXException    
+    {        
+        // Do nothing.
+    }
+    
+    @Override
+    public void comment(char[] ch,
+                        int start,
+                        int length)
+        throws SAXException
+    {        
+        // Do nothing.
+    }
+    
+    @Override
+    public void startCDATA()
+        throws SAXException
+    {
+        // Do nothing.
+    }
+    
+    @Override
+    public void endCDATA()
+        throws SAXException
+    {
+        // Do nothing.
+    }
+    
+    @Override
+    public void startEntity(String name)
+        throws SAXException
+    {
+        // Do nothing.
+    }
+    
+    @Override
+    public void endEntity(String name)
+        throws SAXException
+    {
+        // Do nothing.
+    }
+    
+    @Override
+    public void startDTD(String name,
+                         String publicId,
+                         String systemId)
+        throws SAXException
+    {
+        // Do nothing.
+    }
+    
+    @Override
+    public void endDTD()
+        throws SAXException
+    {
+        // Do nothing.
+    }
+    
+    @Override
+    public String toString()
+    {
+        String newline = System.getProperty("line.separator");
+        
+        StringBuilder s = new StringBuilder(this.getClass().getName() + " : [" 
+ newline);
+        if ( this.charset != null )
+            s.append("charset - 
").append(this.charset.toString()).append(newline);
+        if ( this.doctype != null )
+            s.append("doctype - 
").append(this.doctype.toString()).append(newline);
+        s.append("hasRootElement - 
").append(this.hasRootElement).append(newline);
+        s.append("indentPerLevel - 
").append(this.indentPerLevel).append(newline);
+        if ( this.namespaces != null )
+            s.append("namespaces - 
").append(this.namespaces.toString()).append(newline);
+        if ( this.request != null )
+            s.append("request - 
").append(this.request.toString()).append(newline);
+        s.append("mime-type - ").append(this.getMimeType()).append(newline);
+        s.append("]").append(newline);
+        
+        return s.toString();
+    }
+}

                
> Text and JSON serializers
> -------------------------
>
>                 Key: COCOON3-77
>                 URL: https://issues.apache.org/jira/browse/COCOON3-77
>             Project: Cocoon 3
>          Issue Type: Improvement
>          Components: cocoon-optional
>    Affects Versions: 3.0.0-alpha-3
>            Reporter: Andre Juffer
>            Priority: Minor
>         Attachments: EncodingJsonSerializer.java, 
> EncodingTextSerializer.java, JsonSerializer.java, TextEncoder.java, 
> TextSerializer.java, pom.xml, tribc-cocoon-3.xml
>
>
> Serveral classes have been created for serializing text and JSON in the 
> sitemap. The JsonSerializer also checks whether the JSON text actually is 
> valid. The organization of the classes follows the encoding serializers (such 
> as the EncodingHTMLSerializer).

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to