Author: jstrachan Date: Tue Apr 23 08:02:18 2013 New Revision: 1470842 URL: http://svn.apache.org/r1470842 Log: port a bunch of components to use the new UriEndpointComponent base class for Component implementations which makes use of the new @UriEndpoint / @UriParam annotations to provide better metadata in their ComponentConfiguration implementation; see CAMEL-6306 and CAMEL-6304
Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsComponentConfigurationTest.java (with props) Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java camel/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerComponent.java camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsComponent.java camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java camel/trunk/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshComponent.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java?rev=1470842&r1=1470841&r2=1470842&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java Tue Apr 23 08:02:18 2013 @@ -16,23 +16,23 @@ */ package org.apache.camel.component.bean; -import java.util.Map; - import org.apache.camel.Endpoint; import org.apache.camel.Processor; -import org.apache.camel.impl.DefaultComponent; import org.apache.camel.impl.ProcessorEndpoint; +import org.apache.camel.impl.UriEndpointComponent; import org.apache.camel.util.LRUSoftCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Map; + /** * The <a href="http://camel.apache.org/bean.html">Bean Component</a> * will look up the URI in the {@link org.apache.camel.spi.Registry} and use that to handle message dispatching. * * @version */ -public class BeanComponent extends DefaultComponent { +public class BeanComponent extends UriEndpointComponent { private static final transient Logger LOG = LoggerFactory.getLogger(BeanComponent.class); // use an internal soft cache for BeanInfo as they are costly to introspect @@ -40,6 +40,7 @@ public class BeanComponent extends Defau private final LRUSoftCache<BeanInfoCacheKey, BeanInfo> cache = new LRUSoftCache<BeanInfoCacheKey, BeanInfo>(1000); public BeanComponent() { + super(BeanEndpoint.class); } /** Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerComponent.java?rev=1470842&r1=1470841&r2=1470842&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerComponent.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerComponent.java Tue Apr 23 08:02:18 2013 @@ -25,6 +25,7 @@ import java.util.Timer; import org.apache.camel.Endpoint; import org.apache.camel.impl.DefaultComponent; +import org.apache.camel.impl.UriEndpointComponent; /** * Represents the component that manages {@link TimerEndpoint}. It holds the @@ -32,9 +33,13 @@ import org.apache.camel.impl.DefaultComp * * @version */ -public class TimerComponent extends DefaultComponent { +public class TimerComponent extends UriEndpointComponent { private final Map<String, Timer> timers = new HashMap<String, Timer>(); + public TimerComponent() { + super(TimerEndpoint.class); + } + public Timer getTimer(TimerEndpoint endpoint) { String key = endpoint.getTimerName(); if (!endpoint.isDaemon()) { Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java?rev=1470842&r1=1470841&r2=1470842&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java Tue Apr 23 08:02:18 2013 @@ -25,7 +25,7 @@ import javax.jms.Session; import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; import org.apache.camel.LoggingLevel; -import org.apache.camel.impl.DefaultComponent; +import org.apache.camel.impl.UriEndpointComponent; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.spi.HeaderFilterStrategyAware; import org.springframework.beans.BeansException; @@ -47,7 +47,7 @@ import static org.apache.camel.util.Obje * * @version */ -public class JmsComponent extends DefaultComponent implements ApplicationContextAware, HeaderFilterStrategyAware { +public class JmsComponent extends UriEndpointComponent implements ApplicationContextAware, HeaderFilterStrategyAware { private static final String KEY_FORMAT_STRATEGY_PARAM = "jmsKeyFormatStrategy"; private JmsConfiguration configuration; @@ -58,13 +58,15 @@ public class JmsComponent extends Defaul private MessageListenerContainerFactory messageListenerContainerFactory; public JmsComponent() { + super(JmsEndpoint.class); } public JmsComponent(CamelContext context) { - super(context); + super(context, JmsEndpoint.class); } public JmsComponent(JmsConfiguration configuration) { + this(); this.configuration = configuration; } Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsComponentConfigurationTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsComponentConfigurationTest.java?rev=1470842&view=auto ============================================================================== --- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsComponentConfigurationTest.java (added) +++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsComponentConfigurationTest.java Tue Apr 23 08:02:18 2013 @@ -0,0 +1,98 @@ +/** + * + * 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.jms; + +import org.apache.camel.CamelContext; +import org.apache.camel.Component; +import org.apache.camel.ComponentConfiguration; +import org.apache.camel.Endpoint; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.ParameterConfiguration; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; + +import javax.jms.ConnectionFactory; + +import java.util.Map; +import java.util.Set; +import java.util.SortedMap; + +import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge; + +/** + * Lets test the use of the ComponentConfiguration on the JMS endpoint + */ +public class JmsComponentConfigurationTest extends CamelTestSupport { + protected String componentName = "activemq456"; + protected boolean verbose = false; + + @Test + public void testConfiguration() throws Exception { + Component component = context().getComponent(componentName); + ComponentConfiguration configuration = component.createComponentConfiguration(); + SortedMap<String,ParameterConfiguration> parameterConfigurationMap = configuration.getParameterConfigurationMap(); + if (verbose) { + Set<Map.Entry<String, ParameterConfiguration>> entries = parameterConfigurationMap.entrySet(); + for (Map.Entry<String, ParameterConfiguration> entry : entries) { + String name = entry.getKey(); + ParameterConfiguration config = entry.getValue(); + System.out.println("Has name: " + name + " with type " + config.getParameterType().getName()); + } + } + + assertParameterConfig(configuration, "concurrentConsumers", int.class); + assertParameterConfig(configuration, "clientId", String.class); + assertParameterConfig(configuration, "disableReplyTo", boolean.class); + assertParameterConfig(configuration, "timeToLive", long.class); + + configuration.setParameter("concurrentConsumers", 10); + configuration.setParameter("clientId", "foo"); + configuration.setParameter("disableReplyTo", true); + configuration.setParameter("timeToLive", 1000L); + + JmsEndpoint endpoint = assertIsInstanceOf(JmsEndpoint.class, configuration.createEndpoint()); + assertEquals("endpoint.concurrentConsumers", 10, endpoint.getConcurrentConsumers()); + assertEquals("endpoint.clientId", "foo", endpoint.getClientId()); + assertEquals("endpoint.disableReplyTo", true, endpoint.isDisableReplyTo()); + assertEquals("endpoint.timeToLive", 1000L, endpoint.getTimeToLive()); + } + + public static void assertParameterConfig(ComponentConfiguration configuration, String name, + Class<?> parameterType) { + ParameterConfiguration config = configuration.getParameterConfiguration(name); + assertNotNull("ParameterConfiguration should exist for parameter name " + name, config); + assertEquals("ParameterConfiguration." + name + ".getName()", name, config.getName()); + assertEquals("ParameterConfiguration." + name + ".getParameterType()", parameterType, + config.getParameterType()); + } + + protected CamelContext createCamelContext() throws Exception { + CamelContext camelContext = super.createCamelContext(); + ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory(); + JmsComponent comp = jmsComponentAutoAcknowledge(connectionFactory); + camelContext.addComponent(componentName, comp); + return camelContext; + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + } + }; + } +} Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsComponentConfigurationTest.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsComponent.java?rev=1470842&r1=1470841&r2=1470842&view=diff ============================================================================== --- camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsComponent.java (original) +++ camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsComponent.java Tue Apr 23 08:02:18 2013 @@ -27,6 +27,7 @@ import org.apache.camel.component.sjms.j import org.apache.camel.component.sjms.jms.KeyFormatStrategy; import org.apache.camel.component.sjms.taskmanager.TimedTaskManager; import org.apache.camel.impl.DefaultComponent; +import org.apache.camel.impl.UriEndpointComponent; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.spi.HeaderFilterStrategyAware; import org.apache.camel.util.ObjectHelper; @@ -36,7 +37,7 @@ import org.slf4j.LoggerFactory; /** * The <a href="http://camel.apache.org/sjms">Simple JMS</a> component. */ -public class SjmsComponent extends DefaultComponent implements HeaderFilterStrategyAware { +public class SjmsComponent extends UriEndpointComponent implements HeaderFilterStrategyAware { private static final transient Logger LOGGER = LoggerFactory.getLogger(SjmsComponent.class); private ConnectionFactory connectionFactory; @@ -47,6 +48,10 @@ public class SjmsComponent extends Defau private TransactionCommitStrategy transactionCommitStrategy; private TimedTaskManager timedTaskManager; + public SjmsComponent() { + super(SjmsEndpoint.class); + } + @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { validateMepAndReplyTo(parameters); Modified: camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java?rev=1470842&r1=1470841&r2=1470842&view=diff ============================================================================== --- camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java (original) +++ camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java Tue Apr 23 08:02:18 2013 @@ -21,7 +21,7 @@ import javax.sql.DataSource; import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; -import org.apache.camel.impl.DefaultComponent; +import org.apache.camel.impl.UriEndpointComponent; import org.apache.camel.util.CamelContextHelper; import org.apache.camel.util.IntrospectionSupport; import org.springframework.jdbc.core.JdbcTemplate; @@ -29,15 +29,16 @@ import org.springframework.jdbc.core.Jdb /** * @version */ -public class SqlComponent extends DefaultComponent { +public class SqlComponent extends UriEndpointComponent { private DataSource dataSource; private boolean usePlaceholder = true; public SqlComponent() { + super(SqlEndpoint.class); } public SqlComponent(CamelContext context) { - super(context); + super(context, SqlEndpoint.class); } @Override Modified: camel/trunk/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshComponent.java?rev=1470842&r1=1470841&r2=1470842&view=diff ============================================================================== --- camel/trunk/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshComponent.java (original) +++ camel/trunk/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshComponent.java Tue Apr 23 08:02:18 2013 @@ -20,15 +20,19 @@ import java.net.URI; import java.util.Map; import org.apache.camel.Endpoint; -import org.apache.camel.impl.DefaultComponent; +import org.apache.camel.impl.UriEndpointComponent; import org.apache.sshd.common.KeyPairProvider; /** * Represents the component that manages {@link SshEndpoint}. */ -public class SshComponent extends DefaultComponent { +public class SshComponent extends UriEndpointComponent { private SshConfiguration configuration; + public SshComponent() { + super(SshEndpoint.class); + } + @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { SshConfiguration newConfig;