Javadoc
This commit is contained in:
parent
d784a68478
commit
72f1162729
@ -42,6 +42,8 @@ import org.jboss.netty.channel.ExceptionEvent;
|
|||||||
import org.jboss.netty.channel.MessageEvent;
|
import org.jboss.netty.channel.MessageEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* A skeletal {@link CodecEmbedder} implementation.
|
||||||
|
*
|
||||||
* @author The Netty Project (netty-dev@lists.jboss.org)
|
* @author The Netty Project (netty-dev@lists.jboss.org)
|
||||||
* @author Trustin Lee (tlee@redhat.com)
|
* @author Trustin Lee (tlee@redhat.com)
|
||||||
* @version $Rev$, $Date$
|
* @version $Rev$, $Date$
|
||||||
@ -54,6 +56,10 @@ public abstract class AbstractCodecEmbedder<T> implements CodecEmbedder<T> {
|
|||||||
|
|
||||||
final Queue<Object> productQueue = new LinkedList<Object>();
|
final Queue<Object> productQueue = new LinkedList<Object>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new embedder whose pipeline is composed of the specified
|
||||||
|
* handlers.
|
||||||
|
*/
|
||||||
protected AbstractCodecEmbedder(ChannelHandler... handlers) {
|
protected AbstractCodecEmbedder(ChannelHandler... handlers) {
|
||||||
pipeline = new EmbeddedChannelPipeline();
|
pipeline = new EmbeddedChannelPipeline();
|
||||||
configurePipeline(handlers);
|
configurePipeline(handlers);
|
||||||
@ -61,6 +67,13 @@ public abstract class AbstractCodecEmbedder<T> implements CodecEmbedder<T> {
|
|||||||
fireInitialEvents();
|
fireInitialEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new embedder whose pipeline is composed of the specified
|
||||||
|
* handlers.
|
||||||
|
*
|
||||||
|
* @param bufferFactory the {@link ChannelBufferFactory} to be used when
|
||||||
|
* creating a new buffer.
|
||||||
|
*/
|
||||||
protected AbstractCodecEmbedder(ChannelBufferFactory bufferFactory, ChannelHandler... handlers) {
|
protected AbstractCodecEmbedder(ChannelBufferFactory bufferFactory, ChannelHandler... handlers) {
|
||||||
this(handlers);
|
this(handlers);
|
||||||
getChannel().getConfig().setBufferFactory(bufferFactory);
|
getChannel().getConfig().setBufferFactory(bufferFactory);
|
||||||
@ -101,10 +114,18 @@ public abstract class AbstractCodecEmbedder<T> implements CodecEmbedder<T> {
|
|||||||
return !productQueue.isEmpty();
|
return !productQueue.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the virtual {@link Channel} which will be used as a mock
|
||||||
|
* during encoding and decoding.
|
||||||
|
*/
|
||||||
protected final Channel getChannel() {
|
protected final Channel getChannel() {
|
||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@code true} if and only if the produce queue is empty and
|
||||||
|
* therefore {@link #poll()} will return {@code null}.
|
||||||
|
*/
|
||||||
protected final boolean isEmpty() {
|
protected final boolean isEmpty() {
|
||||||
return productQueue.isEmpty();
|
return productQueue.isEmpty();
|
||||||
}
|
}
|
||||||
|
@ -22,15 +22,51 @@
|
|||||||
*/
|
*/
|
||||||
package org.jboss.netty.handler.codec.embedder;
|
package org.jboss.netty.handler.codec.embedder;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* A helper that wraps an encoder or a decoder (codec) so that they can be used
|
||||||
|
* without doing actual I/O in unit tests or higher level codecs. Please refer
|
||||||
|
* to {@link EncoderEmbedder} and {@link DecoderEmbedder} for more information.
|
||||||
|
*
|
||||||
* @author The Netty Project (netty-dev@lists.jboss.org)
|
* @author The Netty Project (netty-dev@lists.jboss.org)
|
||||||
* @author Trustin Lee (tlee@redhat.com)
|
* @author Trustin Lee (tlee@redhat.com)
|
||||||
* @version $Rev$, $Date$
|
* @version $Rev$, $Date$
|
||||||
*/
|
*/
|
||||||
public interface CodecEmbedder<T> {
|
public interface CodecEmbedder<T> {
|
||||||
|
/**
|
||||||
|
* Offers an input object to the pipeline of this embedder.
|
||||||
|
*
|
||||||
|
* @return {@code true} if and only if there is something to read in the
|
||||||
|
* product queue (see {@link #poll()} and {@link #peek()})
|
||||||
|
*/
|
||||||
boolean offer(Object input);
|
boolean offer(Object input);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signals the pipeline that the encoding or decoding has been finished and
|
||||||
|
* no more data will be offered.
|
||||||
|
*
|
||||||
|
* @return {@code true} if and only if there is something to read in the
|
||||||
|
* product queue (see {@link #poll()} and {@link #peek()})
|
||||||
|
*/
|
||||||
boolean finish();
|
boolean finish();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consumes an encoded or decoded output from the product queue. The output
|
||||||
|
* object is generated by the offered input objects.
|
||||||
|
*
|
||||||
|
* @return an encoded or decoded object.
|
||||||
|
* {@code null} if and only if there is no output object left in the
|
||||||
|
* product queue.
|
||||||
|
*/
|
||||||
T poll();
|
T poll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads an encoded or decoded output from the head of the product queue.
|
||||||
|
* The difference from {@link #poll()} is that it does not remove the
|
||||||
|
* retrieved object from the product queue.
|
||||||
|
*
|
||||||
|
* @return an encoded or decoded object.
|
||||||
|
* {@code null} if and only if there is no output object left in the
|
||||||
|
* product queue.
|
||||||
|
*/
|
||||||
T peek();
|
T peek();
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,9 @@
|
|||||||
package org.jboss.netty.handler.codec.embedder;
|
package org.jboss.netty.handler.codec.embedder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* A {@link RuntimeException} which is thrown when a {@link CodecEmbedder}
|
||||||
|
* failed to encode or decode the specified input.
|
||||||
|
*
|
||||||
* @author The Netty Project (netty-dev@lists.jboss.org)
|
* @author The Netty Project (netty-dev@lists.jboss.org)
|
||||||
* @author Trustin Lee (tlee@redhat.com)
|
* @author Trustin Lee (tlee@redhat.com)
|
||||||
* @version $Rev$, $Date$
|
* @version $Rev$, $Date$
|
||||||
@ -33,18 +36,30 @@ public class CodecEmbedderException extends RuntimeException {
|
|||||||
|
|
||||||
private static final long serialVersionUID = -6283302594160331474L;
|
private static final long serialVersionUID = -6283302594160331474L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance.
|
||||||
|
*/
|
||||||
public CodecEmbedderException() {
|
public CodecEmbedderException() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance.
|
||||||
|
*/
|
||||||
public CodecEmbedderException(String message, Throwable cause) {
|
public CodecEmbedderException(String message, Throwable cause) {
|
||||||
super(message, cause);
|
super(message, cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance.
|
||||||
|
*/
|
||||||
public CodecEmbedderException(String message) {
|
public CodecEmbedderException(String message) {
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance.
|
||||||
|
*/
|
||||||
public CodecEmbedderException(Throwable cause) {
|
public CodecEmbedderException(Throwable cause) {
|
||||||
super(cause);
|
super(cause);
|
||||||
}
|
}
|
||||||
|
@ -24,10 +24,31 @@ package org.jboss.netty.handler.codec.embedder;
|
|||||||
|
|
||||||
import static org.jboss.netty.channel.Channels.*;
|
import static org.jboss.netty.channel.Channels.*;
|
||||||
|
|
||||||
|
import org.jboss.netty.buffer.ChannelBuffer;
|
||||||
import org.jboss.netty.buffer.ChannelBufferFactory;
|
import org.jboss.netty.buffer.ChannelBufferFactory;
|
||||||
|
import org.jboss.netty.channel.ChannelPipeline;
|
||||||
import org.jboss.netty.channel.ChannelUpstreamHandler;
|
import org.jboss.netty.channel.ChannelUpstreamHandler;
|
||||||
|
import org.jboss.netty.handler.codec.base64.Base64Decoder;
|
||||||
|
import org.jboss.netty.handler.codec.string.StringDecoder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* A helper that wraps a decoder so that it can be used without doing actual
|
||||||
|
* I/O in unit tests or higher level codecs. For example, you can decode a
|
||||||
|
* Base64-encoded {@link ChannelBuffer} with {@link Base64Decoder} and
|
||||||
|
* {@link StringDecoder} without setting up the {@link ChannelPipeline} and
|
||||||
|
* other mock objects by yourself:
|
||||||
|
* <pre>
|
||||||
|
* ChannelBuffer base64Data = ChannelBuffer.copiedBuffer("Zm9vYmFy", "ASCII");
|
||||||
|
*
|
||||||
|
* DecoderEmbedder<String> embedder = new DecoderEmbedder<String>(
|
||||||
|
* new Base64Decoder(), new StringDecoder());
|
||||||
|
*
|
||||||
|
* embedded.offer(base64Data);
|
||||||
|
*
|
||||||
|
* String decoded = embedded.poll();
|
||||||
|
* assert decoded.equals("foobar");
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
* @author The Netty Project (netty-dev@lists.jboss.org)
|
* @author The Netty Project (netty-dev@lists.jboss.org)
|
||||||
* @author Trustin Lee (tlee@redhat.com)
|
* @author Trustin Lee (tlee@redhat.com)
|
||||||
* @version $Rev$, $Date$
|
* @version $Rev$, $Date$
|
||||||
@ -36,10 +57,21 @@ import org.jboss.netty.channel.ChannelUpstreamHandler;
|
|||||||
*/
|
*/
|
||||||
public class DecoderEmbedder<T> extends AbstractCodecEmbedder<T> {
|
public class DecoderEmbedder<T> extends AbstractCodecEmbedder<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new embedder whose pipeline is composed of the specified
|
||||||
|
* handlers.
|
||||||
|
*/
|
||||||
public DecoderEmbedder(ChannelUpstreamHandler... handlers) {
|
public DecoderEmbedder(ChannelUpstreamHandler... handlers) {
|
||||||
super(handlers);
|
super(handlers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new embedder whose pipeline is composed of the specified
|
||||||
|
* handlers.
|
||||||
|
*
|
||||||
|
* @param bufferFactory the {@link ChannelBufferFactory} to be used when
|
||||||
|
* creating a new buffer.
|
||||||
|
*/
|
||||||
public DecoderEmbedder(ChannelBufferFactory bufferFactory, ChannelUpstreamHandler... handlers) {
|
public DecoderEmbedder(ChannelBufferFactory bufferFactory, ChannelUpstreamHandler... handlers) {
|
||||||
super(bufferFactory, handlers);
|
super(bufferFactory, handlers);
|
||||||
}
|
}
|
||||||
|
@ -24,10 +24,31 @@ package org.jboss.netty.handler.codec.embedder;
|
|||||||
|
|
||||||
import static org.jboss.netty.channel.Channels.*;
|
import static org.jboss.netty.channel.Channels.*;
|
||||||
|
|
||||||
|
import org.jboss.netty.buffer.ChannelBuffer;
|
||||||
import org.jboss.netty.buffer.ChannelBufferFactory;
|
import org.jboss.netty.buffer.ChannelBufferFactory;
|
||||||
import org.jboss.netty.channel.ChannelDownstreamHandler;
|
import org.jboss.netty.channel.ChannelDownstreamHandler;
|
||||||
|
import org.jboss.netty.channel.ChannelPipeline;
|
||||||
|
import org.jboss.netty.handler.codec.base64.Base64Encoder;
|
||||||
|
import org.jboss.netty.handler.codec.string.StringEncoder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* A helper that wraps an encoder so that it can be used without doing actual
|
||||||
|
* I/O in unit tests or higher level codecs. For example, you can encode a
|
||||||
|
* {@link String} into a Base64-encoded {@link ChannelBuffer} with
|
||||||
|
* {@link Base64Encoder} and {@link StringEncoder} without setting up the
|
||||||
|
* {@link ChannelPipeline} and other mock objects by yourself:
|
||||||
|
* <pre>
|
||||||
|
* String data = "foobar";
|
||||||
|
*
|
||||||
|
* EncoderEmbedder<ChannelBuffer> embedder = new EncoderEmbedder<ChannelBuffer>(
|
||||||
|
* new Base64Encoder(), new StringEncoder());
|
||||||
|
*
|
||||||
|
* embedded.offer(data);
|
||||||
|
*
|
||||||
|
* ChannelBuffer encoded = embedded.poll();
|
||||||
|
* assert encoded.toString("ASCII").equals("Zm9vYmFy");
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
* @author The Netty Project (netty-dev@lists.jboss.org)
|
* @author The Netty Project (netty-dev@lists.jboss.org)
|
||||||
* @author Trustin Lee (tlee@redhat.com)
|
* @author Trustin Lee (tlee@redhat.com)
|
||||||
* @version $Rev$, $Date$
|
* @version $Rev$, $Date$
|
||||||
@ -36,10 +57,21 @@ import org.jboss.netty.channel.ChannelDownstreamHandler;
|
|||||||
*/
|
*/
|
||||||
public class EncoderEmbedder<T> extends AbstractCodecEmbedder<T> {
|
public class EncoderEmbedder<T> extends AbstractCodecEmbedder<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new embedder whose pipeline is composed of the specified
|
||||||
|
* handlers.
|
||||||
|
*/
|
||||||
public EncoderEmbedder(ChannelDownstreamHandler... handlers) {
|
public EncoderEmbedder(ChannelDownstreamHandler... handlers) {
|
||||||
super(handlers);
|
super(handlers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new embedder whose pipeline is composed of the specified
|
||||||
|
* handlers.
|
||||||
|
*
|
||||||
|
* @param bufferFactory the {@link ChannelBufferFactory} to be used when
|
||||||
|
* creating a new buffer.
|
||||||
|
*/
|
||||||
public EncoderEmbedder(ChannelBufferFactory bufferFactory, ChannelDownstreamHandler... handlers) {
|
public EncoderEmbedder(ChannelBufferFactory bufferFactory, ChannelDownstreamHandler... handlers) {
|
||||||
super(bufferFactory, handlers);
|
super(bufferFactory, handlers);
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A helper that wraps an encoder or a decoder so that it can be used outside
|
* A helper that wraps an encoder or a decoder so that they can be used without
|
||||||
* a {@link org.jboss.netty.channel.ChannelPipeline} or inside a
|
* doing actual I/O in unit tests or higher level codecs.
|
||||||
* {@link org.jboss.netty.channel.ChannelHandler} conveniently.
|
|
||||||
*/
|
*/
|
||||||
package org.jboss.netty.handler.codec.embedder;
|
package org.jboss.netty.handler.codec.embedder;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user