You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2008/11/12 14:31:58 UTC

svn commit: r713363 - /mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java

Author: elecharny
Date: Wed Nov 12 05:31:57 2008
New Revision: 713363

URL: http://svn.apache.org/viewvc?rev=713363&view=rev
Log:
More cleaning :
- removed a useless check
- moved all the helper methods to the helper section
- added a method to get the ProtocolDecoderOutput from the session, if it exists, or create it and stores it into the session
- added some javadoc

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

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=713363&r1=713362&r2=713363&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Wed Nov 12 05:31:57 2008
@@ -55,6 +55,7 @@
     private final AttributeKey ENCODER = new AttributeKey(getClass(), "encoder");
     private final AttributeKey DECODER = new AttributeKey(getClass(), "decoder");
     private final AttributeKey DECODER_OUT = new AttributeKey(getClass(), "decoderOut");
+    private final AttributeKey ENCODER_OUT = new AttributeKey(getClass(), "encoderOut");
     
     /** The factory responsible for creating the encoder and decoder */
     private final ProtocolCodecFactory factory;
@@ -168,16 +169,6 @@
         return (ProtocolEncoder) session.getAttribute(ENCODER);
     }
 
-    /**
-     * Get the decoder instance from a given session.
-     *
-     * @param session The associated session we will get the decoder from
-     * @return The decoder instance
-     */
-    public ProtocolDecoder getDecoder(IoSession session) {
-        return (ProtocolDecoder) session.getAttribute(DECODER);
-    }
-
     @Override
     public void onPreAdd(IoFilterChain parent, String name,
             NextFilter nextFilter) throws Exception {
@@ -298,39 +289,15 @@
         // Get the encoder in the session
         ProtocolEncoder encoder = getEncoder(session);
 
-        if ( encoder == null) {
-            // The encoder must not be null. It's null if
-            // the sessionCreated message has not be called, for
-            // instance if the filter has been added after the 
-            // first session is created.
-            ProtocolDecoderException pde = new ProtocolDecoderException(
-                "Cannot encode if the encoder is null. Add the filter in the chain" +
-                "before the first session is created" ); 
-            nextFilter.exceptionCaught(session, pde);
-            return;
-        }
-        
-        ProtocolEncoderOutputImpl encoderOut = getEncoderOut(session,
+        ProtocolEncoderOutput encoderOut = getEncoderOut(session,
                 nextFilter, writeRequest);
 
-        if ( encoderOut == null) {
-            // The encoder must not be null. It's null if
-            // the sessionCreated message has not be called, for
-            // instance if the filter has been added after the 
-            // first session is created.
-            ProtocolDecoderException pde = new ProtocolDecoderException(
-                "Cannot encode if the encoder is null. Add the filter in the chain" +
-                "before the first session is created" ); 
-            nextFilter.exceptionCaught(session, pde);
-            return;
-        }
-        
         try {
             // Now we can try to encode the response
             encoder.encode(session, message, encoderOut);
             
             // Send it directly
-            encoderOut.flushWithoutFuture();
+            ((ProtocolEncoderOutputImpl)encoderOut).flushWithoutFuture();
             
             // Call the next filter
             nextFilter.filterWrite(session, new MessageWriteRequest(
@@ -396,11 +363,6 @@
         nextFilter.sessionClosed(session);
     }
 
-    private ProtocolEncoderOutputImpl getEncoderOut(IoSession session,
-            NextFilter nextFilter, WriteRequest writeRequest) {
-        return new ProtocolEncoderOutputImpl(session, nextFilter, writeRequest);
-    }
-
     private static class EncodedWriteRequest extends DefaultWriteRequest {
         private EncodedWriteRequest(Object encodedMessage,
                 WriteFuture future, SocketAddress destination) {
@@ -495,23 +457,6 @@
     
     //----------- Helper methods ---------------------------------------------
     /**
-     * Return a reference to the decoder callback. If it's not already created
-     * and stored into the session, we create a new instance.
-     */
-    private ProtocolDecoderOutput getDecoderOut(IoSession session,
-            NextFilter nextFilter) {
-        ProtocolDecoderOutput out = (ProtocolDecoderOutput) session.getAttribute(DECODER_OUT);
-        
-        if (out == null) {
-            // Create a new instance, and stores it into the session
-            out = new ProtocolDecoderOutputImpl();
-            session.setAttribute(DECODER_OUT, out);
-        }
-        
-        return out;
-    }
-
-    /**
      * Initialize the encoder and the decoder, storing them in the 
      * session attributes.
      */
@@ -560,6 +505,16 @@
     }
 
     /**
+     * Get the decoder instance from a given session.
+     *
+     * @param session The associated session we will get the decoder from
+     * @return The decoder instance
+     */
+    private ProtocolDecoder getDecoder(IoSession session) {
+        return (ProtocolDecoder) session.getAttribute(DECODER);
+    }
+
+    /**
      * dispose the decoder, removing its instance from the
      * session's attributes, and calling the associated
      * dispose method.
@@ -580,6 +535,36 @@
     }
 
     /**
+     * Return a reference to the decoder callback. If it's not already created
+     * and stored into the session, we create a new instance.
+     */
+    private ProtocolDecoderOutput getDecoderOut(IoSession session,
+            NextFilter nextFilter) {
+        ProtocolDecoderOutput out = (ProtocolDecoderOutput) session.getAttribute(DECODER_OUT);
+        
+        if (out == null) {
+            // Create a new instance, and stores it into the session
+            out = new ProtocolDecoderOutputImpl();
+            session.setAttribute(DECODER_OUT, out);
+        }
+        
+        return out;
+    }
+
+    private ProtocolEncoderOutput getEncoderOut(IoSession session,
+        NextFilter nextFilter, WriteRequest writeRequest) {
+        ProtocolEncoderOutput out = (ProtocolEncoderOutput) session.getAttribute(ENCODER_OUT);
+        
+        if (out == null) {
+            // Create a new instance, and stores it into the session
+            out = new ProtocolEncoderOutputImpl(session, nextFilter, writeRequest);
+            session.setAttribute(ENCODER_OUT, out);
+        }
+        
+        return out;
+    }
+
+    /**
      * Remove the decoder callback from the session's attributes.
      */
     private void disposeDecoderOut(IoSession session) {