You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by mh...@apache.org on 2008/08/07 06:02:02 UTC

svn commit: r683500 - /mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java

Author: mheath
Date: Wed Aug  6 21:02:01 2008
New Revision: 683500

URL: http://svn.apache.org/viewvc?rev=683500&view=rev
Log:
Fixed DIRMINA-614 - Make TextLineDecoder extensible

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java?rev=683500&r1=683499&r2=683500&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java Wed Aug  6 21:02:01 2008
@@ -56,7 +56,7 @@
     public TextLineDecoder() {
         this(LineDelimiter.AUTO);
     }
-    
+
     /**
      * Creates a new instance with the current default {@link Charset}
      * and the specified <tt>delimiter</tt>.
@@ -64,7 +64,7 @@
     public TextLineDecoder(String delimiter) {
         this(new LineDelimiter(delimiter));
     }
-    
+
     /**
      * Creates a new instance with the current default {@link Charset}
      * and the specified <tt>delimiter</tt>.
@@ -80,7 +80,7 @@
     public TextLineDecoder(Charset charset) {
         this(charset, LineDelimiter.AUTO);
     }
-    
+
     /**
      * Creates a new instance with the spcified <tt>charset</tt>
      * and the specified <tt>delimiter</tt>.
@@ -88,7 +88,7 @@
     public TextLineDecoder(Charset charset, String delimiter) {
         this(charset, new LineDelimiter(delimiter));
     }
-    
+
     /**
      * Creates a new instance with the specified <tt>charset</tt>
      * and the specified <tt>delimiter</tt>.
@@ -135,9 +135,9 @@
         Context ctx = getContext(session);
 
         if (LineDelimiter.AUTO.equals(delimiter)) {
-            decodeAuto(ctx, in, out);
+            decodeAuto(ctx, session, in, out);
         } else {
-            decodeNormal(ctx, in, out);
+            decodeNormal(ctx, session, in, out);
         }
     }
 
@@ -162,7 +162,7 @@
         }
     }
 
-    private void decodeAuto(Context ctx, IoBuffer in, ProtocolDecoderOutput out)
+    private void decodeAuto(Context ctx, IoSession session, IoBuffer in, ProtocolDecoderOutput out)
             throws CharacterCodingException, ProtocolDecoderException {
 
         int matchCount = ctx.getMatchCount();
@@ -204,7 +204,7 @@
                     buf.flip();
                     buf.limit(buf.limit() - matchCount);
                     try {
-                        out.write(buf.getString(ctx.getDecoder()));
+                    	writeText(session, buf.getString(ctx.getDecoder()), out);
                     } finally {
                         buf.clear();
                     }
@@ -227,7 +227,7 @@
         ctx.setMatchCount(matchCount);
     }
 
-    private void decodeNormal(Context ctx, IoBuffer in, ProtocolDecoderOutput out)
+    private void decodeNormal(Context ctx, IoSession session, IoBuffer in, ProtocolDecoderOutput out)
             throws CharacterCodingException, ProtocolDecoderException {
 
         int matchCount = ctx.getMatchCount();
@@ -262,7 +262,7 @@
                         buf.flip();
                         buf.limit(buf.limit() - matchCount);
                         try {
-                            out.write(buf.getString(ctx.getDecoder()));
+                        	writeText(session, buf.getString(ctx.getDecoder()), out);
                         } finally {
                             buf.clear();
                         }
@@ -290,6 +290,19 @@
         ctx.setMatchCount(matchCount);
     }
 
+    /**
+     * By default, this method propagates the decoded line of text to
+     * {@code ProtocolDecoderOutput#write(Object)}.  You may override this method to modify
+     * the default behavior.
+     *
+     * @param session  the {@code IoSession} the received data.
+     * @param text  the decoded text
+     * @param out  the upstream {@code ProtocolDecoderOutput}.
+     */
+    protected void writeText(IoSession session, String text, ProtocolDecoderOutput out) {
+    	out.write(text);
+    }
+
     private class Context {
         private final CharsetDecoder decoder;
         private final IoBuffer buf;