You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/06/06 11:21:56 UTC

git commit: Added producer to camel-weather

Updated Branches:
  refs/heads/master 4a2dd39db -> ea902873b


Added producer to camel-weather


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ea902873
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ea902873
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ea902873

Branch: refs/heads/master
Commit: ea902873b9426a6a13f9b02d5c4cb74ac1ae1d59
Parents: 4a2dd39
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Jun 6 11:21:46 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Jun 6 11:21:46 2013 +0200

----------------------------------------------------------------------
 .../component/weather/WeatherConfiguration.java    |    9 +-
 .../camel/component/weather/WeatherConstants.java  |    1 +
 .../camel/component/weather/WeatherEndpoint.java   |   24 +++--
 .../camel/component/weather/WeatherProducer.java   |   58 +++++++++++
 .../weather/CurrentWeatherMadridProducerTest.java  |   77 +++++++++++++++
 5 files changed, 156 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ea902873/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConfiguration.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConfiguration.java
index 85bc3a3..f0d6499 100644
--- a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConfiguration.java
+++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConfiguration.java
@@ -86,14 +86,17 @@ public class WeatherConfiguration {
     }
 
     public String getQuery() throws Exception {
+        return getQuery(getLocation());
+    }
+
+    public String getQuery(String location) throws Exception {
         String answer = "http://api.openweathermap.org/data/2.5/";
 
-        String location;
-        if (isEmpty(getLocation())) {
+        if (isEmpty(location)) {
             location = getGeoLocation();
         } else {
             // assuming the location is a town or country
-            location = "q=" + getLocation();
+            location = "q=" + location;
         }
 
         if (isEmpty(getPeriod())) {

http://git-wip-us.apache.org/repos/asf/camel/blob/ea902873/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConstants.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConstants.java
index fc81632..c0e888a 100644
--- a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConstants.java
+++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherConstants.java
@@ -21,6 +21,7 @@ package org.apache.camel.component.weather;
  */
 public final class WeatherConstants {
 
+    public static final String WEATHER_LOCATION = "CamelWeatherLocation";
     public static final String WEATHER_QUERY = "CamelWeatherQuery";
 
     private WeatherConstants() {

http://git-wip-us.apache.org/repos/asf/camel/blob/ea902873/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java
index b70a4fa..3015ef3 100644
--- a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java
+++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java
@@ -35,16 +35,6 @@ public class WeatherEndpoint extends DefaultPollingEndpoint {
     }
 
     @Override
-    public Producer createProducer() throws Exception {
-        throw new UnsupportedOperationException("Making Weather is not implemented - yet.");
-    }
-
-    @Override
-    public boolean isSingleton() {
-        return true;
-    }
-
-    @Override
     public Consumer createConsumer(Processor processor) throws Exception {
         WeatherConsumer answer = new WeatherConsumer(this, processor, this.configuration.getQuery());
 
@@ -54,4 +44,18 @@ public class WeatherEndpoint extends DefaultPollingEndpoint {
         configureConsumer(answer);
         return answer;
     }
+
+    @Override
+    public Producer createProducer() throws Exception {
+        return new WeatherProducer(this, configuration.getQuery());
+    }
+
+    @Override
+    public boolean isSingleton() {
+        return true;
+    }
+
+    public WeatherConfiguration getConfiguration() {
+        return configuration;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/ea902873/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherProducer.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherProducer.java
new file mode 100644
index 0000000..afe1b85
--- /dev/null
+++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherProducer.java
@@ -0,0 +1,58 @@
+/**
+ * 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.weather;
+
+import java.net.URL;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.ObjectHelper;
+
+public class WeatherProducer extends DefaultProducer {
+
+    private final String query;
+
+    public WeatherProducer(WeatherEndpoint endpoint, String query) {
+        super(endpoint);
+        this.query = query;
+    }
+
+    @Override
+    public WeatherEndpoint getEndpoint() {
+        return (WeatherEndpoint) super.getEndpoint();
+    }
+
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        String q = query;
+        String location = exchange.getIn().getHeader(WeatherConstants.WEATHER_LOCATION, String.class);
+        if (location != null) {
+            q = getEndpoint().getConfiguration().getQuery(location);
+        }
+
+        log.debug("Going to execute the Weather query {}", q);
+        String weather = getEndpoint().getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, new URL(q));
+        log.debug("Got back the Weather information {}", weather);
+
+        if (ObjectHelper.isEmpty(weather)) {
+            throw new IllegalStateException("Got the unexpected value '" + weather + "' as the result of the query '" + q + "'");
+        }
+
+        exchange.getIn().setBody(weather);
+        exchange.getIn().setHeader(WeatherConstants.WEATHER_QUERY, q);
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/ea902873/components/camel-weather/src/test/java/org/apache/camel/component/weather/CurrentWeatherMadridProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-weather/src/test/java/org/apache/camel/component/weather/CurrentWeatherMadridProducerTest.java b/components/camel-weather/src/test/java/org/apache/camel/component/weather/CurrentWeatherMadridProducerTest.java
new file mode 100644
index 0000000..ec17d00
--- /dev/null
+++ b/components/camel-weather/src/test/java/org/apache/camel/component/weather/CurrentWeatherMadridProducerTest.java
@@ -0,0 +1,77 @@
+/**
+ * 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.weather;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.Test;
+
+public class CurrentWeatherMadridProducerTest extends BaseWeatherConsumerTest {
+
+    @Test
+    public void testGrabbingListOfEntries() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        // as the default delay option is one hour long, we expect exactly one message exchange
+        mock.expectedMessageCount(1);
+
+        template.sendBody("direct:start", "Hello World");
+
+        mock.assertIsSatisfied();
+
+        Exchange exchange = mock.getExchanges().get(0);
+        assertNotNull(exchange);
+        Message in = exchange.getIn();
+        assertNotNull(in);
+        String weather = assertIsInstanceOf(String.class, in.getBody());
+
+        checkWeatherContent(weather);
+    }
+
+    @Test
+    public void testHeaderOverride() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        // as the default delay option is one hour long, we expect exactly one message exchange
+        mock.expectedMessageCount(1);
+
+        template.sendBodyAndHeader("direct:start", "Hello World", WeatherConstants.WEATHER_LOCATION, "Paris,France");
+
+        mock.assertIsSatisfied();
+
+        Exchange exchange = mock.getExchanges().get(0);
+        assertNotNull(exchange);
+        Message in = exchange.getIn();
+        assertNotNull(in);
+        String weather = assertIsInstanceOf(String.class, in.getBody());
+
+        checkWeatherContent(weather);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .to("weather:foo?location=Madrid,Spain")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}