Integrate weather update extension to unomi

Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/774e8010
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/774e8010
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/774e8010

Branch: refs/heads/feature-UNOMI-117
Commit: 774e8010ed4bf2d8452f8eaa86582c35e0f90d02
Parents: bc06486
Author: dinesh1996 <Dragonball21>
Authored: Wed Jul 26 14:29:54 2017 +0200
Committer: dinesh1996 <Dragonball21>
Committed: Thu Aug 3 14:27:18 2017 +0200

----------------------------------------------------------------------
 extensions/pom.xml                              |   1 +
 extensions/weather-update/.gitignore            |   8 +
 extensions/weather-update/README.md             |  30 +++
 extensions/weather-update/core/pom.xml          | 100 ++++++++
 .../actions/WeatherUpdateAction.java            | 251 +++++++++++++++++++
 .../cxs/actions/UpdateWeatherAction.json        |  15 ++
 .../sessions/weather/weatherLike.json           |  13 +
 .../sessions/weather/weatherTemp.json           |  13 +
 .../sessions/weather/weatherWindDirection.json  |  13 +
 .../sessions/weather/weatherWindSpeed.json      |  13 +
 .../META-INF/cxs/rules/UpdateWeather.json       |  40 +++
 .../sessions/weatherSessionProperties.json      |   5 +
 .../resources/OSGI-INF/blueprint/blueprint.xml  |  44 ++++
 .../src/main/resources/messages_en.properties   |  18 ++
 .../org.apache.unomi.weatherUpdate.cfg          |  20 ++
 extensions/weather-update/karaf-kar/pom.xml     |  82 ++++++
 .../karaf-kar/src/main/feature/feature.xml      |  28 +++
 extensions/weather-update/pom.xml               |  37 +++
 ...g.apache.unomi.persistence.elasticsearch.cfg |   4 +-
 19 files changed, 733 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/pom.xml b/extensions/pom.xml
index 07608b3..29437be 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -36,6 +36,7 @@
         <module>geonames</module>
         <module>router</module>
         <module>salesforce-connector</module>
+        <module>weather-update</module>
     </modules>
 
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/.gitignore
----------------------------------------------------------------------
diff --git a/extensions/weather-update/.gitignore 
b/extensions/weather-update/.gitignore
new file mode 100644
index 0000000..851a31c
--- /dev/null
+++ b/extensions/weather-update/.gitignore
@@ -0,0 +1,8 @@
+/.classpath
+/.project
+/.settings
+.idea
+*.iml
+*.ipr
+target
+repository.xml.generated

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/README.md
----------------------------------------------------------------------
diff --git a/extensions/weather-update/README.md 
b/extensions/weather-update/README.md
new file mode 100644
index 0000000..0763929
--- /dev/null
+++ b/extensions/weather-update/README.md
@@ -0,0 +1,30 @@
+<!--
+  ~ 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.
+  -->
+
+
+# UnomiWeatherUpdate
+A simple plugin to send Unomi events when a member is logged
+
+
+In the etc/org.apache.unomi.weatherupdate.cfg file change the following 
settings:
+
+        weatherUpdate.apiKey=YOUR_WEATHER_APIKEY
+        
+        
+                <configfile 
finalname="/etc/org.apache.unomi.weatherupdate.cfg">mvn:org.apache.unomi
+                
.samples/weather-update-karaf-kar/${project.version}/cfg/weatherupdatecfg</configfile>
+

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/weather-update/core/pom.xml 
b/extensions/weather-update/core/pom.xml
new file mode 100755
index 0000000..06aa2ee
--- /dev/null
+++ b/extensions/weather-update/core/pom.xml
@@ -0,0 +1,100 @@
+<?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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.unomi</groupId>
+        <artifactId>unomi-weather-update</artifactId>
+        <version>1.2.0-incubating-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>unomi-weather-update-core</artifactId>
+    <name>Apache Unomi :: Extension :: Weather Update :: Core</name>
+    <description>This is a simple Apache Unomi plugin.</description>
+    <packaging>bundle</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient-osgi</artifactId>
+            <version>4.5.1</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore-osgi</artifactId>
+            <version>4.4.6</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
+                        <Import-Package>
+                            *
+                        </Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-artifacts</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>attach-artifact</goal>
+                        </goals>
+                        <configuration>
+                            <artifacts>
+                                <artifact>
+                                    <file>
+                                        
src/main/resources/org.apache.unomi.weatherupdate.cfg
+                                    </file>
+                                    <type>cfg</type>
+                                    <classifier>weatherupdatecfg</classifier>
+                                </artifact>
+                            </artifacts>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/java/org/apache/unomi/weatherupdate/actions/WeatherUpdateAction.java
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/java/org/apache/unomi/weatherupdate/actions/WeatherUpdateAction.java
 
