DMF-1343 Import profiles from CSV through API

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

Branch: refs/heads/feature-DMF-1343
Commit: 5fa45c29be0f2d32cd29b4011330829e4abe3f7e
Parents: 9ac3a44
Author: Abdelkader Midani <amid...@apache.org>
Authored: Tue May 23 02:30:28 2017 +0200
Committer: Abdelkader Midani <amid...@apache.org>
Committed: Tue May 23 02:30:28 2017 +0200

----------------------------------------------------------------------
 pom.xml                                         |   1 +
 router/pom.xml                                  |  64 +++++++
 router/router-api/pom.xml                       |  43 +++++
 .../unomi/router/api/ImportConfiguration.java   | 138 ++++++++++++++
 .../unomi/router/api/ProfileToImport.java       |  77 ++++++++
 .../services/ImportConfigurationService.java    |  60 ++++++
 .../api/services/ProfileImportService.java      |  29 +++
 router/router-core/pom.xml                      | 182 +++++++++++++++++++
 .../core/context/ProfileImportCamelContext.java | 165 +++++++++++++++++
 .../core/processor/ConfigUpdateProcessor.java   |  44 +++++
 .../ImportConfigByFileNameProcessor.java        |  44 +++++
 .../core/processor/LineSplitProcessor.java      | 104 +++++++++++
 .../core/processor/UnomiStorageProcessor.java   |  46 +++++
 .../ProfileImportConfigUpdateRouteBuilder.java  |  67 +++++++
 .../ProfileImportKafkaToUnomiRouteBuilder.java  |  77 ++++++++
 .../route/ProfileImportOneShotRouteBuilder.java |  99 ++++++++++
 .../ProfileImportSourceToKafkaRouteBuilder.java | 119 ++++++++++++
 .../resources/OSGI-INF/blueprint/blueprint.xml  |  94 ++++++++++
 .../main/resources/org.apache.unomi.router.cfg  |  23 +++
 router/router-karaf-feature/pom.xml             | 164 +++++++++++++++++
 router/router-rest/pom.xml                      |  75 ++++++++
 .../ImportConfigurationServiceEndPoint.java     | 167 +++++++++++++++++
 .../resources/OSGI-INF/blueprint/blueprint.xml  |  72 ++++++++
 router/router-service/pom.xml                   | 104 +++++++++++
 .../ImportConfigurationServiceImpl.java         | 114 ++++++++++++
 .../services/ProfileImportServiceImpl.java      | 122 +++++++++++++
 .../resources/OSGI-INF/blueprint/blueprint.xml  |  39 ++++
 samples/trainingplugin.zip                      | Bin 0 -> 48508 bytes
 samples/trainingplugin/pom.xml                  |  55 ++++++
 .../training/TrainedNotificationAction.java     |  61 +++++++
 .../cxs/actions/trainingNotifAction.json        |  13 ++
 .../META-INF/cxs/rules/trainedNotification.json |  20 ++
 .../resources/OSGI-INF/blueprint/blueprint.xml  |  34 ++++
 33 files changed, 2516 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index cc7d86d..0b87800 100644
--- a/pom.xml
+++ b/pom.xml
@@ -844,6 +844,7 @@
         <module>extensions</module>
         <module>kar</module>
         <module>samples</module>
+        <module>router</module>
         <module>package</module>
     </modules>
 

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/pom.xml
----------------------------------------------------------------------
diff --git a/router/pom.xml b/router/pom.xml
new file mode 100644
index 0000000..73e9953
--- /dev/null
+++ b/router/pom.xml
@@ -0,0 +1,64 @@
+<!--
+  ~ 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>
+        <artifactId>unomi-root</artifactId>
+        <groupId>org.apache.unomi</groupId>
+        <version>1.2.0-incubating-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>unomi-router</artifactId>
+    <name>Apache Unomi :: Extensions :: Router</name>
+    <description>Apache Camel Router for the Apache Unomi Context 
server</description>
+    <packaging>pom</packaging>
+
+    <properties>
+        <camel.version>2.18.3</camel.version>
+    </properties>
+
+    <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>
+                            sun.misc;resolution:=optional,
+                            *
+                        </Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <modules>
+        <module>router-api</module>
+        <module>router-service</module>
+        <module>router-core</module>
+        <module>router-rest</module>
+        <module>router-karaf-feature</module>
+    </modules>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-api/pom.xml
----------------------------------------------------------------------
diff --git a/router/router-api/pom.xml b/router/router-api/pom.xml
new file mode 100644
index 0000000..9085a30
--- /dev/null
+++ b/router/router-api/pom.xml
@@ -0,0 +1,43 @@
+<?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>
+        <artifactId>unomi-router</artifactId>
+        <groupId>org.apache.unomi</groupId>
+        <version>1.2.0-incubating-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>unomi-router-api</artifactId>
+    <name>Apache Unomi :: Extensions :: Router :: API</name>
+    <description>Router Specification API</description>
+    <packaging>bundle</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-api/src/main/java/org/apache/unomi/router/api/ImportConfiguration.java
----------------------------------------------------------------------
diff --git 
a/router/router-api/src/main/java/org/apache/unomi/router/api/ImportConfiguration.java
 
