Author: davsclaus
Date: Fri Jan 23 02:04:36 2009
New Revision: 736980

URL: http://svn.apache.org/viewvc?rev=736980&view=rev
Log:
CAMEL-505: Mina endpoints can now be configued using spring bean style.

Added:
    
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java
   (with props)
    
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java
   (with props)
    camel/trunk/components/camel-mina/src/test/resources/org/
    camel/trunk/components/camel-mina/src/test/resources/org/apache/
    camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/
    
camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/
    
camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/
    
camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml
   (with props)
Modified:
    camel/trunk/components/camel-mina/pom.xml
    
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
    
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
    
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java
    
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java
    
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
    
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java

Modified: camel/trunk/components/camel-mina/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/pom.xml?rev=736980&r1=736979&r2=736980&view=diff
==============================================================================
--- camel/trunk/components/camel-mina/pom.xml (original)
+++ camel/trunk/components/camel-mina/pom.xml Fri Jan 23 02:04:36 2009
@@ -70,6 +70,17 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-spring</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-spring</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>

Modified: 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java?rev=736980&r1=736979&r2=736980&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
 (original)
+++ 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
 Fri Jan 23 02:04:36 2009
@@ -29,6 +29,7 @@
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.mina.common.ByteBuffer;
@@ -64,19 +65,7 @@
  */
 public class MinaComponent extends DefaultComponent {
     private static final transient Log LOG = 
LogFactory.getLog(MinaComponent.class);
-
-    private static final long DEFAULT_CONNECT_TIMEOUT = 30000;
-    private boolean sync = true;
-    private boolean textline;
-    private TextLineDelimiter textlineDelimiter;
-    private String codec;
-    private String encoding;
-    private long timeout;
-    private boolean lazySessionCreation;
-    private boolean transferExchange;
-    private boolean minaLogger;
-    // encoder used for datagram
-    private CharsetEncoder encoder;
+    private MinaConfiguration configuration = new MinaConfiguration();
 
     public MinaComponent() {
     }
@@ -87,49 +76,69 @@
 
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map 
parameters) throws Exception {
-        setProperties(this, parameters);
+        // must use copy as each endpoint can have different options
+        ObjectHelper.notNull(configuration, "configuration");
+        MinaConfiguration config = configuration.copy();
 
         URI u = new URI(remaining);
+        config.setHost(u.getHost());
+        config.setPort(u.getPort());
+        config.setProtocol(u.getScheme());
+        setProperties(config, parameters);
+
+        return createEndpoint(uri, config);
+    }
+
+    public Endpoint createEndpoint(MinaConfiguration config) throws Exception {
+        return createEndpoint(null, config);
+    }
 
-        String protocol = u.getScheme();
+    private Endpoint createEndpoint(String uri, MinaConfiguration config) 
throws Exception {
+        String protocol = config.getProtocol();
         // if mistyped uri then protocol can be null
         if (protocol != null) {
             if (protocol.equals("tcp")) {
-                return createSocketEndpoint(uri, u, parameters);
+                return createSocketEndpoint(uri, config);
             } else if (protocol.equals("udp") || protocol.equals("mcast") || 
protocol.equals("multicast")) {
-                return createDatagramEndpoint(uri, u, parameters);
+                return createDatagramEndpoint(uri, config);
             } else if (protocol.equals("vm")) {
-                return createVmEndpoint(uri, u);
+                return createVmEndpoint(uri, config);
             }
         }
         // protocol not resolved so error
         throw new IllegalArgumentException("Unrecognised MINA protocol: " + 
protocol + " for uri: " + uri);
+
     }
 
     // Implementation methods
     //-------------------------------------------------------------------------
 
