Author: ningjiang
Date: Sat Aug 29 08:26:42 2009
New Revision: 809097

URL: http://svn.apache.org/viewvc?rev=809097&view=rev
Log:
CAMEL-1956 Applied patch with thanks to Stan

Added:
    
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcOnReplyTest.java
   (with props)
Modified:
    
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConfiguration.java
    
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConstants.java
    
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConsumer.java
    
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcEndpoint.java
    
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcMessage.java
    camel/trunk/components/camel-irc/src/test/resources/log4j.properties

Modified: 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConfiguration.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConfiguration.java?rev=809097&r1=809096&r2=809097&view=diff
==============================================================================
--- 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConfiguration.java
 (original)
+++ 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConfiguration.java
 Sat Aug 29 08:26:42 2009
@@ -45,6 +45,7 @@
     private boolean onKick = true;
     private boolean onMode = true;
     private boolean onPart = true;
+    private boolean onReply = false;
     private boolean onTopic = true;
     private boolean onPrivmsg = true;
     private int[] ports = {6667, 6668, 6669};
@@ -272,6 +273,14 @@
         this.onPart = onPart;
     }
 
+    public boolean isOnReply() {
+        return onReply;
+    }
+
+    public void setOnReply(boolean onReply) {
+        this.onReply = onReply;
+    }
+
     public boolean isOnTopic() {
         return onTopic;
     }

Modified: 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConstants.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConstants.java?rev=809097&r1=809096&r2=809097&view=diff
==============================================================================
--- 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConstants.java
 (original)
+++ 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConstants.java
 Sat Aug 29 08:26:42 2009
@@ -27,6 +27,8 @@
     public static final String IRC_USER_NICK = "irc.user.nick";
     public static final String IRC_USER_SERVERNAME = "irc.user.servername";
     public static final String IRC_USER_USERNAME = "irc.user.username";
+    public static final String IRC_NUM = "irc.num";
+    public static final String IRC_VALUE = "irc.value";
 
     private IrcConstants() {
         // Utility class

Modified: 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConsumer.java?rev=809097&r1=809096&r2=809097&view=diff
==============================================================================
--- 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConsumer.java
 (original)
+++ 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConsumer.java
 Sat Aug 29 08:26:42 2009
@@ -149,6 +149,18 @@
         }
 
         @Override
+        public void onReply(int num, String value, String msg) {
+            if (configuration.isOnReply()) {
+                Exchange exchange = endpoint.createOnReplyExchange(num, value, 
msg);
+                try {
+                    getProcessor().process(exchange);
+                } catch (Exception e) {
+                    handleException(e);
+                }
+            }
+        }
+
+        @Override
         public void onTopic(String channel, IRCUser user, String topic) {
             if (configuration.isOnTopic()) {
                 Exchange exchange = endpoint.createOnTopicExchange(channel, 
user, topic);

Modified: 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcEndpoint.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcEndpoint.java?rev=809097&r1=809096&r2=809097&view=diff
==============================================================================
--- 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcEndpoint.java
 (original)
+++ 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcEndpoint.java
 Sat Aug 29 08:26:42 2009
@@ -99,6 +99,13 @@
         return exchange;
     }
 
+    public Exchange createOnReplyExchange(int num, String value, String msg) {
+        DefaultExchange exchange = new DefaultExchange(this, 
getExchangePattern());
+        exchange.setProperty(Exchange.BINDING, getBinding());
+        exchange.setIn(new IrcMessage("REPLY", num, value, msg));
+        return exchange;
+    }
+
     public Exchange createOnTopicExchange(String channel, IRCUser user, String 
topic) {
         DefaultExchange exchange = new DefaultExchange(this, 
getExchangePattern());
         exchange.setProperty(Exchange.BINDING, getBinding());

Modified: 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcMessage.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcMessage.java?rev=809097&r1=809096&r2=809097&view=diff
==============================================================================
--- 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcMessage.java
 (original)
+++ 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcMessage.java
 Sat Aug 29 08:26:42 2009
@@ -29,6 +29,8 @@
     private IRCUser user;
     private String whoWasKickedNick;
     private String message;
+    private int num;
+    private String value;
 
     public IrcMessage() {
     }
@@ -60,6 +62,13 @@
         this.user = user;
     }
 
+    public IrcMessage(String messageType, int num, String value, String 
message) {
+        this.messageType = messageType;
+        this.num = num;
+        this.value = value;
+        this.message = message;
+    }
+
     public String getMessageType() {
         return messageType;
     }
@@ -127,6 +136,10 @@
             map.put(IrcConstants.IRC_USER_SERVERNAME, user.getServername());
             map.put(IrcConstants.IRC_USER_USERNAME, user.getUsername());
         }
+        if (value != null) {
+            map.put(IrcConstants.IRC_NUM, num);
+            map.put(IrcConstants.IRC_VALUE, value);
+        }
     }
 
     @Override

Added: 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcOnReplyTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcOnReplyTest.java?rev=809097&view=auto
==============================================================================
--- 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcOnReplyTest.java
 (added)
+++ 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcOnReplyTest.java
 Sat Aug 29 08:26:42 2009
@@ -0,0 +1,82 @@
+/**
+ * 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.irc;
+
+import java.util.List;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ * @version $Revision$
+ */
+public class IrcOnReplyTest extends CamelTestSupport {
+    protected MockEndpoint resultEndpoint;
+    protected String command = "WHO #camel-test";
+    protected String resultEnd = "End of WHO list";
+    private boolean sentMessages;    
+
+    @Test
+    public void testIrcMessages() throws Exception {
+        resultEndpoint = (MockEndpoint) context.getEndpoint("mock:result");
+        resultEndpoint.expectedBodiesReceived(resultEnd);
+
+        resultEndpoint.assertIsSatisfied();
+
+        List<Exchange> list = resultEndpoint.getReceivedExchanges();
+        for (Exchange exchange : list) {
+            log.info("Received exchange: " + exchange + " headers: " + 
exchange.getIn().getHeaders());
+        }
+    }   
+    
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from(fromUri()).
+                        choice().
+                        
when(header(IrcConstants.IRC_NUM).isEqualTo(315)).to("mock:result").
+                        
when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("JOIN")).to("seda:consumerJoined");
+
+                from("seda:consumerJoined").process(new Processor() {
+                    public void process(Exchange exchange) throws Exception {
+                        sendMessages();
+                    }
+                });
+            }
+        };
+    }
+
+    protected String fromUri() {
+        return 
"irc://camel-...@irc.codehaus.org:6667?nickname=camel-con&channels=#camel-test&onReply=true";
+    }    
+    
+    /**
+     * Lets send messages once the consumer has joined
+     */
+    protected void sendMessages() {
+        if (!sentMessages) {
+            sentMessages = true;
+
+            // now the consumer has joined, lets send some messages
+            template.sendBody(fromUri(), command);
+        }
+    }
+}

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

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

Modified: camel/trunk/components/camel-irc/src/test/resources/log4j.properties
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/test/resources/log4j.properties?rev=809097&r1=809096&r2=809097&view=diff
==============================================================================
--- camel/trunk/components/camel-irc/src/test/resources/log4j.properties 
(original)
+++ camel/trunk/components/camel-irc/src/test/resources/log4j.properties Sat 
Aug 29 08:26:42 2009
@@ -20,6 +20,7 @@
 #
 log4j.rootLogger=INFO, file
 
+log4j.logger.org.apache.camel.component.irc=DEBUG
 #log4j.logger.org.apache.camel=DEBUG
 
 # CONSOLE appender not used by default


Reply via email to