b/router/router-api/src/main/java/org/apache/unomi/router/api/ImportConfiguration.java
new file mode 100644
index 0000000..38d139f
--- /dev/null
+++ 
b/router/router-api/src/main/java/org/apache/unomi/router/api/ImportConfiguration.java
@@ -0,0 +1,138 @@
+/*
+ * 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.router.api;
+
+import org.apache.unomi.api.Item;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by amidani on 28/04/2017.
+ */
+public class ImportConfiguration extends Item {
+
+    /**
+     * The ImportConfiguration ITEM_TYPE
+     *
+     * @see Item for a discussion of ITEM_TYPE
+     */
+    public static final String ITEM_TYPE = "importConfig";
+    private Map<String, Object> properties = new HashMap<>();
+    private String mergingProperty;
+    private boolean overwriteExistingProfiles = false;
+    private List<String> propertiesToOverwrite;
+    private boolean active = false;
+
+    /**
+     * Sets the property identified by the specified name to the specified 
value. If a property with that name already exists, replaces its value, 
otherwise adds the new
+     * property with the specified name and value.
+     *
+     * @param name  the name of the property to set
+     * @param value the value of the property
+     */
+    public void setProperty(String name, Object value) {
+        properties.put(name, value);
+    }
+
+    /**
+     * Retrieves the property identified by the specified name.
+     *
+     * @param name the name of the property to retrieve
+     * @return the value of the specified property or {@code null} if no such 
property exists
+     */
+    public Object getProperty(String name) {
+        return properties.get(name);
+    }
+
+    /**
+     * Retrieves a Map of all property name - value pairs for this import 
configuration.
+     *
+     * @return a Map of all property name - value pairs for this import 
configuration
+     */
+    public Map<String, Object> getProperties() {
+        return properties;
+    }
+
+    /**
+     * Sets the property name - value pairs for this import configuration.
+     *
+     * @param properties a Map containing the property name - value pairs for 
this import configuration
+     */
+    public void setProperties(Map<String, Object> properties) {
+        this.properties = properties;
+    }
+
+    public String getMergingProperty() {
+        return mergingProperty;
+    }
+
+    /**
+     * Sets the merging property.
+     * @param mergingProperty property used to check if the profile exist when 
merging
+     */
+    public void setMergingProperty(String mergingProperty) {
+        this.mergingProperty = mergingProperty;
+    }
+
+
+    /**
+     * Retrieves the import configuration active flag.
+     *
+     * @return true if the import configuration is active false if not
+     */
+    public boolean isActive() {
+        return this.active;
+    }
+
+    /**
+     * Sets the active flag true/false.
+     *
+     * @param active a boolean to set to active or inactive the import 
configuration
+     */
+    public void setActive(boolean active) {
+        this.active = active;
+    }
+
+    /**
+     * Retrieves the import configuration overwriteExistingProfiles flag.
+     *
+     * @return true if during the import existing profiles must be overwritten
+     */
+    public boolean isOverwriteExistingProfiles() {
+        return this.overwriteExistingProfiles;
+    }
+
+    /**
+     * Sets the overwriteExistingProfiles flag true/false.
+     *
+     * @param overwriteExistingProfiles a boolean to set 
overwriteExistingProfiles in the import configuration
+     */
+    public void setOverwriteExistingProfiles(boolean 
overwriteExistingProfiles) {
+        this.overwriteExistingProfiles = overwriteExistingProfiles;
+    }
+
+    public List<String> getPropertiesToOverwrite() {
+        return propertiesToOverwrite;
+    }
+
+    public void setPropertiesToOverwrite(List<String> propertiesToOverwrite) {
+        this.propertiesToOverwrite = propertiesToOverwrite;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-api/src/main/java/org/apache/unomi/router/api/ProfileToImport.java
----------------------------------------------------------------------
diff --git 
a/router/router-api/src/main/java/org/apache/unomi/router/api/ProfileToImport.java
 
b/router/router-api/src/main/java/org/apache/unomi/router/api/ProfileToImport.java
new file mode 100644
index 0000000..30e40e0
--- /dev/null
+++ 
b/router/router-api/src/main/java/org/apache/unomi/router/api/ProfileToImport.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.unomi.router.api;
+
+import org.apache.unomi.api.Profile;
+
+import java.util.List;
+
+/**
+ * An extension of {@link Profile} to handle merge strategy and deletion when 
importing profiles
+ */
+public class ProfileToImport extends Profile {
+
+    private List<String> propertiesToOverwrite;
+    private String mergingProperty;
+    private boolean profileToDelete;
+    private boolean overwriteExistingProfiles;
+
+
+    public List<String> getPropertiesToOverwrite() {
+        return this.propertiesToOverwrite;
+    }
+
+    public void setPropertiesToOverwrite(List<String> propertiesToOverwrite) {
+        this.propertiesToOverwrite = propertiesToOverwrite;
+    }
+
+    public boolean isProfileToDelete() {
+        return this.profileToDelete;
+    }
+
+    public void setProfileToDelete(boolean profileToDelete) {
+        this.profileToDelete = profileToDelete;
+    }
+
+    public boolean isOverwriteExistingProfiles() {
+        return this.overwriteExistingProfiles;
+    }
+
+    /**
+     * Sets the overwriteExistingProfiles flag.
+     * @param overwriteExistingProfiles flag used to specify if we want to 
overwrite existing profiles
+     */
+    public void setOverwriteExistingProfiles(boolean 
overwriteExistingProfiles) {
+        this.overwriteExistingProfiles = overwriteExistingProfiles;
+    }
+
+    public String getMergingProperty() {
+        return this.mergingProperty;
+    }
+
+    /**
+     * Sets the merging property.
+     * @param mergingProperty property used to check if the profile exist when 
merging
+     */
+    public void setMergingProperty(String mergingProperty) {
+        this.mergingProperty = mergingProperty;
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-api/src/main/java/org/apache/unomi/router/api/services/ImportConfigurationService.java
----------------------------------------------------------------------
diff --git 
a/router/router-api/src/main/java/org/apache/unomi/router/api/services/ImportConfigurationService.java
 
b/router/router-api/src/main/java/org/apache/unomi/router/api/services/ImportConfigurationService.java
new file mode 100644
index 0000000..cacd671
--- /dev/null
+++ 
b/router/router-api/src/main/java/org/apache/unomi/router/api/services/ImportConfigurationService.java
@@ -0,0 +1,60 @@
+/*
+ * 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.router.api.services;
+
+import org.apache.unomi.router.api.ImportConfiguration;
+
+import java.util.List;
+
+/**
+ * A service to access and operate on {@link ImportConfiguration}s.
+ */
+public interface ImportConfigurationService {
+
+    /**
+     * Retrieves all the import configurations.
+     *
+     * @return the list of import configurations
+     */
+    public List<ImportConfiguration> getImportConfigurations();
+
+    /**
+     * Retrieves the import configuration identified by the specified 
identifier.
+     *
+     * @param configId the identifier of the profile to retrieve
+     * @return the import configuration identified by the specified identifier 
or
+     *  {@code null} if no such import configuration exists
+     */
+    public ImportConfiguration load(String configId);
+
+    /**
+     * Saves the specified import configuration in the context server.
+     *
+     * @param profile the import configuration to be saved
+     * @return the newly saved import configuration
+     */
+    public ImportConfiguration save(ImportConfiguration profile);
+
+    /**
+     * Deletes the import configuration identified by the specified identifier.
+     *
+     * @param configId the identifier of the import configuration to delete
+     */
+    public void delete(String configId);
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-api/src/main/java/org/apache/unomi/router/api/services/ProfileImportService.java
----------------------------------------------------------------------
diff --git 
a/router/router-api/src/main/java/org/apache/unomi/router/api/services/ProfileImportService.java
 
b/router/router-api/src/main/java/org/apache/unomi/router/api/services/ProfileImportService.java
new file mode 100644
index 0000000..aa7d182
--- /dev/null
+++ 
b/router/router-api/src/main/java/org/apache/unomi/router/api/services/ProfileImportService.java
@@ -0,0 +1,29 @@
+/*
+ * 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.router.api.services;
+
+import org.apache.unomi.router.api.ProfileToImport;
+
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * Created by amidani on 20/05/2017.
+ */
+public interface ProfileImportService {
+
+    boolean saveMergeDeleteImportedProfile(ProfileToImport profileToImport) 
throws InvocationTargetException, IllegalAccessException;
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/pom.xml
----------------------------------------------------------------------
diff --git a/router/router-core/pom.xml b/router/router-core/pom.xml
new file mode 100644
index 0000000..d1574e9
--- /dev/null
+++ b/router/router-core/pom.xml
@@ -0,0 +1,182 @@
+<?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>
+        <artifactId>unomi-router</artifactId>
+        <groupId>org.apache.unomi</groupId>
+        <version>1.2.0-incubating-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>unomi-router-core</artifactId>
+    <name>Apache Unomi :: Extensions :: Router :: Core</name>
+    <description>Router Core (Apache Camel Routes)</description>
+    <packaging>bundle</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-services</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-router-api</artifactId>
+            <version>1.2.0-incubating-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+            <version>${camel.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jackson</artifactId>
+            <version>${camel.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-http-common</artifactId>
+            <version>${camel.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-servlet</artifactId>
+            <version>${camel.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-kafka</artifactId>
+            <version>${camel.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-net</groupId>
+            <artifactId>commons-net</artifactId>
+            <version>3.5</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.servicemix.bundles</groupId>
+            <artifactId>org.apache.servicemix.bundles.jsch</artifactId>
+            <version>0.1.54_1</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.kafka</groupId>
+            <artifactId>kafka-clients</artifactId>
+            <version>0.10.1.0</version>
+            <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>
+                            org.osgi.service.event;resolution:=optional,
+                            org.apache.camel,
+                            org.apache.camel.builder,
+                            org.apache.camel.component.file.remote,
+                            org.apache.camel.component.file,
+                            org.apache.camel.component.jackson,
+                            org.apache.camel.component.kafka,
+                            org.apache.camel.component.servlet,
+                            org.apache.camel.component.servlet.osgi,
+                            org.apache.camel.impl,
+                            org.apache.camel.model,
+                            org.apache.camel.model.dataformat,
+                            org.apache.camel.model.rest,
+                            org.apache.camel.spi,
+                            org.apache.unomi.api,
+                            org.apache.unomi.router.api,
+                            org.apache.unomi.api.services,
+                            org.apache.unomi.router.api.services,
+                            
org.apache.kafka.clients.producer;resolution:=optional,
+                            
org.apache.kafka.clients.consumer;resolution:=optional,
+                            com.jcraft.jsch,
+                            org.osgi.framework,
+                            org.osgi.service.http,
+                            org.slf4j
+                        </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.router.cfg
+                                    </file>
+                                    <type>cfg</type>
+                                    <classifier>routercfg</classifier>
+                                </artifact>
+                            </artifacts>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/java/org/apache/unomi/router/core/context/ProfileImportCamelContext.java
----------------------------------------------------------------------
diff --git 
a/router/router-core/src/main/java/org/apache/unomi/router/core/context/ProfileImportCamelContext.java
 
b/router/router-core/src/main/java/org/apache/unomi/router/core/context/ProfileImportCamelContext.java
new file mode 100644
index 0000000..13d6630
--- /dev/null
+++ 
b/router/router-core/src/main/java/org/apache/unomi/router/core/context/ProfileImportCamelContext.java
@@ -0,0 +1,165 @@
+/*
+ * 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.router.core.context;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
+import org.apache.camel.component.jackson.JacksonDataFormat;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.unomi.router.api.ImportConfiguration;
+import org.apache.unomi.router.api.services.ImportConfigurationService;
+import org.apache.unomi.router.core.processor.ImportConfigByFileNameProcessor;
+import org.apache.unomi.router.core.processor.UnomiStorageProcessor;
+import 
org.apache.unomi.router.core.route.ProfileImportKafkaToUnomiRouteBuilder;
+import org.apache.unomi.router.core.route.ProfileImportOneShotRouteBuilder;
+import 
org.apache.unomi.router.core.route.ProfileImportSourceToKafkaRouteBuilder;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.SynchronousBundleListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created by amidani on 04/05/2017.
+ */
+public class ProfileImportCamelContext implements SynchronousBundleListener {
+
+    private Logger logger = 
LoggerFactory.getLogger(ProfileImportCamelContext.class.getName());
+
+    private CamelContext camelContext;
+    private UnomiStorageProcessor unomiStorageProcessor;
+    private ImportConfigByFileNameProcessor importConfigByFileNameProcessor;
+    private ImportConfigurationService importConfigurationService;
+    private JacksonDataFormat jacksonDataFormat;
+    private String uploadDir;
+    private Map<String, String> kafkaProps;
+
+    private BundleContext bundleContext;
+
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
+
+    public void initCamelContext() throws Exception {
+        logger.info("------INIT Camel Context...");
+        camelContext = new DefaultCamelContext();
+        List<ImportConfiguration> importConfigurationList = 
importConfigurationService.getImportConfigurations();
+        ProfileImportSourceToKafkaRouteBuilder builderReader = new 
ProfileImportSourceToKafkaRouteBuilder(kafkaProps);
+        builderReader.setImportConfigurationList(importConfigurationList);
+        builderReader.setJacksonDataFormat(jacksonDataFormat);
+        builderReader.setContext(camelContext);
+        camelContext.addRoutes(builderReader);
+
+        //One shot import route
+        ProfileImportOneShotRouteBuilder builderOneShot = new 
ProfileImportOneShotRouteBuilder(kafkaProps);
+        
builderOneShot.setImportConfigByFileNameProcessor(importConfigByFileNameProcessor);
+        builderOneShot.setJacksonDataFormat(jacksonDataFormat);
+        builderOneShot.setUploadDir(uploadDir);
+        builderOneShot.setContext(camelContext);
+        camelContext.addRoutes(builderOneShot);
+
+
+        ProfileImportKafkaToUnomiRouteBuilder builderProcessor = new 
ProfileImportKafkaToUnomiRouteBuilder(kafkaProps);
+        builderProcessor.setUnomiStorageProcessor(unomiStorageProcessor);
+        builderProcessor.setJacksonDataFormat(jacksonDataFormat);
+        builderProcessor.setContext(camelContext);
+        camelContext.addRoutes(builderProcessor);
+
+        camelContext.start();
+
+        logger.debug("postConstruct {" + bundleContext.getBundle() + "}");
+
+        processBundleStartup(bundleContext);
+        for (Bundle bundle : bundleContext.getBundles()) {
+            if (bundle.getBundleContext() != null) {
+                processBundleStartup(bundle.getBundleContext());
+            }
+        }
+        bundleContext.addBundleListener(this);
+        logger.info("Import configuration service initialized.");
+
+    }
+
+    private boolean stopRoute(String routeId) throws Exception {
+        return camelContext.stopRoute(routeId, 10L, TimeUnit.SECONDS, true);
+    }
+
+    public void updateProfileImportReaderRoute(ImportConfiguration 
importConfiguration) throws Exception {
+        Route route = camelContext.getRoute(importConfiguration.getItemId());
+        if(route!=null && stopRoute(importConfiguration.getItemId())) {
+            camelContext.removeRoute(importConfiguration.getItemId());
+        }
+        ProfileImportSourceToKafkaRouteBuilder builder = new 
ProfileImportSourceToKafkaRouteBuilder(kafkaProps);
+        builder.setImportConfigurationList(Arrays.asList(importConfiguration));
+        builder.setJacksonDataFormat(jacksonDataFormat);
+        builder.setContext(camelContext);
+        camelContext.addRoutes(builder);
+    }
+
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    public void setUnomiStorageProcessor(UnomiStorageProcessor 
unomiStorageProcessor) {
+        this.unomiStorageProcessor = unomiStorageProcessor;
+    }
+
+    public void 
setImportConfigByFileNameProcessor(ImportConfigByFileNameProcessor 
importConfigByFileNameProcessor) {
+        this.importConfigByFileNameProcessor = importConfigByFileNameProcessor;
+    }
+
+    public void setImportConfigurationService(ImportConfigurationService 
importConfigurationService) {
+        this.importConfigurationService = importConfigurationService;
+    }
+
+    public void setJacksonDataFormat(JacksonDataFormat jacksonDataFormat) {
+        this.jacksonDataFormat = jacksonDataFormat;
+    }
+
+    public void setUploadDir(String uploadDir) {
+        this.uploadDir = uploadDir;
+    }
+
+    public void setKafkaProps(Map<String, String> kafkaProps) {
+        this.kafkaProps = kafkaProps;
+    }
+
+    public void preDestroy() throws Exception {
+        bundleContext.removeBundleListener(this);
+        //This is to shutdown Camel context
+        //(will stop all routes/components/endpoints etc and clear internal 
state/cache)
+        this.camelContext.stop();
+        logger.info("Camel context for profile import is shutdown.");
+    }
+
+    private void processBundleStartup(BundleContext bundleContext) {
+        if (bundleContext == null) {
+            return;
+        }
+    }
+
+    @Override
+    public void bundleChanged(BundleEvent bundleEvent) {
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/java/org/apache/unomi/router/core/processor/ConfigUpdateProcessor.java
----------------------------------------------------------------------
diff --git 
a/router/router-core/src/main/java/org/apache/unomi/router/core/processor/ConfigUpdateProcessor.java
 
b/router/router-core/src/main/java/org/apache/unomi/router/core/processor/ConfigUpdateProcessor.java
new file mode 100644
index 0000000..e4eaa19
--- /dev/null
+++ 
b/router/router-core/src/main/java/org/apache/unomi/router/core/processor/ConfigUpdateProcessor.java
@@ -0,0 +1,44 @@
+/*
+ * 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.router.core.processor;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.unomi.router.api.ImportConfiguration;
+import org.apache.unomi.router.core.context.ProfileImportCamelContext;
+
+/**
+ * Created by amidani on 10/05/2017.
+ */
+public class ConfigUpdateProcessor implements Processor{
+
+    private ProfileImportCamelContext profileImportCamelContext;
+
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        if (exchange.getIn() != null) {
+            Message message = exchange.getIn();
+            ImportConfiguration importConfiguration = 
message.getBody(ImportConfiguration.class);
+            
profileImportCamelContext.updateProfileImportReaderRoute(importConfiguration);
+        }
+    }
+
+    public void setProfileImportCamelContext(ProfileImportCamelContext 
profileImportCamelContext) {
+        this.profileImportCamelContext = profileImportCamelContext;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/java/org/apache/unomi/router/core/processor/ImportConfigByFileNameProcessor.java
----------------------------------------------------------------------
diff --git 
a/router/router-core/src/main/java/org/apache/unomi/router/core/processor/ImportConfigByFileNameProcessor.java
 
b/router/router-core/src/main/java/org/apache/unomi/router/core/processor/ImportConfigByFileNameProcessor.java
new file mode 100644
index 0000000..7fc7730
--- /dev/null
+++ 
b/router/router-core/src/main/java/org/apache/unomi/router/core/processor/ImportConfigByFileNameProcessor.java
@@ -0,0 +1,44 @@
+/*
+ * 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.router.core.processor;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.component.file.GenericFile;
+import org.apache.unomi.router.api.ImportConfiguration;
+import org.apache.unomi.router.api.services.ImportConfigurationService;
+
+/**
+ * Created by amidani on 22/05/2017.
+ */
+public class ImportConfigByFileNameProcessor implements Processor{
+
+    private ImportConfigurationService importConfigurationService;
+
+    @Override
+    public void process(Exchange exchange) throws Exception {
+
+        String fileName = 
exchange.getIn().getBody(GenericFile.class).getFileName();
+        String importConfigId = fileName.substring(0, fileName.indexOf('.'));
+        ImportConfiguration importConfiguration = 
importConfigurationService.load(importConfigId);
+        exchange.getIn().setHeader("importConfigOneShot", importConfiguration);
+    }
+
+    public void setImportConfigurationService(ImportConfigurationService 
importConfigurationService) {
+        this.importConfigurationService = importConfigurationService;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/java/org/apache/unomi/router/core/processor/LineSplitProcessor.java
----------------------------------------------------------------------
diff --git 
a/router/router-core/src/main/java/org/apache/unomi/router/core/processor/LineSplitProcessor.java
 
b/router/router-core/src/main/java/org/apache/unomi/router/core/processor/LineSplitProcessor.java
new file mode 100644
index 0000000..30f79bf
--- /dev/null
+++ 
b/router/router-core/src/main/java/org/apache/unomi/router/core/processor/LineSplitProcessor.java
@@ -0,0 +1,104 @@
+/*
+ * 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.router.core.processor;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.component.kafka.KafkaConstants;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.unomi.router.api.ImportConfiguration;
+import org.apache.unomi.router.api.ProfileToImport;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * Created by amidani on 29/12/2016.
+ */
+public class LineSplitProcessor implements Processor {
+
+    private Map<String, Integer> fieldsMapping;
+    private List<String> propertiesToOverwrite;
+    private String mergingProperty;
+    private boolean overwriteExistingProfiles;
+
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        //In case of one shot import we check the header and overwrite import 
config
+        ImportConfiguration importConfigOneShot = (ImportConfiguration) 
exchange.getIn().getHeader("importConfigOneShot");
+        if(importConfigOneShot!=null) {
+            fieldsMapping = (Map<String, 
Integer>)importConfigOneShot.getProperties().get("mapping");
+            propertiesToOverwrite = 
importConfigOneShot.getPropertiesToOverwrite();
+            mergingProperty = importConfigOneShot.getMergingProperty();
+            overwriteExistingProfiles = 
importConfigOneShot.isOverwriteExistingProfiles();
+        }
+        String[] profileData = ((String)exchange.getIn().getBody()).split(",");
+        ProfileToImport profileToImport = new ProfileToImport();
+        profileToImport.setItemId(UUID.randomUUID().toString());
+        profileToImport.setItemType("profile");
+        profileToImport.setScope("system");
+        if(profileData.length > 0) {
+            Map<String, Object> properties = new HashMap<>();
+            for(String fieldMappingKey : fieldsMapping.keySet()) {
+                if(profileData.length > fieldsMapping.get(fieldMappingKey)) {
+                    properties.put(fieldMappingKey, 
profileData[fieldsMapping.get(fieldMappingKey)].trim());
+                }
+            }
+            profileToImport.setProperties(properties);
+            profileToImport.setMergingProperty(mergingProperty);
+            profileToImport.setPropertiesToOverwrite(propertiesToOverwrite);
+            
profileToImport.setOverwriteExistingProfiles(overwriteExistingProfiles);
+            if(StringUtils.isNotBlank(profileData[profileData.length - 1]) && 
Boolean.parseBoolean(profileData[profileData.length - 1].trim())) {
+                profileToImport.setProfileToDelete(true);
+            }
+        }
+        exchange.getIn().setBody(profileToImport, ProfileToImport.class);
+        exchange.getIn().setHeader(KafkaConstants.PARTITION_KEY, 0);
+        exchange.getIn().setHeader(KafkaConstants.KEY, "1");
+    }
+
+    /**
+     * Setter of fieldsMapping
+     * @param fieldsMapping map String,Integer fieldName in ES and the 
matching column index in the import file
+     */
+    public void setFieldsMapping(Map<String, Integer> fieldsMapping) {
+        this.fieldsMapping = fieldsMapping;
+    }
+
+    public void setPropertiesToOverwrite(List<String> propertiesToOverwrite) {
+        this.propertiesToOverwrite = propertiesToOverwrite;
+    }
+
+    public void setOverwriteExistingProfiles(boolean 
overwriteExistingProfiles) {
+        this.overwriteExistingProfiles = overwriteExistingProfiles;
+    }
+
+    public String getMergingProperty() {
+        return this.mergingProperty;
+    }
+
+    /**
+     * Sets the merging property.
+     * @param mergingProperty property used to check if the profile exist when 
merging
+     */
+    public void setMergingProperty(String mergingProperty) {
+        this.mergingProperty = mergingProperty;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/java/org/apache/unomi/router/core/processor/UnomiStorageProcessor.java
----------------------------------------------------------------------
diff --git 
a/router/router-core/src/main/java/org/apache/unomi/router/core/processor/UnomiStorageProcessor.java
 
b/router/router-core/src/main/java/org/apache/unomi/router/core/processor/UnomiStorageProcessor.java
new file mode 100644
index 0000000..7e55185
--- /dev/null
+++ 
b/router/router-core/src/main/java/org/apache/unomi/router/core/processor/UnomiStorageProcessor.java
@@ -0,0 +1,46 @@
+/*
+ * 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.router.core.processor;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.unomi.router.api.ProfileToImport;
+import org.apache.unomi.router.api.services.ProfileImportService;
+
+/**
+ * Created by amidani on 29/12/2016.
+ */
+public class UnomiStorageProcessor implements Processor {
+
+    private ProfileImportService profileImportService;
+
+    @Override
+    public void process(Exchange exchange)
+            throws Exception {
+        if (exchange.getIn() != null) {
+            Message message = exchange.getIn();
+
+            ProfileToImport profileToImport = (ProfileToImport) 
message.getBody();
+            
profileImportService.saveMergeDeleteImportedProfile(profileToImport);
+        }
+    }
+
+    public void setProfileImportService(ProfileImportService 
profileImportService) {
+        this.profileImportService = profileImportService;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportConfigUpdateRouteBuilder.java
----------------------------------------------------------------------
diff --git 
a/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportConfigUpdateRouteBuilder.java
 
b/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportConfigUpdateRouteBuilder.java
new file mode 100644
index 0000000..0dff8ec
--- /dev/null
+++ 
b/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportConfigUpdateRouteBuilder.java
@@ -0,0 +1,67 @@
+/*
+ * 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.router.core.route;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.rest.RestBindingMode;
+import org.apache.unomi.router.api.ImportConfiguration;
+import org.apache.unomi.router.core.context.ProfileImportCamelContext;
+import org.apache.unomi.router.core.processor.ConfigUpdateProcessor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Created by amidani on 10/05/2017.
+ */
+public class ProfileImportConfigUpdateRouteBuilder extends RouteBuilder {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(ProfileImportConfigUpdateRouteBuilder.class.getName());
+
+    private ProfileImportCamelContext profileImportCamelContext;
+
+    @Override
+    public void configure() throws Exception {
+        logger.info("Preparing REST Configuration for servlet with context 
path [/importConfigAdmin]");
+        restConfiguration().component("servlet")
+                .contextPath("/importConfigAdmin")
+                .enableCORS(true)
+                .bindingMode(RestBindingMode.json)
+                .dataFormatProperty("prettyPrint", "true");
+        rest("/say")
+                .get("/hello/{me}")
+                .to("direct:hello");
+        from("direct:hello")
+                .transform().constant("Hello World");
+
+        
rest().put("/").consumes("application/json").type(ImportConfiguration.class)
+                .to("direct:importConfigRestDeposit");
+        ConfigUpdateProcessor profileImportConfigUpdateProcessor = new 
ConfigUpdateProcessor();
+        
profileImportConfigUpdateProcessor.setProfileImportCamelContext(profileImportCamelContext);
+        from("direct:importConfigRestDeposit")
+                .process(profileImportConfigUpdateProcessor)
+                .transform().constant("Success.")
+                .onException(Exception.class)
+                .transform().constant("Failure!");
+
+
+    }
+
+    public void setProfileImportCamelContext(ProfileImportCamelContext 
profileImportCamelContext) {
+        this.profileImportCamelContext = profileImportCamelContext;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportKafkaToUnomiRouteBuilder.java
----------------------------------------------------------------------
diff --git 
a/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportKafkaToUnomiRouteBuilder.java
 
b/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportKafkaToUnomiRouteBuilder.java
new file mode 100644
index 0000000..1b056fe
--- /dev/null
+++ 
b/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportKafkaToUnomiRouteBuilder.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.unomi.router.core.route;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jackson.JacksonDataFormat;
+import org.apache.camel.component.kafka.KafkaComponent;
+import org.apache.camel.component.kafka.KafkaConfiguration;
+import org.apache.camel.component.kafka.KafkaEndpoint;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.unomi.router.core.processor.UnomiStorageProcessor;
+
+import java.util.Map;
+
+/**
+ * Created by amidani on 26/04/2017.
+ */
+public class ProfileImportKafkaToUnomiRouteBuilder extends RouteBuilder {
+
+    private UnomiStorageProcessor unomiStorageProcessor;
+    private JacksonDataFormat jacksonDataFormat;
+    private String kafkaHost;
+    private String kafkaPort;
+    private String kafkaImportTopic;
+    private String kafkaImportGroupId;
+
+    public ProfileImportKafkaToUnomiRouteBuilder(Map<String, String> 
kafkaProps) {
+        kafkaHost = kafkaProps.get("kafkaHost");
+        kafkaPort = kafkaProps.get("kafkaPort");
+        kafkaImportTopic = kafkaProps.get("kafkaImportTopic");
+        kafkaImportGroupId = kafkaProps.get("kafkaImportGroupId");
+    }
+
+    @Override
+    public void configure() throws Exception {
+
+        StringBuilder kafkaUri = new StringBuilder("kafka:");
+        
kafkaUri.append(kafkaHost).append(":").append(kafkaPort).append("?topic=").append(kafkaImportTopic);
+        if(StringUtils.isNotBlank(kafkaImportGroupId)) {
+            kafkaUri.append("&groupId="+kafkaImportGroupId);
+        }
+        kafkaUri.append("&autoCommitEnable=true&consumersCount=10");
+        KafkaConfiguration kafkaConfiguration = new KafkaConfiguration();
+        kafkaConfiguration.setBrokers(kafkaHost+":"+kafkaPort);
+        kafkaConfiguration.setTopic(kafkaImportTopic);
+        kafkaConfiguration.setGroupId(kafkaImportGroupId);
+        KafkaEndpoint endpoint = new KafkaEndpoint(kafkaUri.toString(), new 
KafkaComponent(this.getContext()));
+        endpoint.setConfiguration(kafkaConfiguration);
+        from(endpoint)
+                .unmarshal(jacksonDataFormat)
+                .process(unomiStorageProcessor)
+                .to("log:org.apache.unomi.router?level=INFO");
+
+    }
+
+    public void setUnomiStorageProcessor(UnomiStorageProcessor 
unomiStorageProcessor) {
+        this.unomiStorageProcessor = unomiStorageProcessor;
+    }
+
+    public void setJacksonDataFormat(JacksonDataFormat jacksonDataFormat) {
+        this.jacksonDataFormat = jacksonDataFormat;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportOneShotRouteBuilder.java
----------------------------------------------------------------------
diff --git 
a/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportOneShotRouteBuilder.java
 
b/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportOneShotRouteBuilder.java
new file mode 100644
index 0000000..288d9d1
--- /dev/null
+++ 
b/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportOneShotRouteBuilder.java
@@ -0,0 +1,99 @@
+/*
+ * 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.router.core.route;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jackson.JacksonDataFormat;
+import org.apache.camel.component.kafka.KafkaComponent;
+import org.apache.camel.component.kafka.KafkaConfiguration;
+import org.apache.camel.component.kafka.KafkaEndpoint;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.unomi.router.core.processor.ImportConfigByFileNameProcessor;
+import org.apache.unomi.router.core.processor.LineSplitProcessor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+
+/**
+ * Created by amidani on 22/05/2017.
+ */
+public class ProfileImportOneShotRouteBuilder extends RouteBuilder {
+
+    private Logger logger = 
LoggerFactory.getLogger(ProfileImportOneShotRouteBuilder.class.getName());
+
+    private ImportConfigByFileNameProcessor importConfigByFileNameProcessor;
+    private JacksonDataFormat jacksonDataFormat;
+    private String uploadDir;
+    private String kafkaHost;
+    private String kafkaPort;
+    private String kafkaImportTopic;
+    private String kafkaImportGroupId;
+
+    private final String IMPORT_ONESHOT_ROUTE_ID = "ONE_SHOT_ROUTE";
+
+    public ProfileImportOneShotRouteBuilder(Map<String, String> kafkaProps) {
+        kafkaHost = kafkaProps.get("kafkaHost");
+        kafkaPort = kafkaProps.get("kafkaPort");
+        kafkaImportTopic = kafkaProps.get("kafkaImportTopic");
+        kafkaImportGroupId = kafkaProps.get("kafkaImportGroupId");
+    }
+
+    @Override
+    public void configure() throws Exception {
+
+        //Prepare Kafka Deposit
+        StringBuilder kafkaUri = new StringBuilder("kafka:");
+        
kafkaUri.append(kafkaHost).append(":").append(kafkaPort).append("?topic=").append(kafkaImportTopic);
+        if(StringUtils.isNotBlank(kafkaImportGroupId)) {
+            kafkaUri.append("&groupId="+ kafkaImportGroupId);
+        }
+
+        KafkaConfiguration kafkaConfiguration = new KafkaConfiguration();
+        kafkaConfiguration.setBrokers(kafkaHost+":"+kafkaPort);
+        kafkaConfiguration.setTopic(kafkaImportTopic);
+        kafkaConfiguration.setGroupId(kafkaImportGroupId);
+        KafkaEndpoint endpoint = new KafkaEndpoint(kafkaUri.toString(), new 
KafkaComponent(this.getContext()));
+        endpoint.setConfiguration(kafkaConfiguration);
+
+        LineSplitProcessor lineSplitProcessor = new LineSplitProcessor();
+
+
+        from("file://"+uploadDir+"?include=.*.csv&consumer.delay=1m")
+                .routeId(IMPORT_ONESHOT_ROUTE_ID)
+                .autoStartup(true)
+                .process(importConfigByFileNameProcessor)
+                .split(bodyAs(String.class).tokenize("\n"))
+                .process(lineSplitProcessor)
+                .to("log:org.apache.unomi.router?level=INFO")
+                .marshal(jacksonDataFormat)
+                .convertBodyTo(String.class)
+                .to(endpoint);
+    }
+
+    public void 
setImportConfigByFileNameProcessor(ImportConfigByFileNameProcessor 
importConfigByFileNameProcessor) {
+        this.importConfigByFileNameProcessor = importConfigByFileNameProcessor;
+    }
+
+    public void setUploadDir(String uploadDir) {
+        this.uploadDir = uploadDir;
+    }
+
+    public void setJacksonDataFormat(JacksonDataFormat jacksonDataFormat) {
+        this.jacksonDataFormat = jacksonDataFormat;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportSourceToKafkaRouteBuilder.java
----------------------------------------------------------------------
diff --git 
a/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportSourceToKafkaRouteBuilder.java
 
b/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportSourceToKafkaRouteBuilder.java
new file mode 100644
index 0000000..382b69d
--- /dev/null
+++ 
b/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportSourceToKafkaRouteBuilder.java
@@ -0,0 +1,119 @@
+/*
+ * 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.router.core.route;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jackson.JacksonDataFormat;
+import org.apache.camel.component.kafka.KafkaComponent;
+import org.apache.camel.component.kafka.KafkaConfiguration;
+import org.apache.camel.component.kafka.KafkaEndpoint;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.unomi.router.api.ImportConfiguration;
+import org.apache.unomi.router.core.processor.LineSplitProcessor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by amidani on 26/04/2017.
+ */
+
+public class ProfileImportSourceToKafkaRouteBuilder extends RouteBuilder {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(ProfileImportSourceToKafkaRouteBuilder.class.getName());
+
+    private List<ImportConfiguration> importConfigurationList;
+    private JacksonDataFormat jacksonDataFormat;
+    private String kafkaHost;
+    private String kafkaPort;
+    private String kafkaImportTopic;
+    private String kafkaImportGroupId;
+
+    public ProfileImportSourceToKafkaRouteBuilder(Map<String, String> 
kafkaProps) {
+        kafkaHost = kafkaProps.get("kafkaHost");
+        kafkaPort = kafkaProps.get("kafkaPort");
+        kafkaImportTopic = kafkaProps.get("kafkaImportTopic");
+        kafkaImportGroupId = kafkaProps.get("kafkaImportGroupId");
+    }
+
+    @Override
+    public void configure() throws Exception {
+        //Prepare Kafka Deposit
+        StringBuilder kafkaUri = new StringBuilder("kafka:");
+        
kafkaUri.append(kafkaHost).append(":").append(kafkaPort).append("?topic=").append(kafkaImportTopic);
+        if(StringUtils.isNotBlank(kafkaImportGroupId)) {
+            kafkaUri.append("&groupId="+ kafkaImportGroupId);
+        }
+
+        KafkaConfiguration kafkaConfiguration = new KafkaConfiguration();
+        kafkaConfiguration.setBrokers(kafkaHost+":"+kafkaPort);
+        kafkaConfiguration.setTopic(kafkaImportTopic);
+        kafkaConfiguration.setGroupId(kafkaImportGroupId);
+        KafkaEndpoint endpoint = new KafkaEndpoint(kafkaUri.toString(), new 
KafkaComponent(this.getContext()));
+        endpoint.setConfiguration(kafkaConfiguration);
+
+        //Loop on multiple import configuration
+        for(ImportConfiguration importConfiguration : importConfigurationList) 
{
+            if(importConfiguration.getProperties().size() > 0 &&
+                    StringUtils.isNotEmpty((String) 
importConfiguration.getProperties().get("source"))) {
+                //Prepare Split Processor
+                LineSplitProcessor lineSplitProcessor = new 
LineSplitProcessor();
+                lineSplitProcessor.setFieldsMapping((Map<String, Integer>) 
importConfiguration.getProperties().get("mapping"));
+                
lineSplitProcessor.setOverwriteExistingProfiles(importConfiguration.isOverwriteExistingProfiles());
+                
lineSplitProcessor.setPropertiesToOverwrite(importConfiguration.getPropertiesToOverwrite());
+                
lineSplitProcessor.setMergingProperty(importConfiguration.getMergingProperty());
+
+                from((String) 
importConfiguration.getProperties().get("source"))
+                        .routeId(importConfiguration.getItemId())// This allow 
identification of the route for manual start/stop
+                        .autoStartup(importConfiguration.isActive())// 
Auto-start if the import configuration is set active
+                        .split(bodyAs(String.class).tokenize("\n"))
+                        .process(lineSplitProcessor)
+                        .to("log:org.apache.unomi.router?level=INFO")
+                        .marshal(jacksonDataFormat)
+                        .convertBodyTo(String.class)
+                        .to(endpoint);
+            }
+        }
+    }
+
+    public void setImportConfigurationList(List<ImportConfiguration> 
importConfigurationList) {
+        this.importConfigurationList = importConfigurationList;
+    }
+
+    public void setJacksonDataFormat(JacksonDataFormat jacksonDataFormat) {
+        this.jacksonDataFormat = jacksonDataFormat;
+    }
+
+    public void setKafkaHost(String kafkaHost) {
+        this.kafkaHost = kafkaHost;
+    }
+
+    public void setKafkaPort(String kafkaPort) {
+        this.kafkaPort = kafkaPort;
+    }
+
+    public void setKafkaImportTopic(String kafkaImportTopic) {
+        this.kafkaImportTopic = kafkaImportTopic;
+    }
+
+    public void setKafkaImportGroupId(String kafkaImportGroupId) {
+        this.kafkaImportGroupId = kafkaImportGroupId;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git 
a/router/router-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml 
b/router/router-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
new file mode 100644
index 0000000..ff29755
--- /dev/null
+++ b/router/router-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -0,0 +1,94 @@
+<?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="http://www.osgi.org/xmlns/blueprint/v1.0.0";
+           
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0";
+           xmlns:camel="http://camel.apache.org/schema/blueprint";
+           xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+                               
http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 
http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd
+                               http://camel.apache.org/schema/blueprint 
http://camel.apache.org/schema/blueprint/camel-blueprint.xsd";>
+
+    <cm:property-placeholder persistent-id="org.apache.unomi.router" 
update-strategy="reload">
+        <cm:default-properties>
+            <cm:property name="kafka.host" value="localhost"/>
+            <cm:property name="kafka.port" value="9092"/>
+            <cm:property name="kafka.import.topic" value="camel-deposit"/>
+            <cm:property name="kafka.import.groupId" 
value="unomi-import-group"/>
+            <cm:property name="import.oneshot.uploadDir" 
value="/tmp/oneshot_import_configs/"/>
+        </cm:default-properties>
+    </cm:property-placeholder>
+
+    <bean id="unomiStorageProcessor" 
class="org.apache.unomi.router.core.processor.UnomiStorageProcessor">
+        <property name="profileImportService" ref="profileImportService"/>
+    </bean>
+
+    <bean id="importConfigByFileNameProcessor" 
class="org.apache.unomi.router.core.processor.ImportConfigByFileNameProcessor">
+        <property name="importConfigurationService" 
ref="importConfigurationService"/>
+    </bean>
+
+    <bean id="jacksonDataFormat" 
class="org.apache.camel.component.jackson.JacksonDataFormat">
+        <property name="unmarshalType" 
value="org.apache.unomi.router.api.ProfileToImport"/>
+    </bean>
+
+    <bean id="jacksonDataFormatImportConfig" 
class="org.apache.camel.model.dataformat.JsonDataFormat">
+        <property name="unmarshalType" 
value="org.apache.unomi.router.api.ImportConfiguration"/>
+        <property name="library" value="Jackson"/>
+    </bean>
+
+    <bean class="org.apache.camel.component.servlet.osgi.OsgiServletRegisterer"
+          init-method="register"
+          destroy-method="unregister">
+        <property name="alias" value="/importConfigAdmin"/>
+        <property name="httpService" ref="httpService"/>
+        <property name="servlet" ref="camelServlet"/>
+    </bean>
+
+    <bean id="camelServlet" 
class="org.apache.camel.component.servlet.CamelHttpTransportServlet"/>
+
+
+    <bean id="camelContext" 
class="org.apache.unomi.router.core.context.ProfileImportCamelContext"
+          init-method="initCamelContext" destroy-method="preDestroy">
+        <property name="kafkaProps">
+            <map>
+                <entry key="kafkaHost" value="${kafka.host}"/>
+                <entry key="kafkaPort" value="${kafka.port}"/>
+                <entry key="kafkaImportTopic" value="${kafka.import.topic}"/>
+                <entry key="kafkaImportGroupId" 
value="${kafka.import.groupId}"/>
+            </map>
+        </property>
+        <property name="uploadDir" value="${import.oneshot.uploadDir}"/>
+        <property name="unomiStorageProcessor" ref="unomiStorageProcessor"/>
+        <property name="importConfigByFileNameProcessor" 
ref="importConfigByFileNameProcessor"/>
+        <property name="importConfigurationService" 
ref="importConfigurationService"/>
+        <property name="jacksonDataFormat" ref="jacksonDataFormat"/>
+        <property name="bundleContext" ref="blueprintBundleContext"/>
+    </bean>
+
+    <camelContext id="httpEndpoint" 
xmlns="http://camel.apache.org/schema/blueprint";>
+        <routeBuilder ref="profileImportConfigUpdateRouteBuilder" />
+    </camelContext>
+
+    <bean id="profileImportConfigUpdateRouteBuilder" 
class="org.apache.unomi.router.core.route.ProfileImportConfigUpdateRouteBuilder">
+        <property name="profileImportCamelContext" ref="camelContext"/>
+    </bean>
+
+    <reference id="httpService" interface="org.osgi.service.http.HttpService"/>
+    <reference id="profileImportService" 
interface="org.apache.unomi.router.api.services.ProfileImportService"/>
+    <reference id="importConfigurationService" 
interface="org.apache.unomi.router.api.services.ImportConfigurationService"/>
+
+</blueprint>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-core/src/main/resources/org.apache.unomi.router.cfg
----------------------------------------------------------------------
diff --git a/router/router-core/src/main/resources/org.apache.unomi.router.cfg 
b/router/router-core/src/main/resources/org.apache.unomi.router.cfg
new file mode 100644
index 0000000..b11d983
--- /dev/null
+++ b/router/router-core/src/main/resources/org.apache.unomi.router.cfg
@@ -0,0 +1,23 @@
+#
+# 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.
+#
+kafka.host=localhost
+kafka.port=9092
+kafka.import.topic=camel-deposit
+kafka.import.groupId=unomi-import-group
+
+#Import One Shot upload directory
+import.oneshot.uploadDir=/tmp/unomi_oneshot_import_configs/
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-karaf-feature/pom.xml
----------------------------------------------------------------------
diff --git a/router/router-karaf-feature/pom.xml 
b/router/router-karaf-feature/pom.xml
new file mode 100644
index 0000000..3a1d2fd
--- /dev/null
+++ b/router/router-karaf-feature/pom.xml
@@ -0,0 +1,164 @@
+<?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>
+        <artifactId>unomi-router</artifactId>
+        <groupId>org.apache.unomi</groupId>
+        <version>1.2.0-incubating-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>unomi-router-karaf-feature</artifactId>
+    <name>Apache Unomi :: Extensions :: Router :: Apache Karaf Feature</name>
+    <description>Apache Karaf feature for the Apache Unomi Context Server 
extension</description>
+    <packaging>feature</packaging>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.servicemix.bundles</groupId>
+            <artifactId>org.apache.servicemix.bundles.jsch</artifactId>
+            <version>0.1.54_1</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-net</groupId>
+            <artifactId>commons-net</artifactId>
+            <version>3.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.kafka</groupId>
+            <artifactId>kafka-clients</artifactId>
+            <version>0.10.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+            <version>${camel.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-blueprint</artifactId>
+            <version>${camel.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jackson</artifactId>
+            <version>${camel.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-http-common</artifactId>
+            <version>${camel.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-servlet</artifactId>
+            <version>${camel.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-ftp</artifactId>
+            <version>${camel.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-stream</artifactId>
+            <version>${camel.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-kafka</artifactId>
+            <version>${camel.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-rs-security-cors</artifactId>
+            <version>${cxf.version}</version>
+        </dependency>
+
+        <!-- UNOMI ROUTER Modules Dependencies -->
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-persistence-spi</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-router-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-router-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-router-core</artifactId>
+            <version>${project.version}</version>
+            <type>cfg</type>
+            <classifier>routercfg</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-router-service</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-router-rest</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient-osgi</artifactId>
+            <type>bundle</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore-osgi</artifactId>
+        </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>90</startLevel>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5fa45c29/router/router-rest/pom.xml
----------------------------------------------------------------------
diff --git a/router/router-rest/pom.xml b/router/router-rest/pom.xml
new file mode 100644
index 0000000..fc1065f
--- /dev/null
+++ b/router/router-rest/pom.xml
@@ -0,0 +1,75 @@
+<?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>
+        <artifactId>unomi-router</artifactId>
+        <groupId>org.apache.unomi</groupId>
+        <version>1.2.0-incubating-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>unomi-router-rest</artifactId>
+    <name>Apache Unomi :: Extensions :: Router :: REST API</name>
+    <description>Router REST API</description>
+    <packaging>bundle</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-router-api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.unomi</groupId>
+            <artifactId>unomi-api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-rs-security-cors</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient-osgi</artifactId>
+            <type>bundle</type>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore-osgi</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file

Reply via email to