-    protected MinaEndpoint createVmEndpoint(String uri, URI connectUri) {
+    protected MinaEndpoint createVmEndpoint(String uri, MinaConfiguration 
configuration) {
+        boolean minaLogger = configuration.isMinaLogger();
+        boolean sync = configuration.isSync();
+
         IoAcceptor acceptor = new VmPipeAcceptor();
-        SocketAddress address = new VmPipeAddress(connectUri.getPort());
+        SocketAddress address = new VmPipeAddress(configuration.getPort());
         IoConnector connector = new VmPipeConnector();
 
         // connector config
-        configureCodecFactory("MinaProducer", connector.getDefaultConfig(), 
textline, encoding, codec);
+        configureCodecFactory("MinaProducer", connector.getDefaultConfig(), 
configuration);
         if (minaLogger) {
             connector.getFilterChain().addLast("logger", new LoggingFilter());
         }
 
         // acceptor connectorConfig
-        configureCodecFactory("MinaConsumer", acceptor.getDefaultConfig(), 
textline, encoding, codec);
+        configureCodecFactory("MinaConsumer", acceptor.getDefaultConfig(), 
configuration);
         if (minaLogger) {
             acceptor.getFilterChain().addLast("logger", new LoggingFilter());
         }
 
-        MinaEndpoint endpoint = new MinaEndpoint(uri, this, address, acceptor, 
null, connector, null, false, timeout, transferExchange, sync);
-        if (encoding != null) {
-            endpoint.setCharsetName(getEncodingParameter("MinaProducer", 
encoding).name());
-        }
+        MinaEndpoint endpoint = new MinaEndpoint(uri, this);
+        endpoint.setAddress(address);
+        endpoint.setAcceptor(acceptor);
+        endpoint.setConnector(connector);
+        endpoint.setConfiguration(configuration);
+
         // set sync or async mode after endpoint is created
         if (sync) {
             endpoint.setExchangePattern(ExchangePattern.InOut);
@@ -140,34 +149,41 @@
         return endpoint;
     }
 
-    protected MinaEndpoint createSocketEndpoint(String uri, URI connectUri, 
Map parameters) {
+    protected MinaEndpoint createSocketEndpoint(String uri, MinaConfiguration 
configuration) {
+        boolean minaLogger = configuration.isMinaLogger();
+        long timeout = configuration.getTimeout();
+        boolean sync = configuration.isSync();
+
         IoAcceptor acceptor = new SocketAcceptor();
-        SocketAddress address = new InetSocketAddress(connectUri.getHost(), 
connectUri.getPort());
+        SocketAddress address = new InetSocketAddress(configuration.getHost(), 
configuration.getPort());
         IoConnector connector = new SocketConnector();
 
         // connector config
         SocketConnectorConfig connectorConfig = new SocketConnectorConfig();
-        configureCodecFactory("MinaProducer", connectorConfig, textline, 
encoding, codec);
+        configureCodecFactory("MinaProducer", connectorConfig, configuration);
         if (minaLogger) {
             connectorConfig.getFilterChain().addLast("logger", new 
LoggingFilter());
         }
         // set connect timeout to mina in seconds
-        long connectTimeout = timeout > 0 ? timeout : DEFAULT_CONNECT_TIMEOUT;
-        connectorConfig.setConnectTimeout((int)(connectTimeout / 1000));
+        connectorConfig.setConnectTimeout((int) (timeout / 1000));
 
         // acceptor connectorConfig
         SocketAcceptorConfig acceptorConfig = new SocketAcceptorConfig();
-        configureCodecFactory("MinaConsumer", acceptorConfig, textline, 
encoding, codec);
+        configureCodecFactory("MinaConsumer", acceptorConfig, configuration);
         acceptorConfig.setReuseAddress(true);
         acceptorConfig.setDisconnectOnUnbind(true);
         if (minaLogger) {
             acceptorConfig.getFilterChain().addLast("logger", new 
LoggingFilter());
         }
 
-        MinaEndpoint endpoint = new MinaEndpoint(uri, this, address, acceptor, 
acceptorConfig, connector, connectorConfig, lazySessionCreation, timeout, 
transferExchange, sync);
-        if (encoding != null) {
-            endpoint.setCharsetName(getEncodingParameter("MinaProducer", 
encoding).name());
-        }
+        MinaEndpoint endpoint = new MinaEndpoint(uri, this);
+        endpoint.setAddress(address);
+        endpoint.setAcceptor(acceptor);
+        endpoint.setAcceptorConfig(acceptorConfig);
+        endpoint.setConnector(connector);
+        endpoint.setConnectorConfig(connectorConfig);
+        endpoint.setConfiguration(configuration);
+
         // set sync or async mode after endpoint is created
         if (sync) {
             endpoint.setExchangePattern(ExchangePattern.InOut);
@@ -178,17 +194,18 @@
         return endpoint;
     }
 
-    protected void configureCodecFactory(String type, IoServiceConfig config, 
boolean textline, String encoding, String codec) {
-        ProtocolCodecFactory codecFactory = getCodecFactory(type, codec);
+    protected void configureCodecFactory(String type, IoServiceConfig config, 
MinaConfiguration configuration) {
+        ProtocolCodecFactory codecFactory = getCodecFactory(type, 
configuration.getCodec());
 
         if (codecFactory == null) {
-            if (textline) {
-                Charset charset = getEncodingParameter(type, encoding);
-                LineDelimiter delimiter = getLineDelimiterParameter();
+            if (configuration.isTextline()) {
+                Charset charset = getEncodingParameter(type, configuration);
+                LineDelimiter delimiter = 
getLineDelimiterParameter(configuration.getTextlineDelimiter());
                 codecFactory = new TextLineCodecFactory(charset, delimiter);
                 if (LOG.isDebugEnabled()) {
                     LOG.debug(type + ": Using TextLineCodecFactory: " + 
codecFactory + " using encoding: "
-                              + charset + " and line delimiter: " + 
textlineDelimiter + "(" + delimiter + ")");
+                            + charset + " and line delimiter: " + 
configuration.getTextlineDelimiter()
+                            + "(" + delimiter + ")");
                 }
             } else {
                 codecFactory = new ObjectSerializationCodecFactory();
@@ -201,9 +218,14 @@
         addCodecFactory(config, codecFactory);
     }
 
-    protected MinaEndpoint createDatagramEndpoint(String uri, URI connectUri, 
Map parameters) {
+    protected MinaEndpoint createDatagramEndpoint(String uri, 
MinaConfiguration configuration) {
+        boolean minaLogger = configuration.isMinaLogger();
+        long timeout = configuration.getTimeout();
+        boolean transferExchange = configuration.isTransferExchange();
+        boolean sync = configuration.isSync();
+
         IoAcceptor acceptor = new DatagramAcceptor();
-        SocketAddress address = new InetSocketAddress(connectUri.getHost(), 
connectUri.getPort());
+        SocketAddress address = new InetSocketAddress(configuration.getHost(), 
configuration.getPort());
         IoConnector connector = new DatagramConnector();
 
         if (transferExchange) {
@@ -211,26 +233,28 @@
         }
 
         DatagramConnectorConfig connectorConfig = new 
DatagramConnectorConfig();
-        configureDataGramCodecFactory("MinaProducer", connectorConfig, 
encoding, codec);
+        configureDataGramCodecFactory("MinaProducer", connectorConfig, 
configuration);
         if (minaLogger) {
             connectorConfig.getFilterChain().addLast("logger", new 
LoggingFilter());
         }
         // set connect timeout to mina in seconds
-        long connectTimeout = timeout > 0 ? timeout : DEFAULT_CONNECT_TIMEOUT;
-        connectorConfig.setConnectTimeout((int)(connectTimeout / 1000));
+        connectorConfig.setConnectTimeout((int) (timeout / 1000));
 
         DatagramAcceptorConfig acceptorConfig = new DatagramAcceptorConfig();
-        configureDataGramCodecFactory("MinaConsumer", acceptorConfig, 
encoding, codec);
+        configureDataGramCodecFactory("MinaConsumer", acceptorConfig, 
configuration);
         acceptorConfig.setDisconnectOnUnbind(true);
         // reuse address is default true for datagram
         if (minaLogger) {
             acceptorConfig.getFilterChain().addLast("logger", new 
LoggingFilter());
         }
 
-        MinaEndpoint endpoint = new MinaEndpoint(uri, this, address, acceptor, 
acceptorConfig, connector, connectorConfig, lazySessionCreation, timeout, 
transferExchange, sync);
-        if (encoding != null) {
-            endpoint.setCharsetName(getEncodingParameter("MinaProducer", 
encoding).name());
-        }
+        MinaEndpoint endpoint = new MinaEndpoint(uri, this);
+        endpoint.setAddress(address);
+        endpoint.setAcceptor(acceptor);
+        endpoint.setAcceptorConfig(acceptorConfig);
+        endpoint.setConnector(connector);
+        endpoint.setConnectorConfig(connectorConfig);
+        endpoint.setConfiguration(configuration);
         // set sync or async mode after endpoint is created
         if (sync) {
             endpoint.setExchangePattern(ExchangePattern.InOut);
@@ -241,32 +265,26 @@
         return endpoint;
     }
 
-    private static Charset getEncodingParameter(String type, String encoding) {
-        if (encoding == null) {
-            encoding = Charset.defaultCharset().name();
-            if (LOG.isDebugEnabled()) {
-                LOG.debug(type + ": No encoding parameter using default 
charset: " + encoding);
-            }
-        }
-        if (!Charset.isSupported(encoding)) {
-            throw new IllegalArgumentException("The encoding: " + encoding + " 
is not supported");
-        }
-
-        return Charset.forName(encoding);
-    }
-
     /**
      * For datagrams the entire message is available as a single ByteBuffer so 
lets just pass those around by default
      * and try converting whatever they payload is into ByteBuffers unless 
some custom converter is specified
      */
-    protected void configureDataGramCodecFactory(String type, IoServiceConfig 
config, String encoding, String codec) {
-        ProtocolCodecFactory codecFactory = getCodecFactory(type, codec);
+    protected void configureDataGramCodecFactory(final String type, final 
IoServiceConfig config, final MinaConfiguration configuration) {
+        ProtocolCodecFactory codecFactory = getCodecFactory(type, 
configuration.getCodec());
         if (codecFactory == null) {
+            final Charset charset = getEncodingParameter(type, configuration);
+
+            // set the encoder used for this datagram codec factory
             codecFactory = new ProtocolCodecFactory() {
                 public ProtocolEncoder getEncoder() throws Exception {
                     return new ProtocolEncoder() {
+                        private CharsetEncoder encoder;
+
                         public void encode(IoSession session, Object message, 
ProtocolEncoderOutput out) throws Exception {
-                            ByteBuffer buf = toByteBuffer(message);
+                            if (encoder == null) {
+                                encoder = charset.newEncoder();
+                            }
+                            ByteBuffer buf = toByteBuffer(message, encoder);
                             buf.flip();
                             out.write(buf);
                         }
@@ -298,10 +316,6 @@
                 }
             };
 
-            // set the encoder used for this datagram codec factory
-            Charset charset = getEncodingParameter(type, encoding);
-            encoder = charset.newEncoder();
-
             if (LOG.isDebugEnabled()) {
                 LOG.debug(type + ": Using CodecFactory: " + codecFactory + " 
using encoding: " + charset);
             }
@@ -310,8 +324,8 @@
         addCodecFactory(config, codecFactory);
     }
 
-    protected ByteBuffer toByteBuffer(Object message) throws 
CharacterCodingException {
-        ByteBuffer answer = null;
+    private ByteBuffer toByteBuffer(Object message, CharsetEncoder encoder) 
throws CharacterCodingException {
+        ByteBuffer answer;
         try {
             answer = convertTo(ByteBuffer.class, message);
         } catch (NoTypeConversionAvailableException e) {
@@ -322,7 +336,7 @@
         return answer;
     }
 
-    protected ProtocolCodecFactory getCodecFactory(String type, String codec) {
+    private ProtocolCodecFactory getCodecFactory(String type, String codec) {
         ProtocolCodecFactory codecFactory = null;
         if (codec != null) {
             codecFactory = mandatoryLookup(codec, ProtocolCodecFactory.class);
@@ -333,16 +347,16 @@
         return codecFactory;
     }
 
-    protected void addCodecFactory(IoServiceConfig config, 
ProtocolCodecFactory codecFactory) {
+    private void addCodecFactory(IoServiceConfig config, ProtocolCodecFactory 
codecFactory) {
         config.getFilterChain().addLast("codec", new 
ProtocolCodecFilter(codecFactory));
     }
 
-    private LineDelimiter getLineDelimiterParameter() {
-        if (textlineDelimiter == null) {
+    private static LineDelimiter getLineDelimiterParameter(TextLineDelimiter 
delimiter) {
+        if (delimiter == null) {
             return LineDelimiter.AUTO;
         }
 
-        switch (textlineDelimiter) {
+        switch (delimiter) {
         case AUTO:
             return LineDelimiter.AUTO;
         case UNIX:
@@ -352,83 +366,38 @@
         case MAC:
             return LineDelimiter.MAC;
         default:
-            throw new IllegalArgumentException("Unknown textline delimiter: " 
+ textlineDelimiter);
+            throw new IllegalArgumentException("Unknown textline delimiter: " 
+ delimiter);
         }
     }
 
-    // Properties
-    //-------------------------------------------------------------------------
-
-    public boolean isSync() {
-        return sync;
-    }
-
-    public void setSync(boolean sync) {
-        this.sync = sync;
-    }
-
-    public boolean isTextline() {
-        return textline;
-    }
-
-    public void setTextline(boolean textline) {
-        this.textline = textline;
-    }
-
-    public TextLineDelimiter getTextlineDelimiter() {
-        return textlineDelimiter;
-    }
-
-    public void setTextlineDelimiter(TextLineDelimiter textlineDelimiter) {
-        this.textlineDelimiter = textlineDelimiter;
-    }
-
-    public String getCodec() {
-        return codec;
-    }
-
-    public void setCodec(String codec) {
-        this.codec = codec;
-    }
-
-    public String getEncoding() {
-        return encoding;
-    }
-
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    public long getTimeout() {
-        return timeout;
-    }
-
-    public void setTimeout(long timeout) {
-        this.timeout = timeout;
-    }
-
-    public boolean isLazySessionCreation() {
-        return lazySessionCreation;
-    }
-
-    public void setLazySessionCreation(boolean lazySessionCreation) {
-        this.lazySessionCreation = lazySessionCreation;
-    }
+    private static Charset getEncodingParameter(String type, MinaConfiguration 
configuration) {
+        String encoding = configuration.getEncoding();
+        if (encoding == null) {
+            encoding = Charset.defaultCharset().name();
+            // set in on configuration so its updated
+            configuration.setEncoding(encoding);
+            if (LOG.isDebugEnabled()) {
+                LOG.debug(type + ": No encoding parameter using default 
charset: " + encoding);
+            }
+        }
+        if (!Charset.isSupported(encoding)) {
+            throw new IllegalArgumentException("The encoding: " + encoding + " 
is not supported");
+        }
 
-    public boolean isTransferExchange() {
-        return transferExchange;
+        return Charset.forName(encoding);
     }
 
-    public void setTransferExchange(boolean transferExchange) {
-        this.transferExchange = transferExchange;
-    }
+    // Properties
+    //-------------------------------------------------------------------------
 
-    public boolean isMinaLogger() {
-        return minaLogger;
+    public synchronized MinaConfiguration getConfiguration() {
+        if (configuration == null) {
+            configuration = new MinaConfiguration();
+        }
+        return configuration;
     }
 
-    public void setMinaLogger(boolean minaLogger) {
-        this.minaLogger = minaLogger;
+    public void setConfiguration(MinaConfiguration configuration) {
+        this.configuration = configuration;
     }
-
 }

Added: 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java?rev=736980&view=auto
==============================================================================
--- 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java
 (added)
+++ 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java
 Fri Jan 23 02:04:36 2009
@@ -0,0 +1,158 @@
+/**
+ * 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.camel.component.mina;
+
+import java.nio.charset.Charset;
+
+import org.apache.camel.RuntimeCamelException;
+
+/**
+ * Mina configuration
+ */
+public class MinaConfiguration implements Cloneable {
+    private String protocol;
+    private String host;
+    private int port;
+    private boolean sync = true;
+    private boolean textline;
+    private TextLineDelimiter textlineDelimiter;
+    private String codec;
+    private String encoding;
+    private long timeout = 30000;
+    private boolean lazySessionCreation;
+    private boolean transferExchange;
+    private boolean minaLogger;
+
+    /**
+     * Returns a copy of this configuration
+     */
+    public MinaConfiguration copy() {
+        try {
+            return (MinaConfiguration) clone();
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+
+    public String getCharsetName() {
+        if (encoding == null) {
+            return null;
+        }
+        if (!Charset.isSupported(encoding)) {
+            throw new IllegalArgumentException("The encoding: " + encoding + " 
is not supported");
+        }
+
+        return Charset.forName(encoding).name();
+    }
+
+
+    public String getProtocol() {
+        return protocol;
+    }
+
+    public void setProtocol(String protocol) {
+        this.protocol = protocol;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public boolean isSync() {
+        return sync;
+    }
+
+    public void setSync(boolean sync) {
+        this.sync = sync;
+    }
+
+    public boolean isTextline() {
+        return textline;
+    }
+
+    public void setTextline(boolean textline) {
+        this.textline = textline;
+    }
+
+    public TextLineDelimiter getTextlineDelimiter() {
+        return textlineDelimiter;
+    }
+
+    public void setTextlineDelimiter(TextLineDelimiter textlineDelimiter) {
+        this.textlineDelimiter = textlineDelimiter;
+    }
+
+    public String getCodec() {
+        return codec;
+    }
+
+    public void setCodec(String codec) {
+        this.codec = codec;
+    }
+
+    public String getEncoding() {
+        return encoding;
+    }
+
+    public void setEncoding(String encoding) {
+        this.encoding = encoding;
+    }
+
+    public long getTimeout() {
+        return timeout;
+    }
+
+    public void setTimeout(long timeout) {
+        this.timeout = timeout;
+    }
+
+    public boolean isLazySessionCreation() {
+        return lazySessionCreation;
+    }
+
+    public void setLazySessionCreation(boolean lazySessionCreation) {
+        this.lazySessionCreation = lazySessionCreation;
+    }
+
+    public boolean isTransferExchange() {
+        return transferExchange;
+    }
+
+    public void setTransferExchange(boolean transferExchange) {
+        this.transferExchange = transferExchange;
+    }
+
+    public boolean isMinaLogger() {
+        return minaLogger;
+    }
+
+    public void setMinaLogger(boolean minaLogger) {
+        this.minaLogger = minaLogger;
+    }
+}

Propchange: 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java?rev=736980&r1=736979&r2=736980&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
 (original)
+++ 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
 Fri Jan 23 02:04:36 2009
@@ -48,7 +48,7 @@
         this.endpoint = endpoint;
         this.address = endpoint.getAddress();
         this.acceptor = endpoint.getAcceptor();
-        this.sync = endpoint.isSync();
+        this.sync = endpoint.getConfiguration().isSync();
     }
 
     @Override
@@ -96,8 +96,8 @@
 
             Exchange exchange = endpoint.createExchange(session, object);
             //Set the exchange charset property for converting
-            if (endpoint.getCharsetName() != null) {
-                exchange.setProperty(Exchange.CHARSET_NAME, 
endpoint.getCharsetName());
+            if (endpoint.getConfiguration().getCharsetName() != null) {
+                exchange.setProperty(Exchange.CHARSET_NAME, 
endpoint.getConfiguration().getCharsetName());
             }
             getProcessor().process(exchange);
 
@@ -110,7 +110,7 @@
                     body = MinaPayloadHelper.getIn(endpoint, exchange);
                 }
                 boolean failed = exchange.isFailed();
-                if (failed && !endpoint.isTransferExchange()) {
+                if (failed && 
!endpoint.getConfiguration().isTransferExchange()) {
                     if (exchange.getException() != null) {
                         body = exchange.getException();
                     } else {

Modified: 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java?rev=736980&r1=736979&r2=736980&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java
 (original)
+++ 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java
 Fri Jan 23 02:04:36 2009
@@ -17,15 +17,13 @@
 package org.apache.camel.component.mina;
 
 import java.net.SocketAddress;
-import java.nio.charset.Charset;
 
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.impl.DefaultEndpoint;
-import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.mina.common.IoAcceptor;
 import org.apache.mina.common.IoAcceptorConfig;
 import org.apache.mina.common.IoConnector;
@@ -39,43 +37,39 @@
  */
 public class MinaEndpoint extends DefaultEndpoint {
 
-    private static final long DEFAULT_TIMEOUT = 30000;
-    private long timeout = DEFAULT_TIMEOUT;
+    private SocketAddress address;
+    private IoAcceptor acceptor;
+    private IoConnector connector;
+    private IoAcceptorConfig acceptorConfig;
+    private IoConnectorConfig connectorConfig;
+    private MinaConfiguration configuration;
 
-    private final IoAcceptor acceptor;
-    private final SocketAddress address;
-    private final IoConnector connector;
-    private final IoAcceptorConfig acceptorConfig;
-    private final IoConnectorConfig connectorConfig;
-    private final boolean lazySessionCreation;
-    private final boolean transferExchange;
-    private final boolean sync;
-    private String charsetName;
-
-    public MinaEndpoint(String endpointUri, MinaComponent component, 
SocketAddress address,
-                        IoAcceptor acceptor, IoAcceptorConfig acceptorConfig, 
IoConnector connector,
-                        IoConnectorConfig connectorConfig, boolean 
lazySessionCreation, long timeout,
-                        boolean transferExchange, boolean sync) {
+    public MinaEndpoint() {
+    }
+
+    public MinaEndpoint(String endpointUri, MinaComponent component) {
         super(endpointUri, component);
-        this.address = address;
-        this.acceptor = acceptor;
-        this.acceptorConfig = acceptorConfig;
-        this.connectorConfig = connectorConfig;
-        this.connector = connector;
-        this.lazySessionCreation = lazySessionCreation;
-        if (timeout > 0) {
-            // override default timeout if provided
-            this.timeout = timeout;
-        }
-        this.transferExchange = transferExchange;
-        this.sync = sync;
     }
 
     public Producer createProducer() throws Exception {
+        ObjectHelper.notNull(configuration, "configuration"); 
+        ObjectHelper.notNull(address, "address");
+        ObjectHelper.notNull(connector, "connector");
+        // wm protocol does not have config
+        if (!configuration.getProtocol().equalsIgnoreCase("vm")) {
+            ObjectHelper.notNull(connectorConfig, "connectorConfig");
+        }
         return new MinaProducer(this);
     }
 
     public Consumer createConsumer(Processor processor) throws Exception {
+        ObjectHelper.notNull(configuration, "configuration");
+        ObjectHelper.notNull(address, "address");
+        ObjectHelper.notNull(acceptor, "acceptor");
+        // wm protocol does not have config
+        if (!configuration.getProtocol().equalsIgnoreCase("vm")) {
+            ObjectHelper.notNull(acceptorConfig, "acceptorConfig");
+        }
         return new MinaConsumer(this, processor);
     }
 
@@ -85,53 +79,58 @@
         return exchange;
     }
 
+    public boolean isSingleton() {
+        return true;
+    }
+
     // Properties
     // 
-------------------------------------------------------------------------
-    public IoAcceptor getAcceptor() {
-        return acceptor;
+
+    public MinaConfiguration getConfiguration() {
+        return configuration;
     }
 
-    public SocketAddress getAddress() {
-        return address;
+    public void setConfiguration(MinaConfiguration configuration) {
+        this.configuration = configuration;
     }
 
-    public IoConnector getConnector() {
-        return connector;
+    public SocketAddress getAddress() {
+        return address;
     }
 
-    public boolean isLazySessionCreation() {
-        return lazySessionCreation;
+    public void setAddress(SocketAddress address) {
+        this.address = address;
     }
 
-    public IoAcceptorConfig getAcceptorConfig() {
-        return acceptorConfig;
+    public IoAcceptor getAcceptor() {
+        return acceptor;
     }
 
-    public IoConnectorConfig getConnectorConfig() {
-        return connectorConfig;
+    public void setAcceptor(IoAcceptor acceptor) {
+        this.acceptor = acceptor;
     }
 
-    public boolean isSingleton() {
-        return true;
+    public IoConnector getConnector() {
+        return connector;
     }
 
-    public long getTimeout() {
-        return timeout;
+    public void setConnector(IoConnector connector) {
+        this.connector = connector;
     }
 
-    public boolean isTransferExchange() {
-        return transferExchange;
+    public IoAcceptorConfig getAcceptorConfig() {
+        return acceptorConfig;
     }
 
-    public boolean isSync() {
-        return sync;
+    public void setAcceptorConfig(IoAcceptorConfig acceptorConfig) {
+        this.acceptorConfig = acceptorConfig;
     }
 
-    public void setCharsetName(String charset) {
-        this.charsetName = charset;
+    public IoConnectorConfig getConnectorConfig() {
+        return connectorConfig;
     }
 
-    public String getCharsetName() {
-        return charsetName;
+    public void setConnectorConfig(IoConnectorConfig connectorConfig) {
+        this.connectorConfig = connectorConfig;
     }
 }

Modified: 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java?rev=736980&r1=736979&r2=736980&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java
 (original)
+++ 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java
 Fri Jan 23 02:04:36 2009
@@ -34,7 +34,7 @@
     }
 
     public static Object getIn(MinaEndpoint endpoint, Exchange exchange) {
-        if (endpoint.isTransferExchange()) {
+        if (endpoint.getConfiguration().isTransferExchange()) {
             // we should transfer the entire exchange over the wire (includes 
in/out)
             return MinaPayloadHolder.marshal(exchange);
         } else {
@@ -44,7 +44,7 @@
     }
 
     public static Object getOut(MinaEndpoint endpoint, Exchange exchange) {
-        if (endpoint.isTransferExchange()) {
+        if (endpoint.getConfiguration().isTransferExchange()) {
             // we should transfer the entire exchange over the wire (includes 
in/out)
             return MinaPayloadHolder.marshal(exchange);
         } else {

Modified: 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java?rev=736980&r1=736979&r2=736980&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
 (original)
+++ 
camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
 Fri Jan 23 02:04:36 2009
@@ -53,9 +53,9 @@
     public MinaProducer(MinaEndpoint endpoint) {
         super(endpoint);
         this.endpoint = endpoint;
-        this.lazySessionCreation = endpoint.isLazySessionCreation();
-        this.timeout = endpoint.getTimeout();
-        this.sync = endpoint.isSync();
+        this.lazySessionCreation = 
endpoint.getConfiguration().isLazySessionCreation();
+        this.timeout = endpoint.getConfiguration().getTimeout();
+        this.sync = endpoint.getConfiguration().isSync();
     }
 
     public void process(Exchange exchange) throws Exception {
@@ -67,8 +67,8 @@
         }
 
         // set the exchange encoding property
-        if (endpoint.getCharsetName() != null) {
-            exchange.setProperty(Exchange.CHARSET_NAME, 
endpoint.getCharsetName());
+        if (endpoint.getConfiguration().getCharsetName() != null) {
+            exchange.setProperty(Exchange.CHARSET_NAME, 
endpoint.getConfiguration().getCharsetName());
         }
 
         Object body = MinaPayloadHelper.getIn(endpoint, exchange);

Modified: 
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java?rev=736980&r1=736979&r2=736980&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java
 (original)
+++ 
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java
 Fri Jan 23 02:04:36 2009
@@ -44,7 +44,7 @@
 
     protected void sendUdpMessages() throws Exception {
         for (int i = 0; i < messageCount; i++) {
-            template.sendBody("mina:udp://127.0.0.1:4445", "Hello Message: " + 
i);
+            template.sendBody("mina:udp://127.0.0.1:4445?sync=false", "Hello 
Message: " + i);
         }
     }
 

Added: 
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java?rev=736980&view=auto
==============================================================================
--- 
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java
 (added)
+++ 
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java
 Fri Jan 23 02:04:36 2009
@@ -0,0 +1,42 @@
+/**
+ * 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.camel.component.mina;
+
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spring.SpringTestSupport;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * Unit test spring based mina endpoint configuraiton.
+ */
+public class SpringMinaEndpointTest extends SpringTestSupport {
+
+    public void testMinaSpringEndpoint() throws Exception {
+        MockEndpoint result = getMockEndpoint("mock:result");
+        result.expectedMessageCount(1);
+
+        template.sendBody("myMinaEndpoint", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected ClassPathXmlApplicationContext createApplicationContext() {
+        return new 
ClassPathXmlApplicationContext("org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml");
+    }
+
+}

Propchange: 
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml?rev=736980&view=auto
==============================================================================
--- 
camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml
 (added)
+++ 
camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml
 Fri Jan 23 02:04:36 2009
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://activemq.apache.org/camel/schema/spring 
http://activemq.apache.org/camel/schema/spring/camel-spring.xsd";>
+
+    <!-- START SNIPPET: e1 -->
+    <!-- Creating mina endpoints is a bit complex so we reuse MinaComponnet
+         as a factory bean to create our endpoint, this is the easiest to do 
-->
+    <bean id="myMinaFactory" 
class="org.apache.camel.component.mina.MinaComponent"/>
+
+    <!-- This is our mina endpoint configured with spring, we will use the 
factory above
+         to create it for us. The goal is to invoke the createEndpoint method 
with the
+         mina configuration parameter we defined using the constructor-arg 
option -->
+    <bean id="myMinaEndpoint"
+          factory-bean="myMinaFactory"
+          factory-method="createEndpoint">
+        <constructor-arg index="0" ref="myMinaConfig"/>
+    </bean>
+
+    <!-- this is our mina configuration with plain properties -->
+    <bean id="myMinaConfig" 
class="org.apache.camel.component.mina.MinaConfiguration">
+        <property name="protocol" value="tcp"/>
+        <property name="host" value="localhost"/>
+        <property name="port" value="1234"/>
+        <property name="sync" value="false"/>
+    </bean>
+    <!-- END SNIPPET: e1 -->
+
+    <camelContext xmlns="http://activemq.apache.org/camel/schema/spring";>
+        <!-- START SNIPPET: e2 -->
+        <route>
+            <!-- here we route from or mina endpoint we have defined above -->
+            <from ref="myMinaEndpoint"/>
+            <to uri="mock:result"/>
+        </route>
+        <!-- END SNIPPET: e2 -->
+    </camelContext>
+
+</beans>

Propchange: 
camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: 
camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml


Reply via email to