You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by am...@apache.org on 2017/05/24 13:19:58 UTC
[2/3] incubator-unomi git commit: DMF-1343 : Move unomi-router under
extensions
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5d8f1be5/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java
----------------------------------------------------------------------
diff --git a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java
new file mode 100644
index 0000000..e81930a
--- /dev/null
+++ b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java
@@ -0,0 +1,167 @@
+/*
+ * 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.rest;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.cxf.jaxrs.ext.multipart.Multipart;
+import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+import org.apache.cxf.rs.security.cors.CrossOriginResourceSharing;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.unomi.router.api.ImportConfiguration;
+import org.apache.unomi.router.api.services.ImportConfigurationService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+
+/**
+ * A JAX-RS endpoint to manage {@link org.apache.unomi.router.api.ImportConfiguration}s.
+ */
+@WebService
+@CrossOriginResourceSharing(
+ allowAllOrigins = true,
+ allowCredentials = true
+)
+public class ImportConfigurationServiceEndPoint {
+
+ private static final Logger logger = LoggerFactory.getLogger(ImportConfigurationServiceEndPoint.class.getName());
+
+ private ImportConfigurationService importConfigurationService;
+ private String uploadDir;
+
+ public ImportConfigurationServiceEndPoint () {
+ logger.info("Initializing import configuration service endpoint...");
+ }
+
+ @WebMethod(exclude = true)
+ public void setImportConfigurationService(ImportConfigurationService importConfigurationService) {
+ this.importConfigurationService = importConfigurationService;
+ }
+
+ @WebMethod(exclude = true)
+ public void setUploadDir(String uploadDir) {
+ this.uploadDir = uploadDir;
+ }
+
+ /**
+ * Retrieves all the import configurations.
+ *
+ * @return all the import configurations.
+ */
+ @GET
+ @Path("/")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ public List<ImportConfiguration> getImportConfigurations() {
+ return importConfigurationService.getImportConfigurations();
+ }
+
+ /**
+ * Retrieves an import configuration by id.
+ *
+ * @return the import configuration that matches the given id.
+ */
+ @GET
+ @Path("/{configId}")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ public ImportConfiguration getImportConfiguration(@PathParam("configId") String configId) {
+ return importConfigurationService.load(configId);
+ }
+
+ /**
+ * Delete an import configuration by id.
+ *
+ * @return the deleted import configuration.
+ */
+ @DELETE
+ @Path("/{configId}")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ public void deleteImportConfiguration(@PathParam("configId") String configId) {
+ importConfigurationService.delete(configId);
+ }
+
+
+
+ /**
+ * Save the given import configuration.
+ *
+ * @return the import configuration saved.
+ */
+ @POST
+ @Path("/")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ public ImportConfiguration saveImportConfiguration(ImportConfiguration importConfiguration) {
+ ImportConfiguration importConfigSaved = importConfigurationService.save(importConfiguration);
+ CloseableHttpClient httpClient = HttpClients.createDefault();
+ try {
+ HttpPut httpPut = new HttpPut("http://localhost:8181/importConfigAdmin/");
+ StringEntity input = new StringEntity(new ObjectMapper().writeValueAsString(importConfigSaved));
+ input.setContentType(MediaType.APPLICATION_JSON);
+ httpPut.setEntity(input);
+
+ HttpResponse response = httpClient.execute(httpPut);
+
+ if (response.getStatusLine().getStatusCode() != 200) {
+ throw new RuntimeException("Failed : HTTP error code : "
+ + response.getStatusLine().getStatusCode());
+ }
+ } catch (IOException e) {
+ logger.warn("Unable to update Camel route [{}]", importConfiguration.getItemId());
+ }
+ return importConfigSaved;
+ }
+
+ /**
+ * Save/Update the given import configuration.
+ * Prepare the file to be processed with Camel routes
+ * @return OK / NOK Http Code.
+ */
+ @POST
+ @Path("/oneshot")
+ @Consumes(MediaType.MULTIPART_FORM_DATA)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response processOneshotImportConfigurationCSV(@Multipart(value = "importConfigId") String importConfigId, @Multipart(value = "file") Attachment file) {
+ try {
+ java.nio.file.Path path = Paths.get(uploadDir+importConfigId+".csv");
+ Files.deleteIfExists(path);
+ InputStream in = file.getObject(InputStream.class);
+
+ Files.copy(in, path);
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ return Response.serverError().build();
+ }
+ return Response.ok().build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5d8f1be5/extensions/router/router-rest/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/extensions/router/router-rest/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/router/router-rest/src/main/resources/OSGI-INF/blueprint/blueprint.xml
new file mode 100644
index 0000000..a5cf1be
--- /dev/null
+++ b/extensions/router/router-rest/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -0,0 +1,72 @@
+<?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:cxf="http://cxf.apache.org/blueprint/core" xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs"
+ 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
+ http://cxf.apache.org/blueprint/jaxrs http://cxf.apache.org/schemas/blueprint/jaxrs.xsd
+ http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.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">
+ <cm:property-placeholder persistent-id="org.apache.unomi.router" update-strategy="reload">
+ <cm:default-properties>
+ <cm:property name="import.oneshot.uploadDir" value="/tmp/oneshot_import_configs/"/>
+ </cm:default-properties>
+ </cm:property-placeholder>
+
+ <cxf:bus id="cxsServiceBus">
+ <cxf:features>
+ <cxf:logging/>
+ </cxf:features>
+ </cxf:bus>
+
+ <bean id="cors-filter" class="org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter"/>
+ <bean id="jacksonMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/>
+ <bean id="json-provider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider">
+ <argument index="0" ref="jacksonMapper" type="com.fasterxml.jackson.databind.ObjectMapper"/>
+ </bean>
+ <bean id="jaas-filter" class="org.apache.cxf.jaxrs.security.JAASAuthenticationFilter">
+ <!-- Name of the JAAS Context -->
+ <property name="contextName" value="karaf"/>
+ <!-- Hint to the filter on how to have Principals representing users and roles separated
+ while initializing a SecurityContext -->
+ <property name="rolePrefix" value="ROLE_"/>
+ <property name="realmName" value="cxs"/>
+ </bean>
+
+ <jaxrs:server address="/importConfiguration" id="restImportConfigurationService">
+ <jaxrs:providers>
+ <ref component-id="json-provider"/>
+ <ref component-id="cors-filter"/>
+ <ref component-id="jaas-filter"/>
+ </jaxrs:providers>
+
+ <jaxrs:serviceBeans>
+ <ref component-id="importConfigurationServiceEndPoint"/>
+ </jaxrs:serviceBeans>
+ </jaxrs:server>
+
+ <reference id="importConfigurationService" interface="org.apache.unomi.router.api.services.ImportConfigurationService"/>
+
+ <bean id="importConfigurationServiceEndPoint" class="org.apache.unomi.router.rest.ImportConfigurationServiceEndPoint">
+ <property name="importConfigurationService" ref="importConfigurationService"/>
+ <property name="uploadDir" value="${import.oneshot.uploadDir}"/>
+ </bean>
+
+</blueprint>
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5d8f1be5/extensions/router/router-service/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/router/router-service/pom.xml b/extensions/router/router-service/pom.xml
new file mode 100644
index 0000000..0aed70e
--- /dev/null
+++ b/extensions/router/router-service/pom.xml
@@ -0,0 +1,104 @@
+<?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-dmf_1343-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>unomi-router-service</artifactId>
+ <name>Apache Unomi :: Extensions :: Router :: Services</name>
+ <description>Router Services</description>
+ <packaging>bundle</packaging>
+
+ <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>
+
+ <dependencies>
+ <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-router-api</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.unomi</groupId>
+ <artifactId>unomi-persistence-spi</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <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>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ </dependencies>
+
+
+</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5d8f1be5/extensions/router/router-service/src/main/java/org/apache/unomi/router/services/ImportConfigurationServiceImpl.java
----------------------------------------------------------------------
diff --git a/extensions/router/router-service/src/main/java/org/apache/unomi/router/services/ImportConfigurationServiceImpl.java b/extensions/router/router-service/src/main/java/org/apache/unomi/router/services/ImportConfigurationServiceImpl.java
new file mode 100644
index 0000000..a4f6131
--- /dev/null
+++ b/extensions/router/router-service/src/main/java/org/apache/unomi/router/services/ImportConfigurationServiceImpl.java
@@ -0,0 +1,114 @@
+/*
+ * 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.services;
+
+import org.apache.unomi.router.api.ImportConfiguration;
+import org.apache.unomi.router.api.services.ImportConfigurationService;
+import org.apache.unomi.persistence.spi.PersistenceService;
+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.List;
+import java.util.UUID;
+
+/**
+ * Created by amidani on 28/04/2017.
+ */
+public class ImportConfigurationServiceImpl implements ImportConfigurationService,SynchronousBundleListener {
+
+ private static final Logger logger = LoggerFactory.getLogger(ImportConfigurationServiceImpl.class.getName());
+
+ private BundleContext bundleContext;
+ private PersistenceService persistenceService;
+
+ public ImportConfigurationServiceImpl() {
+ logger.info("Initializing import configuration service...");
+ }
+
+ public void setBundleContext(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ }
+
+ public void setPersistenceService(PersistenceService persistenceService) {
+ this.persistenceService = persistenceService;
+ }
+
+ public void postConstruct() {
+ 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.");
+ }
+
+ public void preDestroy() {
+ bundleContext.removeBundleListener(this);
+ logger.info("Import configuration service shutdown.");
+ }
+
+ private void processBundleStartup(BundleContext bundleContext) {
+ if (bundleContext == null) {
+ return;
+ }
+ }
+
+ private void processBundleStop(BundleContext bundleContext) {
+ }
+
+
+ @Override
+ public List<ImportConfiguration> getImportConfigurations() {
+ return persistenceService.getAllItems(ImportConfiguration.class);
+ }
+
+ @Override
+ public ImportConfiguration load(String configId) {
+ return persistenceService.load(configId, ImportConfiguration.class);
+ }
+
+ @Override
+ public ImportConfiguration save(ImportConfiguration importConfiguration) {
+ if (importConfiguration.getItemId() == null) {
+ importConfiguration.setItemId(UUID.randomUUID().toString());
+ }
+ if(persistenceService.save(importConfiguration)) {
+
+ }
+
+ return persistenceService.load(importConfiguration.getItemId(), ImportConfiguration.class);
+ }
+
+ @Override
+ public void delete(String configId) {
+ persistenceService.remove(configId, ImportConfiguration.class);
+ }
+
+ @Override
+ public void bundleChanged(BundleEvent bundleEvent) {
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5d8f1be5/extensions/router/router-service/src/main/java/org/apache/unomi/router/services/ProfileImportServiceImpl.java
----------------------------------------------------------------------
diff --git a/extensions/router/router-service/src/main/java/org/apache/unomi/router/services/ProfileImportServiceImpl.java b/extensions/router/router-service/src/main/java/org/apache/unomi/router/services/ProfileImportServiceImpl.java
new file mode 100644
index 0000000..8097953
--- /dev/null
+++ b/extensions/router/router-service/src/main/java/org/apache/unomi/router/services/ProfileImportServiceImpl.java
@@ -0,0 +1,122 @@
+/*
+ * 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.services;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.unomi.api.Profile;
+import org.apache.unomi.api.services.EventListenerService;
+import org.apache.unomi.persistence.spi.PersistenceService;
+import org.apache.unomi.router.api.ProfileToImport;
+import org.apache.unomi.router.api.services.ProfileImportService;
+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.lang.reflect.InvocationTargetException;
+import java.util.List;
+
+/**
+ * Created by amidani on 18/05/2017.
+ */
+public class ProfileImportServiceImpl implements ProfileImportService, SynchronousBundleListener {
+
+ private static final Logger logger = LoggerFactory.getLogger(ProfileImportServiceImpl.class.getName());
+
+ private PersistenceService persistenceService;
+
+ private BundleContext bundleContext;
+
+ public void setPersistenceService(PersistenceService persistenceService) {
+ this.persistenceService = persistenceService;
+ }
+
+ public void setBundleContext(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ }
+
+ public void postConstruct() {
+ 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.");
+ }
+
+ public void preDestroy() {
+ bundleContext.removeBundleListener(this);
+ logger.info("Import configuration service shutdown.");
+ }
+
+ private void processBundleStartup(BundleContext bundleContext) {
+ if (bundleContext == null) {
+ return;
+ }
+ }
+
+ private void processBundleStop(BundleContext bundleContext) {
+ }
+
+
+ public boolean saveMergeDeleteImportedProfile(ProfileToImport profileToImport) throws InvocationTargetException, IllegalAccessException {
+ logger.info("Importing profile: {}, {}", profileToImport.getProperties().get("firstName"), profileToImport.getProperties().get("lastName"));
+ Profile existingProfile = new Profile();
+ List<Profile> existingProfiles = persistenceService.query("properties."+profileToImport.getMergingProperty(), (String)profileToImport.getProperties().get(profileToImport.getMergingProperty()), null, Profile.class);
+ logger.info("Query existing profile with mergingProperty: {}", profileToImport.getMergingProperty());
+ logger.info("Found: {}", existingProfiles.size());
+
+ //Profile already exist, and import config allow to overwrite profiles
+ if(existingProfiles.size() == 1) {
+ existingProfile = existingProfiles.get(0);
+ if(profileToImport.isProfileToDelete()) {
+ logger.info("Profile is to delete!");
+ persistenceService.remove(existingProfile.getItemId(), Profile.class);
+ return true;
+ }
+ List<String> propertiesToOverwrite = profileToImport.getPropertiesToOverwrite();
+ if(profileToImport.isOverwriteExistingProfiles() && propertiesToOverwrite!=null && propertiesToOverwrite.size() > 0) { // We overwrite only properties marked to overwrite
+ logger.info("Properties to overwrite: {}", propertiesToOverwrite);
+ for(String propName : propertiesToOverwrite) {
+ existingProfile.getProperties().put(propName, profileToImport.getProperties().get(propName));
+ }
+ } else { //If no property is marked to overwrite we replace the whole properties map
+ logger.info("Overwrite all properties");
+ existingProfile.setProperties(profileToImport.getProperties());
+ }
+ } else if(existingProfiles.size() == 0) {
+ logger.info("New profile to add...");
+ BeanUtils.copyProperties(existingProfile, profileToImport);
+ } else {
+ logger.warn("{} occurences found for profile with {} = {}. Profile import is skipped", existingProfiles.size(),
+ profileToImport.getMergingProperty(), profileToImport.getProperties().get("firstName"));
+ }
+ logger.info("-------------------------------------");
+ return persistenceService.save(existingProfile);
+ }
+
+ @Override
+ public void bundleChanged(BundleEvent bundleEvent) {
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5d8f1be5/extensions/router/router-service/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/extensions/router/router-service/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/router/router-service/src/main/resources/OSGI-INF/blueprint/blueprint.xml
new file mode 100644
index 0000000..61200f2
--- /dev/null
+++ b/extensions/router/router-service/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -0,0 +1,39 @@
+<?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"
+ xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
+
+ <reference id="persistenceService" interface="org.apache.unomi.persistence.spi.PersistenceService"/>
+
+ <bean id="importConfigurationServiceImpl" class="org.apache.unomi.router.services.ImportConfigurationServiceImpl"
+ init-method="postConstruct" destroy-method="preDestroy">
+ <property name="persistenceService" ref="persistenceService"/>
+ <property name="bundleContext" ref="blueprintBundleContext"/>
+ </bean>
+ <service id="importConfigurationService" ref="importConfigurationServiceImpl" auto-export="interfaces"/>
+
+ <bean id="profileImportServiceImpl" class="org.apache.unomi.router.services.ProfileImportServiceImpl"
+ init-method="postConstruct" destroy-method="preDestroy">
+ <property name="persistenceService" ref="persistenceService"/>
+ <property name="bundleContext" ref="blueprintBundleContext"/>
+ </bean>
+ <service id="profileImportService" ref="profileImportServiceImpl" auto-export="interfaces"/>
+
+</blueprint>
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/5d8f1be5/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 0b87800..cc7d86d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -844,7 +844,6 @@
<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/5d8f1be5/router/pom.xml
----------------------------------------------------------------------
diff --git a/router/pom.xml b/router/pom.xml
deleted file mode 100644
index 5bf43ea..0000000
--- a/router/pom.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--
- ~ 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-dmf_1343-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/5d8f1be5/router/router-api/pom.xml
----------------------------------------------------------------------
diff --git a/router/router-api/pom.xml b/router/router-api/pom.xml
deleted file mode 100644
index 06207b3..0000000
--- a/router/router-api/pom.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-dmf_1343-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/5d8f1be5/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
deleted file mode 100644
index 770a7b5..0000000
--- a/router/router-api/src/main/java/org/apache/unomi/router/api/ImportConfiguration.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * 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 org.apache.unomi.api.MetadataItem;
-
-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 String name;
- private String description;
- private String configType;
- 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 name of the import configuration
- * @return the name of the import configuration
- */
- public String getName() { return this.name; }
-
- /**
- * Sets the name of the import configuration
- * @param name the name of the import configuration
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Retrieves the description of the import configuration
- * @return the description of the import configuration
- */
- public String getDescription() { return this.description; }
-
- /**
- * Sets the description of the import configuration
- * @param description the description of the import configuration
- */
- public void setDescription(String description) {
- this.description = description;
- }
-
-
- /**
- * Retrieves the config type of the import configuration
- * @return the config type of the import configuration
- */
- public String getConfigType() { return this.configType; }
-
- /**
- * Sets the config type of the import configuration
- * @param configType the config type of the import configuration
- */
- public void setConfigType(String configType) {
- this.configType = configType;
- }
-
- /**
- * 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/5d8f1be5/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
deleted file mode 100644
index 30e40e0..0000000
--- a/router/router-api/src/main/java/org/apache/unomi/router/api/ProfileToImport.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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/5d8f1be5/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
deleted file mode 100644
index cacd671..0000000
--- a/router/router-api/src/main/java/org/apache/unomi/router/api/services/ImportConfigurationService.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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/5d8f1be5/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
deleted file mode 100644
index aa7d182..0000000
--- a/router/router-api/src/main/java/org/apache/unomi/router/api/services/ProfileImportService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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/5d8f1be5/router/router-core/pom.xml
----------------------------------------------------------------------
diff --git a/router/router-core/pom.xml b/router/router-core/pom.xml
deleted file mode 100644
index b0b97c4..0000000
--- a/router/router-core/pom.xml
+++ /dev/null
@@ -1,182 +0,0 @@
-<?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-dmf_1343-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/5d8f1be5/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
deleted file mode 100644
index 2f3eaad..0000000
--- a/router/router-core/src/main/java/org/apache/unomi/router/core/context/ProfileImportCamelContext.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * 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("Initialize 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("Camel Context {} initialized successfully.");
-
- }
-
- 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/5d8f1be5/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
deleted file mode 100644
index e4eaa19..0000000
--- a/router/router-core/src/main/java/org/apache/unomi/router/core/processor/ConfigUpdateProcessor.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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/5d8f1be5/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
deleted file mode 100644
index 7fc7730..0000000
--- a/router/router-core/src/main/java/org/apache/unomi/router/core/processor/ImportConfigByFileNameProcessor.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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/5d8f1be5/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
deleted file mode 100644
index 30f79bf..0000000
--- a/router/router-core/src/main/java/org/apache/unomi/router/core/processor/LineSplitProcessor.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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/5d8f1be5/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
deleted file mode 100644
index 7e55185..0000000
--- a/router/router-core/src/main/java/org/apache/unomi/router/core/processor/UnomiStorageProcessor.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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/5d8f1be5/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
deleted file mode 100644
index ac71798..0000000
--- a/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportConfigUpdateRouteBuilder.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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().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/5d8f1be5/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
deleted file mode 100644
index 1b056fe..0000000
--- a/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportKafkaToUnomiRouteBuilder.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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/5d8f1be5/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
deleted file mode 100644
index 288d9d1..0000000
--- a/router/router-core/src/main/java/org/apache/unomi/router/core/route/ProfileImportOneShotRouteBuilder.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * 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;
- }
-}