001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: *
019: */
020: package org.apache.mina.filter.codec.demux;
021:
022: import org.apache.mina.common.IoSession;
023: import org.apache.mina.filter.codec.ProtocolCodecFactory;
024: import org.apache.mina.filter.codec.ProtocolDecoder;
025: import org.apache.mina.filter.codec.ProtocolEncoder;
026:
027: /**
028: * A convenience {@link ProtocolCodecFactory} that provides {@link DemuxingProtocolEncoder}
029: * and {@link DemuxingProtocolDecoder} as a pair.
030: * <p>
031: * {@link DemuxingProtocolEncoder} and {@link DemuxingProtocolDecoder} demultiplex
032: * incoming messages and buffers to appropriate {@link MessageEncoder}s and
033: * {@link MessageDecoder}s.
034: *
035: * @author The Apache MINA Project (dev@mina.apache.org)
036: * @version $Rev: 596187 $, $Date: 2007-11-18 20:41:14 -0700 (Sun, 18 Nov 2007) $
037: */
038: public class DemuxingProtocolCodecFactory implements
039: ProtocolCodecFactory {
040:
041: private final DemuxingProtocolEncoder encoder = new DemuxingProtocolEncoder();
042: private final DemuxingProtocolDecoder decoder = new DemuxingProtocolDecoder();
043:
044: public DemuxingProtocolCodecFactory() {
045: }
046:
047: public ProtocolEncoder getEncoder(IoSession session)
048: throws Exception {
049: return encoder;
050: }
051:
052: public ProtocolDecoder getDecoder(IoSession session)
053: throws Exception {
054: return decoder;
055: }
056:
057: @SuppressWarnings("unchecked")
058: public void addMessageEncoder(Class<?> messageType,
059: Class<? extends MessageEncoder> encoderClass) {
060: this .encoder.addMessageEncoder(messageType, encoderClass);
061: }
062:
063: public <T> void addMessageEncoder(Class<T> messageType,
064: MessageEncoder<? super T> encoder) {
065: this .encoder.addMessageEncoder(messageType, encoder);
066: }
067:
068: public <T> void addMessageEncoder(Class<T> messageType,
069: MessageEncoderFactory<? super T> factory) {
070: this .encoder.addMessageEncoder(messageType, factory);
071: }
072:
073: @SuppressWarnings("unchecked")
074: public void addMessageEncoder(Iterable<Class<?>> messageTypes,
075: Class<? extends MessageEncoder> encoderClass) {
076: for (Class<?> messageType : messageTypes) {
077: addMessageEncoder(messageType, encoderClass);
078: }
079: }
080:
081: public <T> void addMessageEncoder(
082: Iterable<Class<? extends T>> messageTypes,
083: MessageEncoder<? super T> encoder) {
084: for (Class<? extends T> messageType : messageTypes) {
085: addMessageEncoder(messageType, encoder);
086: }
087: }
088:
089: public <T> void addMessageEncoder(
090: Iterable<Class<? extends T>> messageTypes,
091: MessageEncoderFactory<? super T> factory) {
092: for (Class<? extends T> messageType : messageTypes) {
093: addMessageEncoder(messageType, factory);
094: }
095: }
096:
097: public void addMessageDecoder(
098: Class<? extends MessageDecoder> decoderClass) {
099: this .decoder.addMessageDecoder(decoderClass);
100: }
101:
102: public void addMessageDecoder(MessageDecoder decoder) {
103: this .decoder.addMessageDecoder(decoder);
104: }
105:
106: public void addMessageDecoder(MessageDecoderFactory factory) {
107: this.decoder.addMessageDecoder(factory);
108: }
109: }
|