b/extensions/weather-update/core/src/main/java/org/apache/unomi/weatherupdate/actions/WeatherUpdateAction.java
new file mode 100644
index 0000000..e37895e
--- /dev/null
+++ 
b/extensions/weather-update/core/src/main/java/org/apache/unomi/weatherupdate/actions/WeatherUpdateAction.java
@@ -0,0 +1,251 @@
+/*
+
+        ~ 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.unomi.weatherupdate.actions;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.apache.unomi.api.Event;
+import org.apache.unomi.api.Session;
+import org.apache.unomi.api.actions.Action;
+import org.apache.unomi.api.actions.ActionExecutor;
+import org.apache.unomi.api.services.EventService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * Get the weather location of the users by an API
+ *
+ * @author dsalhotra
+ */
+public class WeatherUpdateAction implements ActionExecutor {
+    private static Logger logger = 
LoggerFactory.getLogger(WeatherUpdateAction.class);
+    private CloseableHttpClient httpClient;
+
+    private String weatherApiKey;
+    private String weatherUrlBase;
+    private String weatherUrlAttributes;
+
+    @Override
+    public int execute(Action action, Event event) {
+        if (httpClient == null) {
+            httpClient = HttpClients.createDefault();
+        }
+
+        Session session = event.getSession();
+
+        if (!(weatherApiKey == null || weatherUrlBase == null || 
weatherUrlAttributes == null)) {
+            Map<String, Object> sessionProperties = session.getProperties();
+            if (sessionProperties.containsKey("location")) {
+                Map<String, Double> location = (Map<String, Double>) 
session.getProperty("location");
+                HttpGet httpGet = new HttpGet(weatherUrlBase + "/" + 
weatherUrlAttributes + "?lat=" +
+                        location.get("lat") + "&lon=" + location.get("lon") + 
"&appid=" + weatherApiKey
+                );
+
+                JsonNode jsonNode = null;
+                CloseableHttpResponse response = null;
+                try {
+                    response = httpClient.execute(httpGet);
+                    if (response != null) {
+                        HttpEntity entity = response.getEntity();
+                        String responseString;
+                        if (entity != null) {
+                            try {
+                                responseString = EntityUtils.toString(entity);
+                                ObjectMapper objectMapper = new ObjectMapper();
+                                jsonNode = 
objectMapper.readTree(responseString);
+                            } catch (IOException e) {
+                                logger.error("Error : With the API json 
response.", e.getMessage());
+                            }
+                        }
+                    }
+                } catch (IOException e) {
+                    logger.error("Error : With the Http Request execution. 
Wrong parameters given", e.getMessage());
+                } finally {
+                    if (response != null) {
+                        EntityUtils.consumeQuietly(response.getEntity());
+                    }
+                }
+
+                if (jsonNode.has("cod")) {
+                    if (jsonNode.get("cod").asText().equals("200")) {
+                        String temperature = extractTemperature(jsonNode);
+                        String weatherLike = extractWeatherLike(jsonNode);
+                        String windDirection = extractWindDirection(jsonNode);
+                        String windSpeed = extractWindSpeed(jsonNode);
+                        if (temperature != null) {
+                            fillPropreties(session, "weatherTemperature", 
temperature);
+                        }
+                        if (weatherLike != null) {
+                            fillPropreties(session, "weatherLike", 
weatherLike);
+                        }
+                        if (windDirection != null) {
+                            fillPropreties(session, "weatherWindDirection", 
windDirection);
+                        }
+                        if (windSpeed != null) {
+                            fillPropreties(session, "weatherWindSpeed", 
windSpeed);
+                        }
+                        return EventService.SESSION_UPDATED;
+                    }
+                }
+            }
+        }
+        return EventService.NO_CHANGE;
+    }
+
+    private String extractTemperature(JsonNode jsonNode) {
+        float temperature;
+        if (jsonNode.has("main") && jsonNode.get("main").has("temp")) {
+            String responseString = jsonNode.get("main").get("temp").asText();
+            temperature = Float.parseFloat(responseString);
+            temperature -= 273.15;
+            int temperatureTreated = (int) temperature;
+            if (temperature - temperatureTreated > 0.5) {
+                temperatureTreated++;
+            }
+            logger.debug("Temperature: " + temperatureTreated);
+            return temperatureTreated + "";
+        }
+        logger.info("API Response doesn't contains the temperature");
+        return null;
+    }
+
+    private String extractWindSpeed(JsonNode jsonNode) {
+        JsonNode WindInfoSpeed;
+        if (jsonNode.has("wind") && jsonNode.get("wind").has("speed")) {
+            WindInfoSpeed = jsonNode.get("wind").get("speed");
+            float speed = Float.parseFloat(WindInfoSpeed.toString());
+            speed *= 3.6;
+            int speedTreated = (int) speed;
+            logger.debug("Wind speed: " + speedTreated);
+            return speedTreated + "";
+        }
+        logger.info("API Response doesn't contains the wind speed");
+        return null;
+
+    }
+
+    private String extractWindDirection(JsonNode jsonNode) {
+        JsonNode WindInfoDirection;
+        if (jsonNode.has("wind")) {
+            WindInfoDirection = jsonNode.get("wind").get("deg");
+            String direction = "";
+            float deg = Float.parseFloat(WindInfoDirection.toString());
+            if (11.25 < deg && deg < 348.75) {
+                direction = ("N");
+            } else if (11.25 < deg && deg < 33.75) {
+                direction = ("NNE");
+            } else if (33.75 < deg && deg < 56.25) {
+                direction = ("NE");
+            } else if (56.25 < deg && deg < 78.75) {
+                direction = ("ENE");
+            } else if (78.75 < deg && deg < 101.25) {
+                direction = ("E");
+            } else if (101.25 < deg && deg < 123.75) {
+                direction = ("ESE");
+            } else if (123.75 < deg && deg < 146.25) {
+                direction = ("SE");
+            } else if (146.25 < deg && deg < 168.75) {
+                direction = ("SSE");
+            } else if (168.75 < deg && deg < 191.25) {
+                direction = ("S");
+            } else if (191.25 < deg && deg < 213.75) {
+                direction = ("SSW");
+            } else if (213.75 < deg && deg < 236.25) {
+                direction = ("SW");
+            } else if (236.25 < deg && deg < 258.75) {
+                direction = ("WSW");
+            } else if (258.75 < deg && deg < 281.25) {
+                direction = ("W");
+            } else if (281.25 < deg && deg < 303.75) {
+                direction = ("WNW");
+            } else if (303.75 < deg && deg < 326.25) {
+                direction = ("NW");
+            } else if (326.25 < deg && deg < 348.75) {
+                direction = ("NNW");
+            }
+            logger.debug("Wind direction: " + direction);
+            return direction;
+        }
+        logger.info("API Response doesn't contains the wind direction");
+        return null;
+    }
+
+    /**
+     *
+     * @param jsonNode
+     * @return
+     */
+    private String extractWeatherLike(JsonNode jsonNode) {
+        JsonNode weatherLike;
+        if (jsonNode.has("weather")) {
+            weatherLike = jsonNode.get("weather");
+            if (weatherLike.size() > 0) {
+                weatherLike = weatherLike.get(0).get("main");
+                logger.debug("Weather like: " + weatherLike);
+                return weatherLike.asText();
+            }
+        }
+        logger.info("API Response doesn't contains the weather description");
+        return null;
+    }
+
+    /**
+     *
+     * @param session
+     * @param property
+     * @param value
+     */
+    private void fillPropreties(Session session, String property, String 
value) {
+        session.setProperty(property, value);
+    }
+
+    //Setters
+
+    /**
+     * @param weatherApiKey
+     */
+    public void setWeatherApiKey(String weatherApiKey) {
+        this.weatherApiKey = weatherApiKey;
+    }
+
+    /**
+     * @param weatherUrlBase
+     */
+    public void setWeatherUrlBase(String weatherUrlBase) {
+        this.weatherUrlBase = weatherUrlBase;
+    }
+
+    /**
+     * @param weatherUrlAttributes
+     */
+    public void setWeatherUrlAttributes(String weatherUrlAttributes) {
+        this.weatherUrlAttributes = weatherUrlAttributes;
+    }
+}
+
+

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/resources/META-INF/cxs/actions/UpdateWeatherAction.json
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/resources/META-INF/cxs/actions/UpdateWeatherAction.json
 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/actions/UpdateWeatherAction.json
new file mode 100755
index 0000000..339291b
--- /dev/null
+++ 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/actions/UpdateWeatherAction.json
@@ -0,0 +1,15 @@
+{
+  "metadata": {
+    "id": "weatherUpdateAction",
+    "name": "Update session with local weather information",
+    "description": "This action will retrieve the weather associated with the 
resolved location of the user (from his IP address)",
+    "tags": [
+      "event",
+      "hidden.availableToEndUser",
+      "hidden.hasNoTemplate"
+    ],
+    "readOnly": true
+  },
+  "actionExecutor": "weatherUpdate",
+  "parameters": []
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherLike.json
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherLike.json
 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherLike.json
new file mode 100755
index 0000000..ade7495
--- /dev/null
+++ 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherLike.json
@@ -0,0 +1,13 @@
+{
+  "metadata": {
+    "id": "weatherLike",
+    "name": "Weather Description"
+  },
+  "type": "string",
+  "tags": [
+    "sessionProperties"
+  ],
+  "defaultValue": "",
+  "automaticMappingsFrom": [],
+  "rank": "302.0"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherTemp.json
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherTemp.json
 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherTemp.json
new file mode 100755
index 0000000..d3aebe5
--- /dev/null
+++ 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherTemp.json
@@ -0,0 +1,13 @@
+{
+  "metadata": {
+    "id": "weatherTemperature",
+    "name": "Weather Temperature"
+  },
+  "type": "integer",
+  "tags": [
+    "sessionProperties"
+  ],
+  "defaultValue": "",
+  "automaticMappingsFrom": [],
+  "rank": "302.0"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherWindDirection.json
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherWindDirection.json
 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherWindDirection.json
new file mode 100755
index 0000000..c9fc3e6
--- /dev/null
+++ 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherWindDirection.json
@@ -0,0 +1,13 @@
+{
+  "metadata": {
+    "id": "weatherWindDirection",
+    "name": "Weather Wind Direction"
+  },
+  "type": "string",
+  "tags": [
+    "sessionProperties"
+  ],
+  "defaultValue": "",
+  "automaticMappingsFrom": [],
+  "rank": "302.0"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherWindSpeed.json
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherWindSpeed.json
 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherWindSpeed.json
new file mode 100755
index 0000000..5077f1e
--- /dev/null
+++ 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/properties/sessions/weather/weatherWindSpeed.json
@@ -0,0 +1,13 @@
+{
+  "metadata": {
+    "id": "weatherWindSpeed",
+    "name": "Weather Wind Speed"
+  },
+  "type": "integer",
+  "tags": [
+    "sessionProperties"
+  ],
+  "defaultValue": "",
+  "automaticMappingsFrom": [],
+  "rank": "302.0"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/resources/META-INF/cxs/rules/UpdateWeather.json
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/resources/META-INF/cxs/rules/UpdateWeather.json
 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/rules/UpdateWeather.json
new file mode 100755
index 0000000..ec25145
--- /dev/null
+++ 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/rules/UpdateWeather.json
@@ -0,0 +1,40 @@
+{
+  "metadata": {
+    "id": "weatherUpdate",
+    "name": "Add weather information to session",
+    "description": "Get the weather from a city"
+  },
+  "raiseEventOnlyOnceForSession": false,
+  "condition": {
+
+    "parameterValues": {
+      "subConditions": [
+        {
+          "type": "eventTypeCondition",
+          "parameterValues": {
+            "eventTypeId": "weatherEvent"
+          }
+        },
+        {
+          "type": "eventTypeCondition",
+          "parameterValues": {
+            "eventTypeId": "login"
+          }
+        }
+      ],
+      "operator" : "or"
+    },
+    "type": "booleanCondition"
+  },
+  "actions": [
+    {
+      "type": "weatherUpdateAction",
+      "parameterValues": {}
+    }
+  ]
+}
+
+
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/resources/META-INF/cxs/tags/properties/sessions/weatherSessionProperties.json
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/resources/META-INF/cxs/tags/properties/sessions/weatherSessionProperties.json
 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/tags/properties/sessions/weatherSessionProperties.json
new file mode 100755
index 0000000..d634f69
--- /dev/null
+++ 
b/extensions/weather-update/core/src/main/resources/META-INF/cxs/tags/properties/sessions/weatherSessionProperties.json
@@ -0,0 +1,5 @@
+{
+  "id": "weatherSessionProperties",
+  "parent": "sessionProperties",
+  "rank": "1.0"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/extensions/weather-update/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
new file mode 100755
index 0000000..0339ce8
--- /dev/null
+++ 
b/extensions/weather-update/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -0,0 +1,44 @@
+<?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.
+  -->
+<blueprint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+           
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0";
+           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
+           xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd";>
+
+    <!-- cfg configuration -->
+    <cm:property-placeholder persistent-id="org.apache.unomi.weatherupdate"
+                             update-strategy="reload">
+        <cm:default-properties>
+            <cm:property name="weatherUpdate.apiKey" value=""/>
+            <cm:property name="weatherUpdate.url.base" value=""/>
+            <cm:property name="weatherUpdate.url.attributes" value=""/>
+        </cm:default-properties>
+    </cm:property-placeholder>
+
+    <!-- Action executor -->
+    <service auto-export="interfaces">
+        <service-properties>
+            <entry key="actionExecutorId" value="weatherUpdate"/>
+        </service-properties>
+        <bean 
class="org.apache.unomi.weatherupdate.actions.WeatherUpdateAction">
+            <property name="weatherApiKey" value="${weatherUpdate.apiKey}"/>
+            <property name="weatherUrlBase" value="${weatherUpdate.url.base}"/>
+            <property name="weatherUrlAttributes" 
value="${weatherUpdate.url.attributes}"/>
+        </bean>
+    </service>
+</blueprint>

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/resources/messages_en.properties
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/resources/messages_en.properties 
b/extensions/weather-update/core/src/main/resources/messages_en.properties
new file mode 100755
index 0000000..ef653d6
--- /dev/null
+++ b/extensions/weather-update/core/src/main/resources/messages_en.properties
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+action.incrementTweetNumberAction.description=This action will retrieve the 
weather associated with the resolved location of the user (from his IP address)
+action.incrementTweetNumberAction.name=Update session with local weather 
information
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/core/src/main/resources/org.apache.unomi.weatherUpdate.cfg
----------------------------------------------------------------------
diff --git 
a/extensions/weather-update/core/src/main/resources/org.apache.unomi.weatherUpdate.cfg
 
b/extensions/weather-update/core/src/main/resources/org.apache.unomi.weatherUpdate.cfg
new file mode 100644
index 0000000..475b631
--- /dev/null
+++ 
b/extensions/weather-update/core/src/main/resources/org.apache.unomi.weatherUpdate.cfg
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+
+weatherUpdate.apiKey=3e66ec6001684dad10724dbddaf547e6
+weatherUpdate.url.base=http://api.openweathermap.org
+weatherUpdate.url.attributes=data/2.5/weather

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/karaf-kar/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/weather-update/karaf-kar/pom.xml 
b/extensions/weather-update/karaf-kar/pom.xml
new file mode 100644
index 0000000..ffe164e
--- /dev/null
+++ b/extensions/weather-update/karaf-kar/pom.xml
@@ -0,0 +1,82 @@
+<?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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <parent>
+        <groupId>org.apache.unomi</groupId>
+        <artifactId>unomi-weather-update</artifactId>
+        <version>1.2.0-incubating-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>unomi-weather-update-karaf-kar</artifactId>
+    <name>Apache Unomi :: Extension :: Weather Update :: Apache Karaf Feature 
and KAR archive</name>
+    <description>This is a simple Apache Unomi plugin.</description>
+    <packaging>kar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-api</artifactId>
+            <version>1.2.0-incubating-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore-osgi</artifactId>
+            <version>4.4.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient-osgi</artifactId>
+            <version>4.5.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-weather-update-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.karaf.tooling</groupId>
+                    <artifactId>karaf-maven-plugin</artifactId>
+                    <extensions>true</extensions>
+                    <configuration>
+                        
<includeTransitiveDependency>false</includeTransitiveDependency>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+
+        <plugins>
+            <plugin>
+                <groupId>org.apache.karaf.tooling</groupId>
+                <artifactId>karaf-maven-plugin</artifactId>
+                <configuration>
+                    <startLevel>85</startLevel>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/karaf-kar/src/main/feature/feature.xml
----------------------------------------------------------------------
diff --git a/extensions/weather-update/karaf-kar/src/main/feature/feature.xml 
b/extensions/weather-update/karaf-kar/src/main/feature/feature.xml
new file mode 100644
index 0000000..73ebcb6
--- /dev/null
+++ b/extensions/weather-update/karaf-kar/src/main/feature/feature.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+  ~ 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.
+  -->
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.1"; 
name="unomi-weather-update-karaf-feature">
+    <feature name="unomi-weather-update-karaf-kar" version="1.0-SNAPSHOT"
+             description="Apache Unomi :: Extensions :: Weather update :: 
Apache Karaf Feature">
+        <details>Apache Karaf feature for the Apache Unomi Context Server 
extension that integrates Weather
+            update</details>
+        <configfile 
finalname="/etc/org.apache.unomi.weatherupdate.cfg">mvn:org.apache.unomi/unomi-weather-update-core/1.2.0-incubating-SNAPSHOT/cfg/weatherupdatecfg</configfile>
+        <bundle 
start-level="85">mvn:org.apache.httpcomponents/httpcore-osgi/4.4.6</bundle>
+        <bundle 
start-level="85">mvn:org.apache.httpcomponents/httpclient-osgi/4.5.1</bundle>
+        <bundle 
start-level="85">mvn:org.apache.unomi/unomi-weather-update-core/1.2.0-incubating-SNAPSHOT</bundle>
+    </feature>
+</features>

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/extensions/weather-update/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/weather-update/pom.xml 
b/extensions/weather-update/pom.xml
new file mode 100644
index 0000000..36c53fb
--- /dev/null
+++ b/extensions/weather-update/pom.xml
@@ -0,0 +1,37 @@
+<?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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.unomi</groupId>
+        <artifactId>unomi-extensions</artifactId>
+        <version>1.2.0-incubating-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>unomi-weather-update</artifactId>
+    <name>Apache Unomi :: Extension :: Weather Update</name>
+    <description>Apache Unomi Context Server that get the visitor weather 
based on his location</description>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>core</module>
+        <module>karaf-kar</module>
+    </modules>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/774e8010/persistence-elasticsearch/core/src/main/resources/org.apache.unomi.persistence.elasticsearch.cfg
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/core/src/main/resources/org.apache.unomi.persistence.elasticsearch.cfg
 
b/persistence-elasticsearch/core/src/main/resources/org.apache.unomi.persistence.elasticsearch.cfg
index 77eb091..57127fd 100644
--- 
a/persistence-elasticsearch/core/src/main/resources/org.apache.unomi.persistence.elasticsearch.cfg
+++ 
b/persistence-elasticsearch/core/src/main/resources/org.apache.unomi.persistence.elasticsearch.cfg
@@ -15,7 +15,7 @@
 # limitations under the License.
 #
 
-cluster.name=contextElasticSearch
+cluster.name=dineshElasticSearch
 # The elasticSearchAddresses may be a comma seperated list of host names and 
ports such as
 # hostA:9300,hostB:9300
 # Note: the port number must be repeated for each host.
@@ -42,4 +42,4 @@ bulkProcessor.backoffPolicy=exponential
 # for each node in the ElasticSearch cluster:
 #   minimalElasticSearchVersion <= ElasticSearch node version < 
maximalElasticSearchVersion
 minimalElasticSearchVersion=5.0.0
-maximalElasticSearchVersion=5.3.0
\ No newline at end of file
+maximalElasticSearchVersion=5.3.0


Reply via email to