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