http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index cdce2e6..3881b47 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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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/9cffa13e/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; - } -}