diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/BrokerEventProcessor.java b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/BrokerEventProcessor.java similarity index 96% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/BrokerEventProcessor.java rename to streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/BrokerEventProcessor.java index 14c0ce975a..01c89aeb09 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/BrokerEventProcessor.java +++ b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/BrokerEventProcessor.java @@ -16,7 +16,7 @@ * */ -package org.apache.streampipes.connect.iiot.protocol.stream; +package org.apache.streampipes.extensions.management.connect.adapter; import org.apache.streampipes.commons.exceptions.connect.ParseException; import org.apache.streampipes.extensions.api.connect.IEventCollector; diff --git a/streampipes-extensions/pom.xml b/streampipes-extensions/pom.xml index 58cdbe7287..82b347abb9 100644 --- a/streampipes-extensions/pom.xml +++ b/streampipes-extensions/pom.xml @@ -35,7 +35,10 @@ streampipes-connect-adapters-iiot streampipes-connectors-influx + streampipes-connectors-kafka streampipes-connectors-opcua + streampipes-connectors-pulsar + streampipes-connectors-rocketmq streampipes-extensions-all-iiot streampipes-extensions-all-jvm @@ -60,6 +63,9 @@ streampipes-sources-watertank-simulator streampipes-sources-vehicle-simulator + streampipes-connectors-tubemq + streampipes-connectors-nats + streampipes-connectors-mqtt diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml b/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml index 25e9f9c001..6820021229 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml +++ b/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml @@ -34,11 +34,41 @@ + + org.apache.streampipes + streampipes-connectors-kafka + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-connectors-mqtt + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-connectors-nats + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-connectors-pulsar + 0.93.0-SNAPSHOT + org.apache.streampipes streampipes-connectors-opcua 0.93.0-SNAPSHOT + + org.apache.streampipes + streampipes-connectors-rocketmq + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-connectors-tubemq + 0.93.0-SNAPSHOT + org.apache.streampipes streampipes-pipeline-elements-shared @@ -136,18 +166,6 @@ plc4j-driver-modbus runtime - - org.apache.pulsar - pulsar-client - - - org.apache.rocketmq - rocketmq-client-java - - - org.apache.inlong - tubemq-client - org.bouncycastle bcprov-jdk15on diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java index 05e154f498..72270d31fd 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java +++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java @@ -26,13 +26,13 @@ import org.apache.streampipes.connect.iiot.protocol.stream.FileReplayAdapter; import org.apache.streampipes.connect.iiot.protocol.stream.HttpServerProtocol; import org.apache.streampipes.connect.iiot.protocol.stream.HttpStreamProtocol; -import org.apache.streampipes.connect.iiot.protocol.stream.KafkaProtocol; -import org.apache.streampipes.connect.iiot.protocol.stream.MqttProtocol; -import org.apache.streampipes.connect.iiot.protocol.stream.NatsProtocol; -import org.apache.streampipes.connect.iiot.protocol.stream.TubeMQProtocol; -import org.apache.streampipes.connect.iiot.protocol.stream.pulsar.PulsarProtocol; -import org.apache.streampipes.connect.iiot.protocol.stream.rocketmq.RocketMQProtocol; +import org.apache.streampipes.extensions.connectors.kafka.adapter.KafkaProtocol; +import org.apache.streampipes.extensions.connectors.mqtt.adapter.MqttProtocol; +import org.apache.streampipes.extensions.connectors.nats.adapter.NatsProtocol; import org.apache.streampipes.extensions.connectors.opcua.adapter.OpcUaAdapter; +import org.apache.streampipes.extensions.connectors.pulsar.adapter.PulsarProtocol; +import org.apache.streampipes.extensions.connectors.rocketmq.adapter.RocketMQProtocol; +import org.apache.streampipes.extensions.connectors.tubemq.adapter.TubeMQProtocol; import org.apache.streampipes.extensions.management.model.SpServiceDefinition; import org.apache.streampipes.extensions.management.model.SpServiceDefinitionBuilder; import org.apache.streampipes.service.extensions.ExtensionsModelSubmitter; diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/iolink/IfmAlMqttAdapter.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/iolink/IfmAlMqttAdapter.java index 79b3dfe677..5a0648112d 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/iolink/IfmAlMqttAdapter.java +++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/iolink/IfmAlMqttAdapter.java @@ -29,13 +29,13 @@ import org.apache.streampipes.extensions.api.connect.context.IAdapterRuntimeContext; import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConfig; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConnectUtils; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConsumer; import org.apache.streampipes.extensions.management.connect.adapter.parser.JsonParsers; import org.apache.streampipes.extensions.management.connect.adapter.parser.json.JsonObjectParser; import org.apache.streampipes.model.AdapterType; import org.apache.streampipes.model.connect.guess.GuessSchema; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConfig; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConnectUtils; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConsumer; import org.apache.streampipes.sdk.builder.adapter.AdapterConfigurationBuilder; import org.apache.streampipes.sdk.helpers.Labels; import org.apache.streampipes.sdk.helpers.Locales; diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpServerProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpServerProtocol.java index be296d7b01..5fc242cc1f 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpServerProtocol.java +++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/HttpServerProtocol.java @@ -28,6 +28,7 @@ import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; import org.apache.streampipes.extensions.management.connect.HttpServerAdapterManagement; +import org.apache.streampipes.extensions.management.connect.adapter.BrokerEventProcessor; import org.apache.streampipes.extensions.management.connect.adapter.parser.Parsers; import org.apache.streampipes.model.AdapterType; import org.apache.streampipes.model.connect.guess.GuessSchema; diff --git a/streampipes-extensions/streampipes-connect-adapters/pom.xml b/streampipes-extensions/streampipes-connect-adapters/pom.xml index b3decd2431..2e07ec3028 100644 --- a/streampipes-extensions/streampipes-connect-adapters/pom.xml +++ b/streampipes-extensions/streampipes-connect-adapters/pom.xml @@ -34,6 +34,11 @@ + + org.apache.streampipes + streampipes-connectors-mqtt + 0.93.0-SNAPSHOT + org.apache.streampipes streampipes-pipeline-elements-shared diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicMQTTAdapter.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicMQTTAdapter.java index 363642eb81..5f613ec869 100644 --- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicMQTTAdapter.java +++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/flic/FlicMQTTAdapter.java @@ -25,12 +25,12 @@ import org.apache.streampipes.extensions.api.connect.context.IAdapterGuessSchemaContext; import org.apache.streampipes.extensions.api.connect.context.IAdapterRuntimeContext; import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConfig; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConnectUtils; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConsumer; import org.apache.streampipes.messaging.InternalEventProcessor; import org.apache.streampipes.model.AdapterType; import org.apache.streampipes.model.connect.guess.GuessSchema; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConfig; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConnectUtils; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConsumer; import org.apache.streampipes.sdk.builder.adapter.AdapterConfigurationBuilder; import org.apache.streampipes.sdk.helpers.Locales; import org.apache.streampipes.sdk.utils.Assets; diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/netio/NetioMQTTAdapter.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/netio/NetioMQTTAdapter.java index aecad79046..a9edfc5cf5 100644 --- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/netio/NetioMQTTAdapter.java +++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/netio/NetioMQTTAdapter.java @@ -26,12 +26,12 @@ import org.apache.streampipes.extensions.api.connect.context.IAdapterGuessSchemaContext; import org.apache.streampipes.extensions.api.connect.context.IAdapterRuntimeContext; import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConfig; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConnectUtils; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConsumer; import org.apache.streampipes.messaging.InternalEventProcessor; import org.apache.streampipes.model.AdapterType; import org.apache.streampipes.model.connect.guess.GuessSchema; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConfig; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConnectUtils; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConsumer; import org.apache.streampipes.sdk.builder.adapter.AdapterConfigurationBuilder; import org.apache.streampipes.sdk.helpers.Locales; import org.apache.streampipes.sdk.utils.Assets; diff --git a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/ti/TISensorTag.java b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/ti/TISensorTag.java index 5dac9770c0..9f944c262b 100644 --- a/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/ti/TISensorTag.java +++ b/streampipes-extensions/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/ti/TISensorTag.java @@ -24,12 +24,12 @@ import org.apache.streampipes.extensions.api.connect.context.IAdapterGuessSchemaContext; import org.apache.streampipes.extensions.api.connect.context.IAdapterRuntimeContext; import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConfig; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConnectUtils; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConsumer; import org.apache.streampipes.messaging.InternalEventProcessor; import org.apache.streampipes.model.AdapterType; import org.apache.streampipes.model.connect.guess.GuessSchema; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConfig; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConnectUtils; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConsumer; import org.apache.streampipes.sdk.builder.adapter.AdapterConfigurationBuilder; import org.apache.streampipes.sdk.builder.adapter.GuessSchemaBuilder; import org.apache.streampipes.sdk.helpers.Labels; diff --git a/streampipes-extensions/streampipes-connectors-kafka/pom.xml b/streampipes-extensions/streampipes-connectors-kafka/pom.xml new file mode 100644 index 0000000000..df89e4fb63 --- /dev/null +++ b/streampipes-extensions/streampipes-connectors-kafka/pom.xml @@ -0,0 +1,66 @@ + + + + + 4.0.0 + + org.apache.streampipes + streampipes-extensions + 0.93.0-SNAPSHOT + + + streampipes-connectors-kafka + + + + org.apache.streampipes + streampipes-extensions-api + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-extensions-management + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-sdk + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-messaging + 0.93.0-SNAPSHOT + compile + + + org.apache.streampipes + streampipes-messaging-kafka + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-wrapper-standalone + 0.93.0-SNAPSHOT + + + + diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/KafkaProtocol.java b/streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/adapter/KafkaProtocol.java similarity index 96% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/KafkaProtocol.java rename to streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/adapter/KafkaProtocol.java index e65806cb1b..f8b0340d51 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/KafkaProtocol.java +++ b/streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/adapter/KafkaProtocol.java @@ -16,7 +16,7 @@ * */ -package org.apache.streampipes.connect.iiot.protocol.stream; +package org.apache.streampipes.extensions.connectors.kafka.adapter; import org.apache.streampipes.commons.constants.GlobalStreamPipesConstants; @@ -31,6 +31,9 @@ import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; import org.apache.streampipes.extensions.api.runtime.SupportsRuntimeConfig; +import org.apache.streampipes.extensions.connectors.kafka.shared.kafka.KafkaConfig; +import org.apache.streampipes.extensions.connectors.kafka.shared.kafka.KafkaConnectUtils; +import org.apache.streampipes.extensions.management.connect.adapter.BrokerEventProcessor; import org.apache.streampipes.extensions.management.connect.adapter.parser.Parsers; import org.apache.streampipes.messaging.kafka.SpKafkaConsumer; import org.apache.streampipes.messaging.kafka.config.KafkaConfigAppender; @@ -42,8 +45,6 @@ import org.apache.streampipes.model.staticproperty.RuntimeResolvableOneOfStaticProperty; import org.apache.streampipes.model.staticproperty.StaticProperty; import org.apache.streampipes.model.staticproperty.StaticPropertyAlternative; -import org.apache.streampipes.pe.shared.config.kafka.kafka.KafkaConfig; -import org.apache.streampipes.pe.shared.config.kafka.kafka.KafkaConnectUtils; import org.apache.streampipes.sdk.builder.adapter.AdapterConfigurationBuilder; import org.apache.streampipes.sdk.helpers.Locales; import org.apache.streampipes.sdk.utils.Assets; diff --git a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/KafkaConfig.java b/streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/shared/kafka/KafkaConfig.java similarity index 97% rename from streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/KafkaConfig.java rename to streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/shared/kafka/KafkaConfig.java index 7e1cfecaf4..770cfc0561 100644 --- a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/KafkaConfig.java +++ b/streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/shared/kafka/KafkaConfig.java @@ -16,7 +16,7 @@ * */ -package org.apache.streampipes.pe.shared.config.kafka; +package org.apache.streampipes.extensions.connectors.kafka.shared.kafka; import org.apache.streampipes.messaging.kafka.config.AutoOffsetResetConfig; import org.apache.streampipes.messaging.kafka.security.KafkaSecurityConfig; @@ -74,12 +74,11 @@ public void setSecurityConfig(KafkaSecurityConfig securityConfig) { this.securityConfig = securityConfig; } - public void setAutoOffsetResetConfig(AutoOffsetResetConfig autoOffsetResetConfig) { - this.autoOffsetResetConfig = autoOffsetResetConfig; - } - public AutoOffsetResetConfig getAutoOffsetResetConfig() { return autoOffsetResetConfig; } + public void setAutoOffsetResetConfig(AutoOffsetResetConfig autoOffsetResetConfig) { + this.autoOffsetResetConfig = autoOffsetResetConfig; + } } diff --git a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/kafka/KafkaConnectUtils.java b/streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/shared/kafka/KafkaConnectUtils.java similarity index 99% rename from streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/kafka/KafkaConnectUtils.java rename to streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/shared/kafka/KafkaConnectUtils.java index 8112b8fe14..f56a230cbb 100644 --- a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/kafka/KafkaConnectUtils.java +++ b/streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/shared/kafka/KafkaConnectUtils.java @@ -16,7 +16,7 @@ * */ -package org.apache.streampipes.pe.shared.config.kafka.kafka; +package org.apache.streampipes.extensions.connectors.kafka.shared.kafka; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; import org.apache.streampipes.messaging.kafka.config.AutoOffsetResetConfig; diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/kafka/KafkaParameters.java b/streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/sink/KafkaParameters.java similarity index 89% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/kafka/KafkaParameters.java rename to streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/sink/KafkaParameters.java index 8e534a4179..b1e439547f 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/kafka/KafkaParameters.java +++ b/streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/sink/KafkaParameters.java @@ -16,10 +16,10 @@ * */ -package org.apache.streampipes.sinks.brokers.jvm.kafka; +package org.apache.streampipes.extensions.connectors.kafka.sink; -import org.apache.streampipes.pe.shared.config.kafka.KafkaConnectUtils; -import org.apache.streampipes.wrapper.params.compat.SinkParams; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; +import org.apache.streampipes.extensions.connectors.kafka.shared.kafka.KafkaConnectUtils; public class KafkaParameters { @@ -37,7 +37,7 @@ public class KafkaParameters { private final boolean useSSL; - public KafkaParameters(SinkParams params) { + public KafkaParameters(IDataSinkParameters params) { var extractor = params.extractor(); this.topic = extractor.singleValueParameter(KafkaConnectUtils.TOPIC_KEY, String.class); this.kafkaHost = extractor.singleValueParameter(KafkaConnectUtils.HOST_KEY, String.class); diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/kafka/KafkaPublishSink.java b/streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/sink/KafkaPublishSink.java similarity index 64% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/kafka/KafkaPublishSink.java rename to streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/sink/KafkaPublishSink.java index 09ad02c5e9..aaefccbc98 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/kafka/KafkaPublishSink.java +++ b/streampipes-extensions/streampipes-connectors-kafka/src/main/java/org/apache/streampipes/extensions/connectors/kafka/sink/KafkaPublishSink.java @@ -1,118 +1,123 @@ -/* - * 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.streampipes.sinks.brokers.jvm.kafka; - -import org.apache.streampipes.commons.exceptions.SpRuntimeException; -import org.apache.streampipes.dataformat.json.JsonDataFormatDefinition; -import org.apache.streampipes.extensions.api.pe.context.EventSinkRuntimeContext; -import org.apache.streampipes.messaging.kafka.SpKafkaProducer; -import org.apache.streampipes.messaging.kafka.security.KafkaSecurityConfig; -import org.apache.streampipes.messaging.kafka.security.KafkaSecuritySaslPlainConfig; -import org.apache.streampipes.messaging.kafka.security.KafkaSecuritySaslSSLConfig; -import org.apache.streampipes.messaging.kafka.security.KafkaSecurityUnauthenticatedPlainConfig; -import org.apache.streampipes.messaging.kafka.security.KafkaSecurityUnauthenticatedSSLConfig; -import org.apache.streampipes.model.DataSinkType; -import org.apache.streampipes.model.graph.DataSinkDescription; -import org.apache.streampipes.model.runtime.Event; -import org.apache.streampipes.pe.shared.config.kafka.KafkaConnectUtils; -import org.apache.streampipes.sdk.builder.DataSinkBuilder; -import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; -import org.apache.streampipes.sdk.helpers.EpRequirements; -import org.apache.streampipes.sdk.helpers.Labels; -import org.apache.streampipes.sdk.helpers.Locales; -import org.apache.streampipes.sdk.utils.Assets; -import org.apache.streampipes.wrapper.params.compat.SinkParams; -import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink; - -import java.util.List; -import java.util.Map; - -public class KafkaPublishSink extends StreamPipesDataSink { - - private SpKafkaProducer producer; - - private JsonDataFormatDefinition dataFormatDefinition; - - private KafkaParameters params; - - public KafkaPublishSink() { - } - - @Override - public DataSinkDescription declareModel() { - return DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.kafka") - .category(DataSinkType.MESSAGING) - .withLocales(Locales.EN) - .withAssets(Assets.DOCUMENTATION, Assets.ICON) - .requiredStream(StreamRequirementsBuilder - .create() - .requiredProperty(EpRequirements.anyProperty()) - .build()) - - .requiredTextParameter(Labels.withId(KafkaConnectUtils.TOPIC_KEY), false, false) - .requiredTextParameter(Labels.withId(KafkaConnectUtils.HOST_KEY), false, false) - .requiredIntegerParameter(Labels.withId(KafkaConnectUtils.PORT_KEY), 9092) - - .requiredAlternatives(Labels.withId(KafkaConnectUtils.ACCESS_MODE), - KafkaConnectUtils.getAlternativeUnauthenticatedPlain(), - KafkaConnectUtils.getAlternativeUnauthenticatedSSL(), - KafkaConnectUtils.getAlternativesSaslPlain(), - KafkaConnectUtils.getAlternativesSaslSSL()) - .build(); - } - - @Override - public void onInvocation(SinkParams parameters, EventSinkRuntimeContext runtimeContext) throws SpRuntimeException { - this.params = new KafkaParameters(parameters); - this.dataFormatDefinition = new JsonDataFormatDefinition(); - - KafkaSecurityConfig securityConfig; - // check if a user for the authentication is defined - if (params.useAuthentication()) { - securityConfig = params.isUseSSL() - ? new KafkaSecuritySaslSSLConfig(params.getUsername(), params.getPassword()) : - new KafkaSecuritySaslPlainConfig(params.getUsername(), params.getPassword()); - } else { - // set security config for none authenticated access - securityConfig = params.isUseSSL() - ? new KafkaSecurityUnauthenticatedSSLConfig() : - new KafkaSecurityUnauthenticatedPlainConfig(); - } - - this.producer = new SpKafkaProducer( - params.getKafkaHost() + ":" + params.getKafkaPort(), - params.getTopic(), - List.of(securityConfig)); - } - - @Override - public void onEvent(Event event) throws SpRuntimeException { - try { - Map rawEvent = event.getRaw(); - this.producer.publish(dataFormatDefinition.fromMap(rawEvent)); - } catch (SpRuntimeException e) { - e.printStackTrace(); - } - } - - @Override - public void onDetach() throws SpRuntimeException { - this.producer.disconnect(); - } -} +/* + * 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.streampipes.extensions.connectors.kafka.sink; + +import org.apache.streampipes.commons.exceptions.SpRuntimeException; +import org.apache.streampipes.dataformat.json.JsonDataFormatDefinition; +import org.apache.streampipes.extensions.api.pe.IStreamPipesDataSink; +import org.apache.streampipes.extensions.api.pe.config.IDataSinkConfiguration; +import org.apache.streampipes.extensions.api.pe.context.EventSinkRuntimeContext; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; +import org.apache.streampipes.extensions.connectors.kafka.shared.kafka.KafkaConnectUtils; +import org.apache.streampipes.messaging.kafka.SpKafkaProducer; +import org.apache.streampipes.messaging.kafka.security.KafkaSecurityConfig; +import org.apache.streampipes.messaging.kafka.security.KafkaSecuritySaslPlainConfig; +import org.apache.streampipes.messaging.kafka.security.KafkaSecuritySaslSSLConfig; +import org.apache.streampipes.messaging.kafka.security.KafkaSecurityUnauthenticatedPlainConfig; +import org.apache.streampipes.messaging.kafka.security.KafkaSecurityUnauthenticatedSSLConfig; +import org.apache.streampipes.model.DataSinkType; +import org.apache.streampipes.model.runtime.Event; +import org.apache.streampipes.sdk.builder.DataSinkBuilder; +import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; +import org.apache.streampipes.sdk.builder.sink.DataSinkConfiguration; +import org.apache.streampipes.sdk.helpers.EpRequirements; +import org.apache.streampipes.sdk.helpers.Labels; +import org.apache.streampipes.sdk.helpers.Locales; +import org.apache.streampipes.sdk.utils.Assets; + +import java.util.List; +import java.util.Map; + +public class KafkaPublishSink implements IStreamPipesDataSink { + + private SpKafkaProducer producer; + + private JsonDataFormatDefinition dataFormatDefinition; + + private KafkaParameters params; + + public KafkaPublishSink() { + } + + @Override + public IDataSinkConfiguration declareConfig() { + return DataSinkConfiguration.create( + KafkaPublishSink::new, + DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.kafka") + .category(DataSinkType.MESSAGING) + .withLocales(Locales.EN) + .withAssets(Assets.DOCUMENTATION, Assets.ICON) + .requiredStream(StreamRequirementsBuilder + .create() + .requiredProperty(EpRequirements.anyProperty()) + .build()) + + .requiredTextParameter(Labels.withId(KafkaConnectUtils.TOPIC_KEY), false, false) + .requiredTextParameter(Labels.withId(KafkaConnectUtils.HOST_KEY), false, false) + .requiredIntegerParameter(Labels.withId(KafkaConnectUtils.PORT_KEY), 9092) + + .requiredAlternatives(Labels.withId(KafkaConnectUtils.ACCESS_MODE), + KafkaConnectUtils.getAlternativeUnauthenticatedPlain(), + KafkaConnectUtils.getAlternativeUnauthenticatedSSL(), + KafkaConnectUtils.getAlternativesSaslPlain(), + KafkaConnectUtils.getAlternativesSaslSSL()) + .build() + ); + } + + @Override + public void onPipelineStarted(IDataSinkParameters parameters, + EventSinkRuntimeContext runtimeContext) { + this.params = new KafkaParameters(parameters); + this.dataFormatDefinition = new JsonDataFormatDefinition(); + + KafkaSecurityConfig securityConfig; + // check if a user for the authentication is defined + if (params.useAuthentication()) { + securityConfig = params.isUseSSL() + ? new KafkaSecuritySaslSSLConfig(params.getUsername(), params.getPassword()) : + new KafkaSecuritySaslPlainConfig(params.getUsername(), params.getPassword()); + } else { + // set security config for none authenticated access + securityConfig = params.isUseSSL() + ? new KafkaSecurityUnauthenticatedSSLConfig() : + new KafkaSecurityUnauthenticatedPlainConfig(); + } + + this.producer = new SpKafkaProducer( + params.getKafkaHost() + ":" + params.getKafkaPort(), + params.getTopic(), + List.of(securityConfig)); + } + + @Override + public void onEvent(Event event) throws SpRuntimeException { + try { + Map rawEvent = event.getRaw(); + this.producer.publish(dataFormatDefinition.fromMap(rawEvent)); + } catch (SpRuntimeException e) { + e.printStackTrace(); + } + } + + @Override + public void onPipelineStopped() { + this.producer.disconnect(); + } +} diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/documentation.md b/streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/documentation.md rename to streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/documentation.md diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/icon.png b/streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/icon.png similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/icon.png rename to streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/icon.png diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/strings.en b/streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/strings.en similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/strings.en rename to streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.kafka/strings.en diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/documentation.md b/streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/documentation.md rename to streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/documentation.md diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/icon.png b/streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/icon.png similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/icon.png rename to streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/icon.png diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/strings.en b/streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/strings.en similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/strings.en rename to streampipes-extensions/streampipes-connectors-kafka/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.kafka/strings.en diff --git a/streampipes-extensions/streampipes-connectors-mqtt/pom.xml b/streampipes-extensions/streampipes-connectors-mqtt/pom.xml new file mode 100644 index 0000000000..012df08cd7 --- /dev/null +++ b/streampipes-extensions/streampipes-connectors-mqtt/pom.xml @@ -0,0 +1,55 @@ + + + + + 4.0.0 + + org.apache.streampipes + streampipes-extensions + 0.93.0-SNAPSHOT + + + streampipes-connectors-mqtt + + + + org.apache.streampipes + streampipes-extensions-api + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-extensions-management + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-sdk + 0.93.0-SNAPSHOT + + + + org.fusesource.mqtt-client + mqtt-client + + + + diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/MqttProtocol.java b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/adapter/MqttProtocol.java similarity index 92% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/MqttProtocol.java rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/adapter/MqttProtocol.java index cb247d2e81..b27f2205f0 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/MqttProtocol.java +++ b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/adapter/MqttProtocol.java @@ -15,7 +15,7 @@ * limitations under the License. * */ -package org.apache.streampipes.connect.iiot.protocol.stream; +package org.apache.streampipes.extensions.connectors.mqtt.adapter; import org.apache.streampipes.commons.exceptions.connect.AdapterException; import org.apache.streampipes.extensions.api.connect.IAdapterConfiguration; @@ -25,13 +25,14 @@ import org.apache.streampipes.extensions.api.connect.context.IAdapterRuntimeContext; import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConfig; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConnectUtils; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConsumer; +import org.apache.streampipes.extensions.management.connect.adapter.BrokerEventProcessor; import org.apache.streampipes.extensions.management.connect.adapter.parser.Parsers; import org.apache.streampipes.messaging.InternalEventProcessor; import org.apache.streampipes.model.AdapterType; import org.apache.streampipes.model.connect.guess.GuessSchema; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConfig; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConnectUtils; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConsumer; import org.apache.streampipes.sdk.builder.adapter.AdapterConfigurationBuilder; import org.apache.streampipes.sdk.helpers.Locales; import org.apache.streampipes.sdk.utils.Assets; diff --git a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/mqtt/MqttConfig.java b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/shared/MqttConfig.java similarity index 95% rename from streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/mqtt/MqttConfig.java rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/shared/MqttConfig.java index 71c049e7f2..4a3b30a224 100644 --- a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/mqtt/MqttConfig.java +++ b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/shared/MqttConfig.java @@ -15,7 +15,7 @@ * limitations under the License. * */ -package org.apache.streampipes.pe.shared.config.mqtt; +package org.apache.streampipes.extensions.connectors.mqtt.shared; public class MqttConfig { diff --git a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/mqtt/MqttConnectUtils.java b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/shared/MqttConnectUtils.java similarity index 98% rename from streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/mqtt/MqttConnectUtils.java rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/shared/MqttConnectUtils.java index 102384d2d4..aedbf922a0 100644 --- a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/mqtt/MqttConnectUtils.java +++ b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/shared/MqttConnectUtils.java @@ -16,7 +16,7 @@ * */ -package org.apache.streampipes.pe.shared.config.mqtt; +package org.apache.streampipes.extensions.connectors.mqtt.shared; import org.apache.streampipes.extensions.api.extractor.IParameterExtractor; import org.apache.streampipes.model.staticproperty.StaticPropertyAlternative; diff --git a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/mqtt/MqttConsumer.java b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/shared/MqttConsumer.java similarity index 97% rename from streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/mqtt/MqttConsumer.java rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/shared/MqttConsumer.java index 855d0a28de..48c45798c6 100644 --- a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/mqtt/MqttConsumer.java +++ b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/shared/MqttConsumer.java @@ -15,7 +15,7 @@ * limitations under the License. * */ -package org.apache.streampipes.pe.shared.config.mqtt; +package org.apache.streampipes.extensions.connectors.mqtt.shared; import org.apache.streampipes.messaging.InternalEventProcessor; diff --git a/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/MqttPublisherSink.java b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/MqttPublisherSink.java new file mode 100644 index 0000000000..c173684603 --- /dev/null +++ b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/MqttPublisherSink.java @@ -0,0 +1,157 @@ +/* + * 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.streampipes.extensions.connectors.mqtt.sink; + +import org.apache.streampipes.commons.exceptions.SpRuntimeException; +import org.apache.streampipes.extensions.api.pe.IStreamPipesDataSink; +import org.apache.streampipes.extensions.api.pe.config.IDataSinkConfiguration; +import org.apache.streampipes.extensions.api.pe.context.EventSinkRuntimeContext; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; +import org.apache.streampipes.extensions.connectors.mqtt.sink.common.MqttClient; +import org.apache.streampipes.model.DataSinkType; +import org.apache.streampipes.model.runtime.Event; +import org.apache.streampipes.model.staticproperty.Option; +import org.apache.streampipes.sdk.StaticProperties; +import org.apache.streampipes.sdk.builder.DataSinkBuilder; +import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; +import org.apache.streampipes.sdk.builder.sink.DataSinkConfiguration; +import org.apache.streampipes.sdk.helpers.Alternatives; +import org.apache.streampipes.sdk.helpers.Labels; +import org.apache.streampipes.sdk.helpers.Locales; +import org.apache.streampipes.sdk.utils.Assets; + +import java.util.Arrays; + +public class MqttPublisherSink implements IStreamPipesDataSink { + + private static final int DEFAULT_MQTT_PORT = 1883; + private static final int DEFAULT_RECONNECT_PERIOD = 30; + private static final int DEFAULT_KEEP_ALIVE = 30; + + public static final String TOPIC = "topic"; + public static final String HOST = "host"; + public static final String PORT = "port"; + public static final String AUTH_MODE = "auth-mode"; + public static final String NO_AUTH_ALTERNATIVE = "no-auth-alternative"; + public static final String AUTH_ALTERNATIVE = "basic-auth-alternative"; + public static final String USERNAME_GROUP = "username-group"; + public static final String USERNAME = "username"; + public static final String PASSWORD = "password"; + public static final String QOS_LEVEL_KEY = "qos-level"; + public static final String CLEAN_SESSION_KEY = "clean-session"; + public static final String WILL_RETAIN = "will-retain"; + public static final String ENCRYPTION_MODE = "encryption-mode"; + public static final String RECONNECT_PERIOD_IN_SEC = "reconnect-period"; + public static final String WILL_MODE = "lwt-mode"; + public static final String NO_WILL_ALTERNATIVE = "no-lwt-alternative"; + public static final String WILL_ALTERNATIVE = "lwt-alternative"; + public static final String WILL_GROUP = "lwt-group"; + public static final String WILL_TOPIC = "lwt-topic"; + public static final String WILL_MESSAGE = "lwt-message"; + public static final String WILL_QOS = "lwt-qos-level"; + public static final String RETAIN = "retain"; + public static final String KEEP_ALIVE_IN_SEC = "keep-alive"; + public static final String MQTT_COMPLIANT = "mqtt-version-compliant"; + + private MqttClient mqttClient; + + @Override + public IDataSinkConfiguration declareConfig() { + return DataSinkConfiguration.create( + MqttPublisherSink::new, + DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.mqtt") + .category(DataSinkType.MESSAGING) + .withLocales(Locales.EN) + .withAssets(Assets.DOCUMENTATION, Assets.ICON) + .requiredStream(StreamRequirementsBuilder.any()) + .requiredTextParameter(Labels.withId(TOPIC)) + .requiredTextParameter(Labels.withId(HOST)) + .requiredIntegerParameter(Labels.withId(PORT), DEFAULT_MQTT_PORT) + .requiredAlternatives( + Labels.withId(AUTH_MODE), + Alternatives.from(Labels.withId(NO_AUTH_ALTERNATIVE), true), + Alternatives.from(Labels.withId(AUTH_ALTERNATIVE), + StaticProperties.group(Labels.withId(USERNAME_GROUP), + StaticProperties.stringFreeTextProperty(Labels.withId(USERNAME)), + StaticProperties.secretValue(Labels.withId(PASSWORD))))) + .requiredSingleValueSelection( + Labels.withId(ENCRYPTION_MODE), + Arrays.asList( + new Option("TCP", true), + // SSL not yet supported + new Option("SSL/TLS", false))) + .requiredSingleValueSelection( + Labels.withId(QOS_LEVEL_KEY), + Arrays.asList( + new Option("0 - at-most-once", false), + new Option("1 - at-least-once", true), + new Option("2 - exactly-once", false))) + .requiredSingleValueSelection( + Labels.withId(RETAIN), + Arrays.asList( + new Option("Yes", false), + new Option("No", true))) + .requiredSingleValueSelection( + Labels.withId(CLEAN_SESSION_KEY), + Arrays.asList( + new Option("Yes", true), + new Option("No", false))) + .requiredIntegerParameter(Labels.withId(RECONNECT_PERIOD_IN_SEC), DEFAULT_RECONNECT_PERIOD) + .requiredIntegerParameter(Labels.withId(KEEP_ALIVE_IN_SEC), DEFAULT_KEEP_ALIVE) + .requiredSingleValueSelection( + Labels.withId(MQTT_COMPLIANT), + Arrays.asList( + new Option("Yes", true), + new Option("No", false))) + .requiredAlternatives( + Labels.withId(WILL_MODE), + Alternatives.from(Labels.withId(NO_WILL_ALTERNATIVE), true), + Alternatives.from(Labels.withId(WILL_ALTERNATIVE), + StaticProperties.group(Labels.withId(WILL_GROUP), + StaticProperties.stringFreeTextProperty(Labels.withId(WILL_TOPIC)), + StaticProperties.stringFreeTextProperty(Labels.withId(WILL_MESSAGE)), + StaticProperties.singleValueSelection(Labels.withId(WILL_RETAIN), + Arrays.asList( + new Option("Yes", false), + new Option("No", true))), + StaticProperties.singleValueSelection( + Labels.withId(WILL_QOS), + Arrays.asList( + new Option("0 - at-most-once", true), + new Option("1 - at-least-once", false), + new Option("2 - exactly-once", false)))))) + .build() + ); + } + + @Override + public void onPipelineStarted(IDataSinkParameters params, EventSinkRuntimeContext runtimeContext) { + this.mqttClient = new MqttClient(params); + this.mqttClient.connect(); + } + + @Override + public void onEvent(Event event) throws SpRuntimeException { + this.mqttClient.publish(event); + } + + @Override + public void onPipelineStopped() { + this.mqttClient.disconnect(); + } +} diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/MqttClient.java b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/common/MqttClient.java similarity index 94% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/MqttClient.java rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/common/MqttClient.java index 6c94691f53..a780653c27 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/MqttClient.java +++ b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/common/MqttClient.java @@ -15,14 +15,12 @@ * limitations under the License. * */ -package org.apache.streampipes.sinks.brokers.jvm.mqtt; +package org.apache.streampipes.extensions.connectors.mqtt.sink.common; import org.apache.streampipes.commons.exceptions.SpRuntimeException; import org.apache.streampipes.dataformat.json.JsonDataFormatDefinition; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; import org.apache.streampipes.model.runtime.Event; -import org.apache.streampipes.sinks.brokers.jvm.mqtt.common.MqttOptions; -import org.apache.streampipes.sinks.brokers.jvm.mqtt.common.MqttUtils; -import org.apache.streampipes.wrapper.params.compat.SinkParams; import org.fusesource.mqtt.client.BlockingConnection; import org.fusesource.mqtt.client.MQTT; @@ -36,7 +34,7 @@ public class MqttClient { private MQTT mqtt; private BlockingConnection conn; - public MqttClient(SinkParams params) { + public MqttClient(IDataSinkParameters params) { this.options = new MqttOptions(params); this.createMqttClient(); } diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/common/MqttOptions.java b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/common/MqttOptions.java similarity index 67% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/common/MqttOptions.java rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/common/MqttOptions.java index b5b6c3a53d..d6823c843c 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/common/MqttOptions.java +++ b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/common/MqttOptions.java @@ -15,32 +15,32 @@ * limitations under the License. * */ -package org.apache.streampipes.sinks.brokers.jvm.mqtt.common; +package org.apache.streampipes.extensions.connectors.mqtt.sink.common; -import org.apache.streampipes.wrapper.params.compat.SinkParams; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; import org.fusesource.mqtt.client.QoS; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.AUTH_ALTERNATIVE; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.AUTH_MODE; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.CLEAN_SESSION_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.ENCRYPTION_MODE; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.HOST; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.KEEP_ALIVE_IN_SEC; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.MQTT_COMPLIANT; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.PASSWORD; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.PORT; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.QOS_LEVEL_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.RECONNECT_PERIOD_IN_SEC; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.RETAIN; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.TOPIC; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.USERNAME; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.WILL_ALTERNATIVE; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.WILL_MESSAGE; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.WILL_MODE; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.WILL_QOS; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.WILL_RETAIN; -import static org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink.WILL_TOPIC; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.AUTH_ALTERNATIVE; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.AUTH_MODE; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.CLEAN_SESSION_KEY; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.ENCRYPTION_MODE; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.HOST; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.KEEP_ALIVE_IN_SEC; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.MQTT_COMPLIANT; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.PASSWORD; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.PORT; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.QOS_LEVEL_KEY; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.RECONNECT_PERIOD_IN_SEC; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.RETAIN; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.TOPIC; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.USERNAME; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.WILL_ALTERNATIVE; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.WILL_MESSAGE; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.WILL_MODE; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.WILL_QOS; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.WILL_RETAIN; +import static org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink.WILL_TOPIC; public class MqttOptions { @@ -65,7 +65,7 @@ public class MqttOptions { private String willMessage = ""; private String mqttProtocolVersion = "3.1"; - public MqttOptions(SinkParams params) { + public MqttOptions(IDataSinkParameters params) { var extract = params.extractor(); this.clientId = MqttUtils.runningInstanceId(params.getModel().getElementId()); diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/common/MqttUtils.java b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/common/MqttUtils.java similarity index 97% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/common/MqttUtils.java rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/common/MqttUtils.java index 5cc74317fb..9c3233df0c 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/common/MqttUtils.java +++ b/streampipes-extensions/streampipes-connectors-mqtt/src/main/java/org/apache/streampipes/extensions/connectors/mqtt/sink/common/MqttUtils.java @@ -15,7 +15,7 @@ * limitations under the License. * */ -package org.apache.streampipes.sinks.brokers.jvm.mqtt.common; +package org.apache.streampipes.extensions.connectors.mqtt.sink.common; import org.apache.streampipes.commons.exceptions.SpRuntimeException; diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/documentation.md b/streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/documentation.md rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/documentation.md diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/icon.png b/streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/icon.png similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/icon.png rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/icon.png diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/strings.en b/streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/strings.en similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/strings.en rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.mqtt/strings.en diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/documentation.md b/streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/documentation.md rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/documentation.md diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/icon.png b/streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/icon.png similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/icon.png rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/icon.png diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/strings.en b/streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/strings.en similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/strings.en rename to streampipes-extensions/streampipes-connectors-mqtt/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.mqtt/strings.en diff --git a/streampipes-extensions/streampipes-connectors-nats/pom.xml b/streampipes-extensions/streampipes-connectors-nats/pom.xml new file mode 100644 index 0000000000..02a6c948da --- /dev/null +++ b/streampipes-extensions/streampipes-connectors-nats/pom.xml @@ -0,0 +1,56 @@ + + + + + 4.0.0 + + org.apache.streampipes + streampipes-extensions + 0.93.0-SNAPSHOT + + + streampipes-connectors-nats + + + + org.apache.streampipes + streampipes-extensions-api + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-extensions-management + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-sdk + 0.93.0-SNAPSHOT + + + + org.apache.streampipes + streampipes-messaging-nats + 0.93.0-SNAPSHOT + + + + diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/NatsProtocol.java b/streampipes-extensions/streampipes-connectors-nats/src/main/java/org/apache/streampipes/extensions/connectors/nats/adapter/NatsProtocol.java similarity index 81% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/NatsProtocol.java rename to streampipes-extensions/streampipes-connectors-nats/src/main/java/org/apache/streampipes/extensions/connectors/nats/adapter/NatsProtocol.java index ce3a2a778c..5be2374586 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/NatsProtocol.java +++ b/streampipes-extensions/streampipes-connectors-nats/src/main/java/org/apache/streampipes/extensions/connectors/nats/adapter/NatsProtocol.java @@ -16,7 +16,7 @@ * */ -package org.apache.streampipes.connect.iiot.protocol.stream; +package org.apache.streampipes.extensions.connectors.nats.adapter; import org.apache.streampipes.commons.exceptions.SpRuntimeException; import org.apache.streampipes.commons.exceptions.connect.AdapterException; @@ -28,6 +28,8 @@ import org.apache.streampipes.extensions.api.connect.context.IAdapterRuntimeContext; import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; +import org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils; +import org.apache.streampipes.extensions.management.connect.adapter.BrokerEventProcessor; import org.apache.streampipes.extensions.management.connect.adapter.parser.Parsers; import org.apache.streampipes.messaging.InternalEventProcessor; import org.apache.streampipes.messaging.nats.NatsConsumer; @@ -35,7 +37,6 @@ import org.apache.streampipes.model.connect.guess.GuessSchema; import org.apache.streampipes.model.nats.NatsConfig; import org.apache.streampipes.model.staticproperty.StaticPropertyAlternative; -import org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils; import org.apache.streampipes.sdk.StaticProperties; import org.apache.streampipes.sdk.builder.adapter.AdapterConfigurationBuilder; import org.apache.streampipes.sdk.helpers.Alternatives; @@ -48,19 +49,19 @@ import java.util.List; import java.util.concurrent.TimeUnit; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.ACCESS_MODE; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.ANONYMOUS_ACCESS; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.CONNECTION_PROPERTIES; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.CONNECTION_PROPERTIES_GROUP; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.CUSTOM_PROPERTIES; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.NONE_PROPERTIES; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.PASSWORD_KEY; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.PROPERTIES_KEY; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.SUBJECT_KEY; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.URLS_KEY; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.USERNAME_ACCESS; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.USERNAME_GROUP; -import static org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils.USERNAME_KEY; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.ACCESS_MODE; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.ANONYMOUS_ACCESS; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.CONNECTION_PROPERTIES; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.CONNECTION_PROPERTIES_GROUP; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.CUSTOM_PROPERTIES; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.NONE_PROPERTIES; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.PASSWORD_KEY; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.PROPERTIES_KEY; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.SUBJECT_KEY; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.URLS_KEY; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.USERNAME_ACCESS; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.USERNAME_GROUP; +import static org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils.USERNAME_KEY; public class NatsProtocol implements StreamPipesAdapter { diff --git a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/nats/NatsConfigUtils.java b/streampipes-extensions/streampipes-connectors-nats/src/main/java/org/apache/streampipes/extensions/connectors/nats/shared/NatsConfigUtils.java similarity index 97% rename from streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/nats/NatsConfigUtils.java rename to streampipes-extensions/streampipes-connectors-nats/src/main/java/org/apache/streampipes/extensions/connectors/nats/shared/NatsConfigUtils.java index 32560de1e8..59194dd6f2 100644 --- a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/nats/NatsConfigUtils.java +++ b/streampipes-extensions/streampipes-connectors-nats/src/main/java/org/apache/streampipes/extensions/connectors/nats/shared/NatsConfigUtils.java @@ -16,7 +16,7 @@ * */ -package org.apache.streampipes.pe.shared.config.nats; +package org.apache.streampipes.extensions.connectors.nats.shared; import org.apache.streampipes.extensions.api.extractor.IParameterExtractor; import org.apache.streampipes.model.nats.NatsConfig; diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/nats/NatsController.java b/streampipes-extensions/streampipes-connectors-nats/src/main/java/org/apache/streampipes/extensions/connectors/nats/sink/NatsSink.java similarity index 74% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/nats/NatsController.java rename to streampipes-extensions/streampipes-connectors-nats/src/main/java/org/apache/streampipes/extensions/connectors/nats/sink/NatsSink.java index 6959b4e7dc..4c55c68265 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/nats/NatsController.java +++ b/streampipes-extensions/streampipes-connectors-nats/src/main/java/org/apache/streampipes/extensions/connectors/nats/sink/NatsSink.java @@ -16,29 +16,30 @@ * */ -package org.apache.streampipes.sinks.brokers.jvm.nats; +package org.apache.streampipes.extensions.connectors.nats.sink; import org.apache.streampipes.commons.exceptions.SpRuntimeException; import org.apache.streampipes.dataformat.json.JsonDataFormatDefinition; +import org.apache.streampipes.extensions.api.pe.IStreamPipesDataSink; +import org.apache.streampipes.extensions.api.pe.config.IDataSinkConfiguration; import org.apache.streampipes.extensions.api.pe.context.EventSinkRuntimeContext; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; import org.apache.streampipes.messaging.nats.NatsUtils; import org.apache.streampipes.model.DataSinkType; -import org.apache.streampipes.model.graph.DataSinkDescription; import org.apache.streampipes.model.nats.NatsConfig; import org.apache.streampipes.model.runtime.Event; import org.apache.streampipes.model.staticproperty.StaticPropertyAlternative; -import org.apache.streampipes.pe.shared.config.nats.NatsConfigUtils; +import org.apache.streampipes.extensions.connectors.nats.shared.NatsConfigUtils; import org.apache.streampipes.sdk.StaticProperties; import org.apache.streampipes.sdk.builder.DataSinkBuilder; import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; +import org.apache.streampipes.sdk.builder.sink.DataSinkConfiguration; import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor; import org.apache.streampipes.sdk.helpers.Alternatives; import org.apache.streampipes.sdk.helpers.EpRequirements; import org.apache.streampipes.sdk.helpers.Labels; import org.apache.streampipes.sdk.helpers.Locales; import org.apache.streampipes.sdk.utils.Assets; -import org.apache.streampipes.wrapper.params.compat.SinkParams; -import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink; import io.nats.client.Connection; import io.nats.client.Nats; @@ -50,9 +51,9 @@ import java.util.Map; import java.util.concurrent.TimeoutException; -public class NatsController extends StreamPipesDataSink { +public class NatsSink implements IStreamPipesDataSink { - private static final Logger LOG = LoggerFactory.getLogger(NatsController.class); + private static final Logger LOG = LoggerFactory.getLogger(NatsSink.class); private static final String SUBJECT_KEY = "subject"; private static final String URLS_KEY = "natsUrls"; @@ -75,22 +76,25 @@ public class NatsController extends StreamPipesDataSink { private JsonDataFormatDefinition dataFormatDefinition; @Override - public DataSinkDescription declareModel() { - return DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.nats") - .category(DataSinkType.MESSAGING) - .withLocales(Locales.EN) - .withAssets(Assets.DOCUMENTATION, Assets.ICON) - .requiredStream(StreamRequirementsBuilder - .create() - .requiredProperty(EpRequirements.anyProperty()) - .build()) - .requiredTextParameter(Labels.withId(SUBJECT_KEY), false, false) - .requiredTextParameter(Labels.withId(URLS_KEY), false, false) - .requiredAlternatives(Labels.withId(ACCESS_MODE), getAccessModeAlternativesOne(), - getAccessModeAlternativesTwo()) - .requiredAlternatives(Labels.withId(CONNECTION_PROPERTIES), getConnectionPropertiesAlternativesOne(), - getConnectionPropertiesAlternativesTwo()) - .build(); + public IDataSinkConfiguration declareConfig() { + return DataSinkConfiguration.create( + NatsSink::new, + DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.nats") + .category(DataSinkType.MESSAGING) + .withLocales(Locales.EN) + .withAssets(Assets.DOCUMENTATION, Assets.ICON) + .requiredStream(StreamRequirementsBuilder + .create() + .requiredProperty(EpRequirements.anyProperty()) + .build()) + .requiredTextParameter(Labels.withId(SUBJECT_KEY), false, false) + .requiredTextParameter(Labels.withId(URLS_KEY), false, false) + .requiredAlternatives(Labels.withId(ACCESS_MODE), getAccessModeAlternativesOne(), + getAccessModeAlternativesTwo()) + .requiredAlternatives(Labels.withId(CONNECTION_PROPERTIES), getConnectionPropertiesAlternativesOne(), + getConnectionPropertiesAlternativesTwo()) + .build() + ); } public static StaticPropertyAlternative getAccessModeAlternativesOne() { @@ -103,7 +107,6 @@ public static StaticPropertyAlternative getAccessModeAlternativesTwo() { StaticProperties.group(Labels.withId(USERNAME_GROUP), StaticProperties.stringFreeTextProperty(Labels.withId(USERNAME_KEY)), StaticProperties.secretValue(Labels.withId(PASSWORD_KEY)))); - } public static StaticPropertyAlternative getConnectionPropertiesAlternativesOne() { @@ -119,11 +122,10 @@ public static StaticPropertyAlternative getConnectionPropertiesAlternativesTwo() } @Override - public void onInvocation(SinkParams parameters, - EventSinkRuntimeContext runtimeContext) throws SpRuntimeException { + public void onPipelineStarted(IDataSinkParameters params, EventSinkRuntimeContext runtimeContext) { this.dataFormatDefinition = new JsonDataFormatDefinition(); NatsConfig natsConfig = NatsConfigUtils.from( - StaticPropertyExtractor.from(parameters.getModel().getStaticProperties())); + StaticPropertyExtractor.from(params.getModel().getStaticProperties())); this.subject = natsConfig.getSubject(); Options options = NatsUtils.makeNatsOptions(natsConfig); @@ -145,7 +147,7 @@ public void onEvent(Event inputEvent) throws SpRuntimeException { } @Override - public void onDetach() throws SpRuntimeException { + public void onPipelineStopped() { try { natsConnection.flush(Duration.ofMillis(50)); natsConnection.close(); diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/documentation.md b/streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/documentation.md rename to streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/documentation.md diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/icon.png b/streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/icon.png similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/icon.png rename to streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/icon.png diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/strings.en b/streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/strings.en similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/strings.en rename to streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.nats/strings.en diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/documentation.md b/streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/documentation.md rename to streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/documentation.md diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/icon.png b/streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/icon.png similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/icon.png rename to streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/icon.png diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/strings.en b/streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/strings.en similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/strings.en rename to streampipes-extensions/streampipes-connectors-nats/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.nats/strings.en diff --git a/streampipes-extensions/streampipes-connectors-pulsar/pom.xml b/streampipes-extensions/streampipes-connectors-pulsar/pom.xml new file mode 100644 index 0000000000..d294810454 --- /dev/null +++ b/streampipes-extensions/streampipes-connectors-pulsar/pom.xml @@ -0,0 +1,66 @@ + + + + + 4.0.0 + + org.apache.streampipes + streampipes-extensions + 0.93.0-SNAPSHOT + + + streampipes-connectors-pulsar + + + + org.apache.streampipes + streampipes-extensions-api + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-extensions-management + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-sdk + 0.93.0-SNAPSHOT + + + org.apache.pulsar + pulsar-client + + + + junit + junit + test + + + + org.mockito + mockito-core + test + + + + diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarConfig.java b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/adapter/PulsarConfig.java similarity index 79% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarConfig.java rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/adapter/PulsarConfig.java index 6387e7a987..725f74f89d 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarConfig.java +++ b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/adapter/PulsarConfig.java @@ -16,14 +16,14 @@ * */ -package org.apache.streampipes.connect.iiot.protocol.stream.pulsar; +package org.apache.streampipes.extensions.connectors.pulsar.adapter; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; -import static org.apache.streampipes.connect.iiot.protocol.stream.pulsar.PulsarProtocol.PULSAR_BROKER_HOST; -import static org.apache.streampipes.connect.iiot.protocol.stream.pulsar.PulsarProtocol.PULSAR_BROKER_PORT; -import static org.apache.streampipes.connect.iiot.protocol.stream.pulsar.PulsarProtocol.PULSAR_SUBSCRIPTION_NAME; -import static org.apache.streampipes.connect.iiot.protocol.stream.pulsar.PulsarProtocol.PULSAR_TOPIC; +import static org.apache.streampipes.extensions.connectors.pulsar.adapter.PulsarProtocol.PULSAR_BROKER_HOST; +import static org.apache.streampipes.extensions.connectors.pulsar.adapter.PulsarProtocol.PULSAR_BROKER_PORT; +import static org.apache.streampipes.extensions.connectors.pulsar.adapter.PulsarProtocol.PULSAR_SUBSCRIPTION_NAME; +import static org.apache.streampipes.extensions.connectors.pulsar.adapter.PulsarProtocol.PULSAR_TOPIC; public class PulsarConfig { diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarProtocol.java b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/adapter/PulsarProtocol.java similarity index 97% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarProtocol.java rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/adapter/PulsarProtocol.java index 677be44cbd..04ea26dead 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarProtocol.java +++ b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/adapter/PulsarProtocol.java @@ -15,12 +15,11 @@ * limitations under the License. * */ -package org.apache.streampipes.connect.iiot.protocol.stream.pulsar; +package org.apache.streampipes.extensions.connectors.pulsar.adapter; import org.apache.streampipes.commons.exceptions.SpConfigurationException; import org.apache.streampipes.commons.exceptions.connect.AdapterException; import org.apache.streampipes.commons.exceptions.connect.ParseException; -import org.apache.streampipes.connect.iiot.protocol.stream.BrokerEventProcessor; import org.apache.streampipes.extensions.api.connect.IAdapterConfiguration; import org.apache.streampipes.extensions.api.connect.IEventCollector; import org.apache.streampipes.extensions.api.connect.StreamPipesAdapter; @@ -29,6 +28,7 @@ import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; import org.apache.streampipes.extensions.api.runtime.SupportsRuntimeConfig; +import org.apache.streampipes.extensions.management.connect.adapter.BrokerEventProcessor; import org.apache.streampipes.extensions.management.connect.adapter.parser.Parsers; import org.apache.streampipes.model.AdapterType; import org.apache.streampipes.model.connect.guess.GuessSchema; diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarUtils.java b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/adapter/PulsarUtils.java similarity index 94% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarUtils.java rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/adapter/PulsarUtils.java index 9df4e494e9..5d6e1cc89c 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/pulsar/PulsarUtils.java +++ b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/adapter/PulsarUtils.java @@ -15,7 +15,7 @@ * limitations under the License. * */ -package org.apache.streampipes.connect.iiot.protocol.stream.pulsar; +package org.apache.streampipes.extensions.connectors.pulsar.adapter; import org.apache.pulsar.client.api.PulsarClient; import org.apache.pulsar.client.api.PulsarClientException; diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/PulsarParameters.java b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/sink/PulsarParameters.java similarity index 67% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/PulsarParameters.java rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/sink/PulsarParameters.java index e7a9b3c171..6616e21592 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/PulsarParameters.java +++ b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/sink/PulsarParameters.java @@ -15,20 +15,20 @@ * limitations under the License. * */ -package org.apache.streampipes.sinks.brokers.jvm.pulsar; +package org.apache.streampipes.extensions.connectors.pulsar.sink; -import org.apache.streampipes.wrapper.params.compat.SinkParams; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; -import static org.apache.streampipes.sinks.brokers.jvm.pulsar.PulsarPublisherSink.PULSAR_HOST_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.pulsar.PulsarPublisherSink.PULSAR_PORT_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.pulsar.PulsarPublisherSink.TOPIC_KEY; +import static org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink.PULSAR_HOST_KEY; +import static org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink.PULSAR_PORT_KEY; +import static org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink.TOPIC_KEY; public class PulsarParameters { - private String pulsarHost; - private Integer pulsarPort; - private String topic; + private final String pulsarHost; + private final Integer pulsarPort; + private final String topic; - public PulsarParameters(SinkParams parameters) { + public PulsarParameters(IDataSinkParameters parameters) { var extractor = parameters.extractor(); this.pulsarHost = extractor.singleValueParameter(PULSAR_HOST_KEY, String.class); diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/PulsarPublisherSink.java b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/sink/PulsarPublisherSink.java similarity index 73% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/PulsarPublisherSink.java rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/sink/PulsarPublisherSink.java index e555f77981..99eeffb4ad 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/PulsarPublisherSink.java +++ b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/sink/PulsarPublisherSink.java @@ -15,23 +15,24 @@ * limitations under the License. * */ -package org.apache.streampipes.sinks.brokers.jvm.pulsar; +package org.apache.streampipes.extensions.connectors.pulsar.sink; import org.apache.streampipes.commons.exceptions.SpRuntimeException; import org.apache.streampipes.dataformat.SpDataFormatDefinition; import org.apache.streampipes.dataformat.json.JsonDataFormatDefinition; +import org.apache.streampipes.extensions.api.pe.IStreamPipesDataSink; +import org.apache.streampipes.extensions.api.pe.config.IDataSinkConfiguration; import org.apache.streampipes.extensions.api.pe.context.EventSinkRuntimeContext; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; import org.apache.streampipes.model.DataSinkType; -import org.apache.streampipes.model.graph.DataSinkDescription; import org.apache.streampipes.model.runtime.Event; import org.apache.streampipes.sdk.builder.DataSinkBuilder; import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; +import org.apache.streampipes.sdk.builder.sink.DataSinkConfiguration; import org.apache.streampipes.sdk.helpers.EpRequirements; import org.apache.streampipes.sdk.helpers.Labels; import org.apache.streampipes.sdk.helpers.Locales; import org.apache.streampipes.sdk.utils.Assets; -import org.apache.streampipes.wrapper.params.compat.SinkParams; -import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink; import com.google.common.annotations.VisibleForTesting; import org.apache.pulsar.client.api.ClientBuilder; @@ -41,7 +42,7 @@ import java.util.Map; -public class PulsarPublisherSink extends StreamPipesDataSink { +public class PulsarPublisherSink implements IStreamPipesDataSink { public static final String TOPIC_KEY = "topic"; public static final String PULSAR_HOST_KEY = "pulsar-host"; @@ -63,24 +64,28 @@ public PulsarPublisherSink(ClientBuilder pulsarClientBuilder) { this.clientBuilder = pulsarClientBuilder; } + @Override - public DataSinkDescription declareModel() { - return DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.pulsar") - .category(DataSinkType.MESSAGING) - .withLocales(Locales.EN) - .withAssets(Assets.DOCUMENTATION, Assets.ICON) - .requiredStream(StreamRequirementsBuilder - .create() - .requiredProperty(EpRequirements.anyProperty()) - .build()) - .requiredTextParameter(Labels.withId(PULSAR_HOST_KEY)) - .requiredIntegerParameter(Labels.withId(PULSAR_PORT_KEY), 6650) - .requiredTextParameter(Labels.withId(TOPIC_KEY)) - .build(); + public IDataSinkConfiguration declareConfig() { + return DataSinkConfiguration.create( + PulsarPublisherSink::new, + DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.pulsar") + .category(DataSinkType.MESSAGING) + .withLocales(Locales.EN) + .withAssets(Assets.DOCUMENTATION, Assets.ICON) + .requiredStream(StreamRequirementsBuilder + .create() + .requiredProperty(EpRequirements.anyProperty()) + .build()) + .requiredTextParameter(Labels.withId(PULSAR_HOST_KEY)) + .requiredIntegerParameter(Labels.withId(PULSAR_PORT_KEY), 6650) + .requiredTextParameter(Labels.withId(TOPIC_KEY)) + .build() + ); } @Override - public void onInvocation(SinkParams parameters, EventSinkRuntimeContext runtimeContext) throws SpRuntimeException { + public void onPipelineStarted(IDataSinkParameters parameters, EventSinkRuntimeContext runtimeContext) { params = new PulsarParameters(parameters); this.spDataFormatDefinition = new JsonDataFormatDefinition(); @@ -109,7 +114,7 @@ public void onEvent(Event event) throws SpRuntimeException { } @Override - public void onDetach() throws SpRuntimeException { + public void onPipelineStopped() { try { this.pulsarClient.close(); } catch (PulsarClientException e) { @@ -120,4 +125,5 @@ public void onDetach() throws SpRuntimeException { private String makePulsarUrl(String hostname, Integer port) { return PulsarScheme + hostname + Colon + port; } + } diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/documentation.md b/streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/documentation.md rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/documentation.md diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/icon.png b/streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/icon.png similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/icon.png rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/icon.png diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/strings.en b/streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/strings.en similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/strings.en rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.pulsar/strings.en diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/documentation.md b/streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/documentation.md rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/documentation.md diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/icon.png b/streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/icon.png similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/icon.png rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/icon.png diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/strings.en b/streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/strings.en similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/strings.en rename to streampipes-extensions/streampipes-connectors-pulsar/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.pulsar/strings.en diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/test/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/TestPulsarParameters.java b/streampipes-extensions/streampipes-connectors-pulsar/src/test/java/org/apache/streampipes/extensions/connectors/pulsar/TestPulsarParameters.java similarity index 72% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/test/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/TestPulsarParameters.java rename to streampipes-extensions/streampipes-connectors-pulsar/src/test/java/org/apache/streampipes/extensions/connectors/pulsar/TestPulsarParameters.java index 0ce79dbb43..b70e7bc0ad 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/test/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/TestPulsarParameters.java +++ b/streampipes-extensions/streampipes-connectors-pulsar/src/test/java/org/apache/streampipes/extensions/connectors/pulsar/TestPulsarParameters.java @@ -15,19 +15,20 @@ * limitations under the License. * */ -package org.apache.streampipes.sinks.brokers.jvm.pulsar; +package org.apache.streampipes.extensions.connectors.pulsar; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; +import org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarParameters; import org.apache.streampipes.sdk.extractor.DataSinkParameterExtractor; -import org.apache.streampipes.wrapper.params.compat.SinkParams; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; -import static org.apache.streampipes.sinks.brokers.jvm.pulsar.PulsarPublisherSink.PULSAR_HOST_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.pulsar.PulsarPublisherSink.PULSAR_PORT_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.pulsar.PulsarPublisherSink.TOPIC_KEY; -import static org.mockito.Mockito.mock; +import static org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink.PULSAR_HOST_KEY; +import static org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink.PULSAR_PORT_KEY; +import static org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink.TOPIC_KEY; + public class TestPulsarParameters { @Test @@ -36,8 +37,8 @@ public void testInitPulsarParameters() { Integer pulsarPort = 6650; String topic = "test"; - SinkParams params = mock(SinkParams.class); - DataSinkParameterExtractor extractor = mock(DataSinkParameterExtractor.class); + var params = Mockito.mock(IDataSinkParameters.class); + DataSinkParameterExtractor extractor = Mockito.mock(DataSinkParameterExtractor.class); Mockito.when(params.extractor()).thenReturn(extractor); Mockito.when(extractor.singleValueParameter(PULSAR_HOST_KEY, String.class)).thenReturn(pulsarHost); Mockito.when(extractor.singleValueParameter(PULSAR_PORT_KEY, Integer.class)).thenReturn(pulsarPort); diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/test/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/TestPulsarPublisherSink.java b/streampipes-extensions/streampipes-connectors-pulsar/src/test/java/org/apache/streampipes/extensions/connectors/pulsar/TestPulsarPublisherSink.java similarity index 50% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/test/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/TestPulsarPublisherSink.java rename to streampipes-extensions/streampipes-connectors-pulsar/src/test/java/org/apache/streampipes/extensions/connectors/pulsar/TestPulsarPublisherSink.java index 33be52170d..35cfea6c6e 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/test/java/org/apache/streampipes/sinks/brokers/jvm/pulsar/TestPulsarPublisherSink.java +++ b/streampipes-extensions/streampipes-connectors-pulsar/src/test/java/org/apache/streampipes/extensions/connectors/pulsar/TestPulsarPublisherSink.java @@ -15,11 +15,12 @@ * limitations under the License. * */ -package org.apache.streampipes.sinks.brokers.jvm.pulsar; +package org.apache.streampipes.extensions.connectors.pulsar; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; +import org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink; import org.apache.streampipes.model.runtime.Event; import org.apache.streampipes.sdk.extractor.DataSinkParameterExtractor; -import org.apache.streampipes.wrapper.params.compat.SinkParams; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -30,19 +31,15 @@ import org.apache.pulsar.client.api.PulsarClientException; import org.junit.Assert; import org.junit.Test; +import org.mockito.ArgumentMatchers; import org.mockito.Mockito; import java.util.HashMap; import java.util.Map; -import static org.apache.streampipes.sinks.brokers.jvm.pulsar.PulsarPublisherSink.PULSAR_HOST_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.pulsar.PulsarPublisherSink.PULSAR_PORT_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.pulsar.PulsarPublisherSink.TOPIC_KEY; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink.PULSAR_HOST_KEY; +import static org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink.PULSAR_PORT_KEY; +import static org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink.TOPIC_KEY; public class TestPulsarPublisherSink { @Test @@ -56,23 +53,23 @@ public void testSimpleEventSink() throws PulsarClientException { rawMap.put("key1", "value1"); rawMap.put("key2", "value2"); - SinkParams params = mock(SinkParams.class); - DataSinkParameterExtractor extractor = mock(DataSinkParameterExtractor.class); - when(params.extractor()).thenReturn(extractor); - when(extractor.singleValueParameter(PULSAR_HOST_KEY, String.class)).thenReturn(pulsarHost); - when(extractor.singleValueParameter(PULSAR_PORT_KEY, Integer.class)).thenReturn(pulsarPort); - when(extractor.singleValueParameter(TOPIC_KEY, String.class)).thenReturn(topic); + var params = Mockito.mock(IDataSinkParameters.class); + DataSinkParameterExtractor extractor = Mockito.mock(DataSinkParameterExtractor.class); + Mockito.when(params.extractor()).thenReturn(extractor); + Mockito.when(extractor.singleValueParameter(PULSAR_HOST_KEY, String.class)).thenReturn(pulsarHost); + Mockito.when(extractor.singleValueParameter(PULSAR_PORT_KEY, Integer.class)).thenReturn(pulsarPort); + Mockito.when(extractor.singleValueParameter(TOPIC_KEY, String.class)).thenReturn(topic); - ClientBuilder clientBuilder = mock(ClientBuilder.class); - PulsarClient pulsarClient = mock(PulsarClient.class); - ProducerBuilder producerBuilder = mock(ProducerBuilder.class); - Producer producer = mock(Producer.class); - when(clientBuilder.serviceUrl(anyString())).thenReturn(clientBuilder); - when(clientBuilder.build()).thenReturn(pulsarClient); - when(pulsarClient.newProducer()).thenReturn(producerBuilder); - when(producerBuilder.topic(topic)).thenReturn(producerBuilder); - when(producerBuilder.create()).thenReturn(producer); - when(producer.send(Mockito.any(byte[].class))).thenAnswer(data -> { + ClientBuilder clientBuilder = Mockito.mock(ClientBuilder.class); + PulsarClient pulsarClient = Mockito.mock(PulsarClient.class); + ProducerBuilder producerBuilder = Mockito.mock(ProducerBuilder.class); + Producer producer = Mockito.mock(Producer.class); + Mockito.when(clientBuilder.serviceUrl(ArgumentMatchers.anyString())).thenReturn(clientBuilder); + Mockito.when(clientBuilder.build()).thenReturn(pulsarClient); + Mockito.when(pulsarClient.newProducer()).thenReturn(producerBuilder); + Mockito.when(producerBuilder.topic(topic)).thenReturn(producerBuilder); + Mockito.when(producerBuilder.create()).thenReturn(producer); + Mockito.when(producer.send(Mockito.any(byte[].class))).thenAnswer(data -> { HashMap map; ObjectMapper mapper = new ObjectMapper(); String json = new String((byte[]) data.getArgument(0)); @@ -85,16 +82,16 @@ public void testSimpleEventSink() throws PulsarClientException { PulsarPublisherSink pulsarPublisherSink = new PulsarPublisherSink(clientBuilder); // Test invocation - pulsarPublisherSink.onInvocation(params, null); + pulsarPublisherSink.onPipelineStarted(params, null); - verify(clientBuilder).serviceUrl(String.format("pulsar://%s:%d", pulsarHost, pulsarPort)); + Mockito.verify(clientBuilder).serviceUrl(String.format("pulsar://%s:%d", pulsarHost, pulsarPort)); // Test publish event - Event event = mock(Event.class); - when(event.getRaw()).thenReturn(rawMap); + Event event = Mockito.mock(Event.class); + Mockito.when(event.getRaw()).thenReturn(rawMap); pulsarPublisherSink.onEvent(event); - verify(producer, times(1)).send(Mockito.any(byte[].class)); + Mockito.verify(producer, Mockito.times(1)).send(Mockito.any(byte[].class)); } } diff --git a/streampipes-extensions/streampipes-connectors-rocketmq/pom.xml b/streampipes-extensions/streampipes-connectors-rocketmq/pom.xml new file mode 100644 index 0000000000..06d83db9ad --- /dev/null +++ b/streampipes-extensions/streampipes-connectors-rocketmq/pom.xml @@ -0,0 +1,65 @@ + + + + + 4.0.0 + + org.apache.streampipes + streampipes-extensions + 0.93.0-SNAPSHOT + + + streampipes-connectors-rocketmq + + + + org.apache.streampipes + streampipes-extensions-api + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-extensions-management + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-sdk + 0.93.0-SNAPSHOT + + + org.apache.rocketmq + rocketmq-client-java + + + + junit + junit + test + + + org.mockito + mockito-core + test + + + + diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQConsumer.java b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/adapter/RocketMQConsumer.java similarity index 96% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQConsumer.java rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/adapter/RocketMQConsumer.java index 43115ffcc2..d062340782 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQConsumer.java +++ b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/adapter/RocketMQConsumer.java @@ -15,7 +15,7 @@ * limitations under the License. * */ -package org.apache.streampipes.connect.iiot.protocol.stream.rocketmq; +package org.apache.streampipes.extensions.connectors.rocketmq.adapter; import org.apache.streampipes.messaging.InternalEventProcessor; diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQProtocol.java b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/adapter/RocketMQProtocol.java similarity index 97% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQProtocol.java rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/adapter/RocketMQProtocol.java index 6af2fa89fc..02970e3630 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQProtocol.java +++ b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/adapter/RocketMQProtocol.java @@ -15,12 +15,11 @@ * limitations under the License. * */ -package org.apache.streampipes.connect.iiot.protocol.stream.rocketmq; +package org.apache.streampipes.extensions.connectors.rocketmq.adapter; import org.apache.streampipes.commons.exceptions.connect.AdapterException; import org.apache.streampipes.commons.exceptions.connect.ParseException; -import org.apache.streampipes.connect.iiot.protocol.stream.BrokerEventProcessor; import org.apache.streampipes.extensions.api.connect.IAdapterConfiguration; import org.apache.streampipes.extensions.api.connect.IEventCollector; import org.apache.streampipes.extensions.api.connect.StreamPipesAdapter; @@ -28,6 +27,7 @@ import org.apache.streampipes.extensions.api.connect.context.IAdapterRuntimeContext; import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; +import org.apache.streampipes.extensions.management.connect.adapter.BrokerEventProcessor; import org.apache.streampipes.extensions.management.connect.adapter.parser.Parsers; import org.apache.streampipes.model.AdapterType; import org.apache.streampipes.model.connect.guess.GuessSchema; diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQUtils.java b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/adapter/RocketMQUtils.java similarity index 96% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQUtils.java rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/adapter/RocketMQUtils.java index 38426ae695..a03afeee80 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/rocketmq/RocketMQUtils.java +++ b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/adapter/RocketMQUtils.java @@ -15,7 +15,7 @@ * limitations under the License. * */ -package org.apache.streampipes.connect.iiot.protocol.stream.rocketmq; +package org.apache.streampipes.extensions.connectors.rocketmq.adapter; import org.apache.rocketmq.client.apis.ClientConfiguration; import org.apache.rocketmq.client.apis.ClientException; diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/rocketmq/RocketMQParameters.java b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/sink/RocketMQParameters.java similarity index 70% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/rocketmq/RocketMQParameters.java rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/sink/RocketMQParameters.java index 404119377b..7bfe3e50b5 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/rocketmq/RocketMQParameters.java +++ b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/sink/RocketMQParameters.java @@ -15,18 +15,18 @@ * limitations under the License. * */ -package org.apache.streampipes.sinks.brokers.jvm.rocketmq; +package org.apache.streampipes.extensions.connectors.rocketmq.sink; -import org.apache.streampipes.wrapper.params.compat.SinkParams; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; -import static org.apache.streampipes.sinks.brokers.jvm.rocketmq.RocketMQPublisherSink.ENDPOINT_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.rocketmq.RocketMQPublisherSink.TOPIC_KEY; +import static org.apache.streampipes.extensions.connectors.rocketmq.sink.RocketMQPublisherSink.ENDPOINT_KEY; +import static org.apache.streampipes.extensions.connectors.rocketmq.sink.RocketMQPublisherSink.TOPIC_KEY; public class RocketMQParameters { - private String endpoint; - private String topic; + private final String endpoint; + private final String topic; - public RocketMQParameters(SinkParams parameters) { + public RocketMQParameters(IDataSinkParameters parameters) { var extractor = parameters.extractor(); this.endpoint = extractor.singleValueParameter(ENDPOINT_KEY, String.class); diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/rocketmq/RocketMQPublisherSink.java b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/sink/RocketMQPublisherSink.java similarity index 74% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/rocketmq/RocketMQPublisherSink.java rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/sink/RocketMQPublisherSink.java index ad6532d3bf..f27ad0380a 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/rocketmq/RocketMQPublisherSink.java +++ b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/java/org/apache/streampipes/extensions/connectors/rocketmq/sink/RocketMQPublisherSink.java @@ -15,24 +15,25 @@ * limitations under the License. * */ -package org.apache.streampipes.sinks.brokers.jvm.rocketmq; +package org.apache.streampipes.extensions.connectors.rocketmq.sink; import org.apache.streampipes.commons.exceptions.SpRuntimeException; import org.apache.streampipes.dataformat.SpDataFormatDefinition; import org.apache.streampipes.dataformat.json.JsonDataFormatDefinition; +import org.apache.streampipes.extensions.api.pe.IStreamPipesDataSink; +import org.apache.streampipes.extensions.api.pe.config.IDataSinkConfiguration; import org.apache.streampipes.extensions.api.pe.context.EventSinkRuntimeContext; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; import org.apache.streampipes.model.DataSinkType; -import org.apache.streampipes.model.graph.DataSinkDescription; import org.apache.streampipes.model.runtime.Event; import org.apache.streampipes.sdk.builder.DataSinkBuilder; import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; +import org.apache.streampipes.sdk.builder.sink.DataSinkConfiguration; import org.apache.streampipes.sdk.helpers.EpRequirements; import org.apache.streampipes.sdk.helpers.Labels; import org.apache.streampipes.sdk.helpers.Locales; import org.apache.streampipes.sdk.utils.Assets; -import org.apache.streampipes.wrapper.params.compat.SinkParams; -import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink; import com.google.common.annotations.VisibleForTesting; import org.apache.rocketmq.client.apis.ClientConfiguration; @@ -45,7 +46,7 @@ import java.io.IOException; import java.util.Map; -public class RocketMQPublisherSink extends StreamPipesDataSink { +public class RocketMQPublisherSink implements IStreamPipesDataSink { public static final String TOPIC_KEY = "rocketmq-topic"; public static final String ENDPOINT_KEY = "rocketmq-endpoint"; @@ -66,23 +67,26 @@ public RocketMQPublisherSink(ClientServiceProvider provider) { } @Override - public DataSinkDescription declareModel() { - return DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.rocketmq") - .category(DataSinkType.MESSAGING) - .withLocales(Locales.EN) - .withAssets(Assets.DOCUMENTATION, Assets.ICON) - .requiredStream(StreamRequirementsBuilder - .create() - .requiredProperty(EpRequirements.anyProperty()) - .build()) - .requiredTextParameter(Labels.withId(ENDPOINT_KEY)) - .requiredTextParameter(Labels.withId(TOPIC_KEY)) - .build(); + public IDataSinkConfiguration declareConfig() { + return DataSinkConfiguration.create( + RocketMQPublisherSink::new, + DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.rocketmq") + .category(DataSinkType.MESSAGING) + .withLocales(Locales.EN) + .withAssets(Assets.DOCUMENTATION, Assets.ICON) + .requiredStream(StreamRequirementsBuilder + .create() + .requiredProperty(EpRequirements.anyProperty()) + .build()) + .requiredTextParameter(Labels.withId(ENDPOINT_KEY)) + .requiredTextParameter(Labels.withId(TOPIC_KEY)) + .build() + ); } + @Override - public void onInvocation(SinkParams parameters, EventSinkRuntimeContext runtimeContext) - throws SpRuntimeException { + public void onPipelineStarted(IDataSinkParameters parameters, EventSinkRuntimeContext runtimeContext) { this.params = new RocketMQParameters(parameters); this.spDataFormatDefinition = new JsonDataFormatDefinition(); @@ -115,7 +119,7 @@ public void onEvent(Event event) throws SpRuntimeException { } @Override - public void onDetach() throws SpRuntimeException { + public void onPipelineStopped() { try { producer.close(); } catch (IOException e) { diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/documentation.md b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/documentation.md rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/documentation.md diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/icon.png b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/icon.png similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/icon.png rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/icon.png diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/strings.en b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/strings.en similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/strings.en rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.rocketmq/strings.en diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/documentation.md b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/documentation.md rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/documentation.md diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/icon.png b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/icon.png similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/icon.png rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/icon.png diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/strings.en b/streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/strings.en similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/strings.en rename to streampipes-extensions/streampipes-connectors-rocketmq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.rocketmq/strings.en diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/test/java/org/apache/streampipes/sinks/brokers/jvm/rocketmq/TestRocketMQPublisherSink.java b/streampipes-extensions/streampipes-connectors-rocketmq/src/test/java/org/apache/streampipes/extensions/connectors/rocketmq/TestRocketMQPublisherSink.java similarity index 76% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/test/java/org/apache/streampipes/sinks/brokers/jvm/rocketmq/TestRocketMQPublisherSink.java rename to streampipes-extensions/streampipes-connectors-rocketmq/src/test/java/org/apache/streampipes/extensions/connectors/rocketmq/TestRocketMQPublisherSink.java index 80053ed796..402a4d539c 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/test/java/org/apache/streampipes/sinks/brokers/jvm/rocketmq/TestRocketMQPublisherSink.java +++ b/streampipes-extensions/streampipes-connectors-rocketmq/src/test/java/org/apache/streampipes/extensions/connectors/rocketmq/TestRocketMQPublisherSink.java @@ -15,11 +15,12 @@ * limitations under the License. * */ -package org.apache.streampipes.sinks.brokers.jvm.rocketmq; +package org.apache.streampipes.extensions.connectors.rocketmq; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; +import org.apache.streampipes.extensions.connectors.rocketmq.sink.RocketMQPublisherSink; import org.apache.streampipes.model.runtime.Event; import org.apache.streampipes.sdk.extractor.DataSinkParameterExtractor; -import org.apache.streampipes.wrapper.params.compat.SinkParams; import org.apache.rocketmq.client.apis.ClientException; import org.apache.rocketmq.client.apis.ClientServiceProvider; @@ -28,11 +29,12 @@ import org.apache.rocketmq.client.apis.producer.Producer; import org.apache.rocketmq.client.apis.producer.ProducerBuilder; import org.junit.Test; +import org.mockito.Mockito; import java.io.IOException; -import static org.apache.streampipes.sinks.brokers.jvm.rocketmq.RocketMQPublisherSink.ENDPOINT_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.rocketmq.RocketMQPublisherSink.TOPIC_KEY; +import static org.apache.streampipes.extensions.connectors.rocketmq.sink.RocketMQPublisherSink.ENDPOINT_KEY; +import static org.apache.streampipes.extensions.connectors.rocketmq.sink.RocketMQPublisherSink.TOPIC_KEY; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.mock; @@ -47,17 +49,17 @@ public void testSimpleEventSink() throws IOException, ClientException { String endpoint = "localhost:8081"; String topic = "TopicTest"; - SinkParams params = mock(SinkParams.class); + var params = mock(IDataSinkParameters.class); DataSinkParameterExtractor extractor = mock(DataSinkParameterExtractor.class); when(params.extractor()).thenReturn(extractor); when(extractor.singleValueParameter(ENDPOINT_KEY, String.class)).thenReturn(endpoint); when(extractor.singleValueParameter(TOPIC_KEY, String.class)).thenReturn(topic); - ClientServiceProvider provider = mock(ClientServiceProvider.class); + ClientServiceProvider provider = Mockito.mock(ClientServiceProvider.class); - ProducerBuilder producerBuilder = mock(ProducerBuilder.class); - Producer producer = mock(Producer.class); + ProducerBuilder producerBuilder = Mockito.mock(ProducerBuilder.class); + Producer producer = Mockito.mock(Producer.class); when(provider.newProducerBuilder()).thenReturn(producerBuilder); when(producerBuilder.build()).thenReturn(producer); @@ -66,13 +68,13 @@ public void testSimpleEventSink() throws IOException, ClientException { // test onInvocation RocketMQPublisherSink publisherSink = new RocketMQPublisherSink(provider); - publisherSink.onInvocation(params, null); + publisherSink.onPipelineStarted(params, null); // test onEvent Event event = mock(Event.class); - MessageBuilder messageBuilder = mock(MessageBuilder.class); - Message message = mock(Message.class); + MessageBuilder messageBuilder = Mockito.mock(MessageBuilder.class); + Message message = Mockito.mock(Message.class); when(provider.newMessageBuilder()).thenReturn(messageBuilder); when(messageBuilder.build()).thenReturn(message); @@ -83,7 +85,7 @@ public void testSimpleEventSink() throws IOException, ClientException { verify(producer, times(1)).send(any(Message.class)); // test onDetach - publisherSink.onDetach(); + publisherSink.onPipelineStopped(); verify(producer, times(1)).close(); } } diff --git a/streampipes-extensions/streampipes-connectors-tubemq/pom.xml b/streampipes-extensions/streampipes-connectors-tubemq/pom.xml new file mode 100644 index 0000000000..7c417dec9a --- /dev/null +++ b/streampipes-extensions/streampipes-connectors-tubemq/pom.xml @@ -0,0 +1,61 @@ + + + + + 4.0.0 + + org.apache.streampipes + streampipes-extensions + 0.93.0-SNAPSHOT + + + streampipes-connectors-tubemq + + + + org.apache.streampipes + streampipes-extensions-api + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-extensions-management + 0.93.0-SNAPSHOT + + + org.apache.streampipes + streampipes-sdk + 0.93.0-SNAPSHOT + + + + org.apache.inlong + tubemq-client + + + + org.apache.streampipes + streampipes-wrapper-standalone + 0.93.0-SNAPSHOT + + + + diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/TubeMQProtocol.java b/streampipes-extensions/streampipes-connectors-tubemq/src/main/java/org/apache/streampipes/extensions/connectors/tubemq/adapter/TubeMQProtocol.java similarity index 98% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/TubeMQProtocol.java rename to streampipes-extensions/streampipes-connectors-tubemq/src/main/java/org/apache/streampipes/extensions/connectors/tubemq/adapter/TubeMQProtocol.java index 2cd54ea35c..84ed9b8289 100644 --- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/TubeMQProtocol.java +++ b/streampipes-extensions/streampipes-connectors-tubemq/src/main/java/org/apache/streampipes/extensions/connectors/tubemq/adapter/TubeMQProtocol.java @@ -16,7 +16,7 @@ * */ -package org.apache.streampipes.connect.iiot.protocol.stream; +package org.apache.streampipes.extensions.connectors.tubemq.adapter; import org.apache.streampipes.commons.exceptions.connect.AdapterException; import org.apache.streampipes.commons.exceptions.connect.ParseException; @@ -27,6 +27,7 @@ import org.apache.streampipes.extensions.api.connect.context.IAdapterRuntimeContext; import org.apache.streampipes.extensions.api.extractor.IAdapterParameterExtractor; import org.apache.streampipes.extensions.api.extractor.IStaticPropertyExtractor; +import org.apache.streampipes.extensions.management.connect.adapter.BrokerEventProcessor; import org.apache.streampipes.extensions.management.connect.adapter.parser.Parsers; import org.apache.streampipes.model.AdapterType; import org.apache.streampipes.model.connect.guess.GuessSchema; diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQParameters.java b/streampipes-extensions/streampipes-connectors-tubemq/src/main/java/org/apache/streampipes/extensions/connectors/tubemq/sink/TubeMQParameters.java similarity index 75% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQParameters.java rename to streampipes-extensions/streampipes-connectors-tubemq/src/main/java/org/apache/streampipes/extensions/connectors/tubemq/sink/TubeMQParameters.java index 5a6c75a84d..b23bfd1046 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQParameters.java +++ b/streampipes-extensions/streampipes-connectors-tubemq/src/main/java/org/apache/streampipes/extensions/connectors/tubemq/sink/TubeMQParameters.java @@ -16,19 +16,19 @@ * */ -package org.apache.streampipes.sinks.brokers.jvm.tubemq; +package org.apache.streampipes.extensions.connectors.tubemq.sink; -import org.apache.streampipes.wrapper.params.compat.SinkParams; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; -import static org.apache.streampipes.sinks.brokers.jvm.tubemq.TubeMQPublisherSink.MASTER_HOST_AND_PORT_KEY; -import static org.apache.streampipes.sinks.brokers.jvm.tubemq.TubeMQPublisherSink.TOPIC_KEY; +import static org.apache.streampipes.extensions.connectors.tubemq.sink.TubeMQPublisherSink.MASTER_HOST_AND_PORT_KEY; +import static org.apache.streampipes.extensions.connectors.tubemq.sink.TubeMQPublisherSink.TOPIC_KEY; public class TubeMQParameters { private final String masterHostAndPort; private final String topic; - public TubeMQParameters(SinkParams parameters) { + public TubeMQParameters(IDataSinkParameters parameters) { var extractor = parameters.extractor(); this.masterHostAndPort = extractor.singleValueParameter(MASTER_HOST_AND_PORT_KEY, String.class); diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQPublisherSink.java b/streampipes-extensions/streampipes-connectors-tubemq/src/main/java/org/apache/streampipes/extensions/connectors/tubemq/sink/TubeMQPublisherSink.java similarity index 75% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQPublisherSink.java rename to streampipes-extensions/streampipes-connectors-tubemq/src/main/java/org/apache/streampipes/extensions/connectors/tubemq/sink/TubeMQPublisherSink.java index 3238cfabfa..5c71ffa6ac 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQPublisherSink.java +++ b/streampipes-extensions/streampipes-connectors-tubemq/src/main/java/org/apache/streampipes/extensions/connectors/tubemq/sink/TubeMQPublisherSink.java @@ -16,23 +16,24 @@ * */ -package org.apache.streampipes.sinks.brokers.jvm.tubemq; +package org.apache.streampipes.extensions.connectors.tubemq.sink; import org.apache.streampipes.commons.exceptions.SpRuntimeException; import org.apache.streampipes.dataformat.SpDataFormatDefinition; import org.apache.streampipes.dataformat.json.JsonDataFormatDefinition; +import org.apache.streampipes.extensions.api.pe.IStreamPipesDataSink; +import org.apache.streampipes.extensions.api.pe.config.IDataSinkConfiguration; import org.apache.streampipes.extensions.api.pe.context.EventSinkRuntimeContext; +import org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters; import org.apache.streampipes.model.DataSinkType; -import org.apache.streampipes.model.graph.DataSinkDescription; import org.apache.streampipes.model.runtime.Event; import org.apache.streampipes.sdk.builder.DataSinkBuilder; import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; +import org.apache.streampipes.sdk.builder.sink.DataSinkConfiguration; import org.apache.streampipes.sdk.helpers.EpRequirements; import org.apache.streampipes.sdk.helpers.Labels; import org.apache.streampipes.sdk.helpers.Locales; import org.apache.streampipes.sdk.utils.Assets; -import org.apache.streampipes.wrapper.params.compat.SinkParams; -import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink; import org.apache.inlong.tubemq.client.config.TubeClientConfig; import org.apache.inlong.tubemq.client.exception.TubeClientException; @@ -43,7 +44,7 @@ import java.util.Map; -public class TubeMQPublisherSink extends StreamPipesDataSink { +public class TubeMQPublisherSink implements IStreamPipesDataSink { public static final String MASTER_HOST_AND_PORT_KEY = "tubemq-master-host-and-port"; public static final String TOPIC_KEY = "tubemq-topic"; @@ -53,17 +54,22 @@ public class TubeMQPublisherSink extends StreamPipesDataSink { private MessageProducer messageProducer; + @Override - public DataSinkDescription declareModel() { - return DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.tubemq").category(DataSinkType.MESSAGING) - .withLocales(Locales.EN).withAssets(Assets.DOCUMENTATION, Assets.ICON) - .requiredStream(StreamRequirementsBuilder.create().requiredProperty(EpRequirements.anyProperty()).build()) - .requiredTextParameter(Labels.withId(MASTER_HOST_AND_PORT_KEY)).requiredTextParameter(Labels.withId(TOPIC_KEY)) - .build(); + public IDataSinkConfiguration declareConfig() { + return DataSinkConfiguration.create( + TubeMQPublisherSink::new, + DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.tubemq").category(DataSinkType.MESSAGING) + .withLocales(Locales.EN).withAssets(Assets.DOCUMENTATION, Assets.ICON) + .requiredStream(StreamRequirementsBuilder.create().requiredProperty(EpRequirements.anyProperty()).build()) + .requiredTextParameter(Labels.withId(MASTER_HOST_AND_PORT_KEY)).requiredTextParameter(Labels.withId(TOPIC_KEY)) + .build() + ); } @Override - public void onInvocation(SinkParams sinkParams, EventSinkRuntimeContext runtimeContext) throws SpRuntimeException { + public void onPipelineStarted(IDataSinkParameters sinkParams, + EventSinkRuntimeContext runtimeContext) { final TubeMQParameters tubeMQParameters = new TubeMQParameters(sinkParams); spDataFormatDefinition = new JsonDataFormatDefinition(); @@ -96,7 +102,7 @@ public void onEvent(Event event) throws SpRuntimeException { } @Override - public void onDetach() throws SpRuntimeException { + public void onPipelineStopped() { try { messageProducer.shutdown(); } catch (Throwable e) { diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md b/streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md rename to streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.png b/streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.png similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.png rename to streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.png diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/strings.en b/streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/strings.en similarity index 100% rename from streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/strings.en rename to streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/strings.en diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md b/streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md rename to streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.png b/streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.png similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.png rename to streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.png diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/strings.en b/streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/strings.en similarity index 100% rename from streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/strings.en rename to streampipes-extensions/streampipes-connectors-tubemq/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/strings.en diff --git a/streampipes-extensions/streampipes-extensions-all-iiot/src/main/java/org/apache/streampipes/extensions/all/iiot/AllExtensionsIIoTInit.java b/streampipes-extensions/streampipes-extensions-all-iiot/src/main/java/org/apache/streampipes/extensions/all/iiot/AllExtensionsIIoTInit.java index 20298006c0..38d6203f25 100644 --- a/streampipes-extensions/streampipes-extensions-all-iiot/src/main/java/org/apache/streampipes/extensions/all/iiot/AllExtensionsIIoTInit.java +++ b/streampipes-extensions/streampipes-extensions-all-iiot/src/main/java/org/apache/streampipes/extensions/all/iiot/AllExtensionsIIoTInit.java @@ -24,6 +24,12 @@ import org.apache.streampipes.dataformat.json.JsonDataFormatFactory; import org.apache.streampipes.dataformat.smile.SmileDataFormatFactory; import org.apache.streampipes.extensions.connectors.influx.InfluxConnectorsInit; +import org.apache.streampipes.extensions.connectors.kafka.sink.KafkaPublishSink; +import org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink; +import org.apache.streampipes.extensions.connectors.nats.sink.NatsSink; +import org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink; +import org.apache.streampipes.extensions.connectors.rocketmq.sink.RocketMQPublisherSink; +import org.apache.streampipes.extensions.connectors.tubemq.sink.TubeMQPublisherSink; import org.apache.streampipes.extensions.management.model.SpServiceDefinition; import org.apache.streampipes.extensions.management.model.SpServiceDefinitionBuilder; import org.apache.streampipes.messaging.jms.SpJmsProtocolFactory; @@ -65,6 +71,13 @@ public SpServiceDefinition provideServiceDefinition() { .merge(new DatabasesJvmInit().provideServiceDefinition()) .merge(new SinksNotificationsJvmInit().provideServiceDefinition()) .merge(new InfluxConnectorsInit().provideServiceDefinition()) + .registerPipelineElements( + new KafkaPublishSink(), + new MqttPublisherSink(), + new NatsSink(), + new PulsarPublisherSink(), + new RocketMQPublisherSink(), + new TubeMQPublisherSink()) .registerRuntimeProvider(new StandaloneStreamPipesRuntimeProvider()) .registerMessagingFormats( new JsonDataFormatFactory(), diff --git a/streampipes-extensions/streampipes-extensions-all-jvm/src/main/java/org/apache/streampipes/extensions/all/jvm/AllExtensionsInit.java b/streampipes-extensions/streampipes-extensions-all-jvm/src/main/java/org/apache/streampipes/extensions/all/jvm/AllExtensionsInit.java index d40eb314c7..acf19d229c 100644 --- a/streampipes-extensions/streampipes-extensions-all-jvm/src/main/java/org/apache/streampipes/extensions/all/jvm/AllExtensionsInit.java +++ b/streampipes-extensions/streampipes-extensions-all-jvm/src/main/java/org/apache/streampipes/extensions/all/jvm/AllExtensionsInit.java @@ -22,6 +22,12 @@ import org.apache.streampipes.dataformat.fst.FstDataFormatFactory; import org.apache.streampipes.dataformat.json.JsonDataFormatFactory; import org.apache.streampipes.dataformat.smile.SmileDataFormatFactory; +import org.apache.streampipes.extensions.connectors.kafka.sink.KafkaPublishSink; +import org.apache.streampipes.extensions.connectors.mqtt.sink.MqttPublisherSink; +import org.apache.streampipes.extensions.connectors.nats.sink.NatsSink; +import org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink; +import org.apache.streampipes.extensions.connectors.rocketmq.sink.RocketMQPublisherSink; +import org.apache.streampipes.extensions.connectors.tubemq.sink.TubeMQPublisherSink; import org.apache.streampipes.extensions.management.model.SpServiceDefinition; import org.apache.streampipes.extensions.management.model.SpServiceDefinitionBuilder; import org.apache.streampipes.messaging.jms.SpJmsProtocolFactory; @@ -47,6 +53,13 @@ public SpServiceDefinition provideServiceDefinition() { "", 8090) .merge(new ConnectAdapterIiotInit().provideServiceDefinition()) .merge(new AllPipelineElementsInit().provideServiceDefinition()) + .registerPipelineElements( + new KafkaPublishSink(), + new MqttPublisherSink(), + new NatsSink(), + new PulsarPublisherSink(), + new RocketMQPublisherSink(), + new TubeMQPublisherSink()) .registerRuntimeProvider(new StandaloneStreamPipesRuntimeProvider()) .registerMessagingFormats( new JsonDataFormatFactory(), diff --git a/streampipes-extensions/streampipes-pipeline-elements-shared/pom.xml b/streampipes-extensions/streampipes-pipeline-elements-shared/pom.xml index d4497a9418..6deb2233bf 100644 --- a/streampipes-extensions/streampipes-pipeline-elements-shared/pom.xml +++ b/streampipes-extensions/streampipes-pipeline-elements-shared/pom.xml @@ -32,35 +32,11 @@ - - com.google.code.gson - gson - - - org.apache.streampipes - streampipes-sdk - 0.93.0-SNAPSHOT - - - org.apache.streampipes - streampipes-messaging - 0.93.0-SNAPSHOT - compile - - - org.fusesource.mqtt-client - mqtt-client - org.apache.streampipes streampipes-model 0.93.0-SNAPSHOT - - org.apache.streampipes - streampipes-messaging-kafka - 0.93.0-SNAPSHOT - diff --git a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/KafkaConnectUtils.java b/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/KafkaConnectUtils.java deleted file mode 100644 index 7cc3f24306..0000000000 --- a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/KafkaConnectUtils.java +++ /dev/null @@ -1,169 +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.streampipes.pe.shared.config.kafka; - - - -import org.apache.streampipes.messaging.kafka.config.AutoOffsetResetConfig; -import org.apache.streampipes.messaging.kafka.security.KafkaSecurityConfig; -import org.apache.streampipes.messaging.kafka.security.KafkaSecuritySaslPlainConfig; -import org.apache.streampipes.messaging.kafka.security.KafkaSecuritySaslSSLConfig; -import org.apache.streampipes.messaging.kafka.security.KafkaSecurityUnauthenticatedPlainConfig; -import org.apache.streampipes.messaging.kafka.security.KafkaSecurityUnauthenticatedSSLConfig; -import org.apache.streampipes.model.staticproperty.StaticPropertyAlternative; -import org.apache.streampipes.sdk.StaticProperties; -import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor; -import org.apache.streampipes.sdk.helpers.Alternatives; -import org.apache.streampipes.sdk.helpers.Label; -import org.apache.streampipes.sdk.helpers.Labels; - -import org.apache.kafka.clients.consumer.ConsumerConfig; - -public class KafkaConnectUtils { - - public static final String TOPIC_KEY = "topic"; - public static final String HOST_KEY = "host"; - public static final String PORT_KEY = "port"; - - public static final String ACCESS_MODE = "access-mode"; - public static final String UNAUTHENTICATED_PLAIN = "unauthenticated-plain"; - public static final String UNAUTHENTICATED_SSL = "unauthenticated-ssl"; - public static final String SASL_PLAIN = "sasl-plain"; - public static final String SASL_SSL = "sasl-ssl"; - - public static final String USERNAME_GROUP = "username-group"; - public static final String USERNAME_KEY = "username"; - public static final String PASSWORD_KEY = "password"; - - - private static final String HIDE_INTERNAL_TOPICS = "hide-internal-topics"; - - public static final String AUTO_OFFSET_RESET_CONFIG = ConsumerConfig.AUTO_OFFSET_RESET_CONFIG; - public static final String EARLIEST = "earliest"; - public static final String LATEST = "latest"; - public static final String NONE = "none"; - - public static Label getTopicLabel() { - return Labels.withId(TOPIC_KEY); - } - - public static Label getHideInternalTopicsLabel() { - return Labels.withId(HIDE_INTERNAL_TOPICS); - } - - public static String getHideInternalTopicsKey() { - return HIDE_INTERNAL_TOPICS; - } - - public static Label getHostLabel() { - return Labels.withId(HOST_KEY); - } - - public static Label getPortLabel() { - return Labels.withId(PORT_KEY); - } - - public static Label getAccessModeLabel() { - return Labels.withId(ACCESS_MODE); - } - - public static Label getAutoOffsetResetConfigLabel() { - return Labels.withId(AUTO_OFFSET_RESET_CONFIG); - } - - public static KafkaConfig getConfig(StaticPropertyExtractor extractor, boolean containsTopic) { - String brokerUrl = extractor.singleValueParameter(HOST_KEY, String.class); - String topic = ""; - if (containsTopic) { - topic = extractor.selectedSingleValue(TOPIC_KEY, String.class); - } - - Integer port = extractor.singleValueParameter(PORT_KEY, Integer.class); - - String authentication = extractor.selectedAlternativeInternalId(ACCESS_MODE); - boolean isUseSSL = isUseSSL(authentication); - - KafkaSecurityConfig securityConfig; - - // check if a user for the authentication is defined - if (authentication.equals(KafkaConnectUtils.SASL_SSL) || authentication.equals(KafkaConnectUtils.SASL_PLAIN)) { - String username = extractor.singleValueParameter(USERNAME_KEY, String.class); - String password = extractor.secretValue(PASSWORD_KEY); - - securityConfig = isUseSSL - ? new KafkaSecuritySaslSSLConfig(username, password) : - new KafkaSecuritySaslPlainConfig(username, password); - } else { - // set security config for none authenticated access - securityConfig = isUseSSL - ? new KafkaSecurityUnauthenticatedSSLConfig() : - new KafkaSecurityUnauthenticatedPlainConfig(); - } - - String auto = extractor.selectedAlternativeInternalId(AUTO_OFFSET_RESET_CONFIG); - AutoOffsetResetConfig autoOffsetResetConfig = new AutoOffsetResetConfig(auto); - - return new KafkaConfig(brokerUrl, port, topic, securityConfig, autoOffsetResetConfig); - } - - private static boolean isUseSSL(String authentication) { - if (authentication.equals(KafkaConnectUtils.UNAUTHENTICATED_PLAIN) - || authentication.equals(KafkaConnectUtils.SASL_PLAIN)) { - return false; - } else { - return true; - } - } - - - public static StaticPropertyAlternative getAlternativeUnauthenticatedPlain() { - return Alternatives.from(Labels.withId(KafkaConnectUtils.UNAUTHENTICATED_PLAIN)); - } - - public static StaticPropertyAlternative getAlternativeUnauthenticatedSSL() { - return Alternatives.from(Labels.withId(KafkaConnectUtils.UNAUTHENTICATED_SSL)); - } - - public static StaticPropertyAlternative getAlternativesSaslPlain() { - return Alternatives.from(Labels.withId(KafkaConnectUtils.SASL_PLAIN), - StaticProperties.group(Labels.withId(KafkaConnectUtils.USERNAME_GROUP), - StaticProperties.stringFreeTextProperty(Labels.withId(KafkaConnectUtils.USERNAME_KEY)), - StaticProperties.secretValue(Labels.withId(KafkaConnectUtils.PASSWORD_KEY)))); - } - - public static StaticPropertyAlternative getAlternativesSaslSSL() { - return Alternatives.from(Labels.withId(KafkaConnectUtils.SASL_SSL), - StaticProperties.group(Labels.withId(KafkaConnectUtils.USERNAME_GROUP), - StaticProperties.stringFreeTextProperty(Labels.withId(KafkaConnectUtils.USERNAME_KEY)), - StaticProperties.secretValue(Labels.withId(KafkaConnectUtils.PASSWORD_KEY)))); - } - - - public static StaticPropertyAlternative getAlternativesLatest() { - return Alternatives.from(Labels.withId(LATEST)); - } - - public static StaticPropertyAlternative getAlternativesEarliest() { - return Alternatives.from(Labels.withId(EARLIEST)); - } - - public static StaticPropertyAlternative getAlternativesNone() { - return Alternatives.from(Labels.withId(NONE)); - } -} diff --git a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/kafka/KafkaConfig.java b/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/kafka/KafkaConfig.java deleted file mode 100644 index 61c83c2a10..0000000000 --- a/streampipes-extensions/streampipes-pipeline-elements-shared/src/main/java/org/apache/streampipes/pe/shared/config/kafka/kafka/KafkaConfig.java +++ /dev/null @@ -1,84 +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.streampipes.pe.shared.config.kafka.kafka; - -import org.apache.streampipes.messaging.kafka.config.AutoOffsetResetConfig; -import org.apache.streampipes.messaging.kafka.security.KafkaSecurityConfig; - -public class KafkaConfig { - - private String kafkaHost; - private Integer kafkaPort; - private String topic; - - KafkaSecurityConfig securityConfig; - AutoOffsetResetConfig autoOffsetResetConfig; - - public KafkaConfig(String kafkaHost, - Integer kafkaPort, - String topic, - KafkaSecurityConfig securityConfig, - AutoOffsetResetConfig autoOffsetResetConfig) { - this.kafkaHost = kafkaHost; - this.kafkaPort = kafkaPort; - this.topic = topic; - this.securityConfig = securityConfig; - this.autoOffsetResetConfig = autoOffsetResetConfig; - } - - public String getKafkaHost() { - return kafkaHost; - } - - public void setKafkaHost(String kafkaHost) { - this.kafkaHost = kafkaHost; - } - - public Integer getKafkaPort() { - return kafkaPort; - } - - public void setKafkaPort(Integer kafkaPort) { - this.kafkaPort = kafkaPort; - } - - public String getTopic() { - return topic; - } - - public void setTopic(String topic) { - this.topic = topic; - } - - public KafkaSecurityConfig getSecurityConfig() { - return securityConfig; - } - - public void setSecurityConfig(KafkaSecurityConfig securityConfig) { - this.securityConfig = securityConfig; - } - - public AutoOffsetResetConfig getAutoOffsetResetConfig() { - return autoOffsetResetConfig; - } - - public void setAutoOffsetResetConfig(AutoOffsetResetConfig autoOffsetResetConfig) { - this.autoOffsetResetConfig = autoOffsetResetConfig; - } -} diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml b/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml index dcd37af068..17ce327654 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml +++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml @@ -59,14 +59,6 @@ org.apache.httpcomponents fluent-hc - - org.apache.pulsar - pulsar-client - - - org.apache.rocketmq - rocketmq-client-java - org.fusesource.mqtt-client mqtt-client @@ -79,15 +71,6 @@ org.java-websocket Java-WebSocket - - io.nats - jnats - ${nats.version} - - - org.apache.inlong - tubemq-client - diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/BrokersJvmInit.java b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/BrokersJvmInit.java index ec35607875..d9bde7132e 100644 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/BrokersJvmInit.java +++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/BrokersJvmInit.java @@ -31,14 +31,8 @@ import org.apache.streampipes.service.extensions.ExtensionsModelSubmitter; import org.apache.streampipes.sinks.brokers.jvm.bufferrest.BufferRestPublisherSink; import org.apache.streampipes.sinks.brokers.jvm.jms.JmsPublisherSink; -import org.apache.streampipes.sinks.brokers.jvm.kafka.KafkaPublishSink; -import org.apache.streampipes.sinks.brokers.jvm.mqtt.MqttPublisherSink; -import org.apache.streampipes.sinks.brokers.jvm.nats.NatsController; -import org.apache.streampipes.sinks.brokers.jvm.pulsar.PulsarPublisherSink; import org.apache.streampipes.sinks.brokers.jvm.rabbitmq.RabbitMqPublisherSink; import org.apache.streampipes.sinks.brokers.jvm.rest.RestSink; -import org.apache.streampipes.sinks.brokers.jvm.rocketmq.RocketMQPublisherSink; -import org.apache.streampipes.sinks.brokers.jvm.tubemq.TubeMQPublisherSink; import org.apache.streampipes.sinks.brokers.jvm.websocket.WebsocketServerSink; public class BrokersJvmInit extends ExtensionsModelSubmitter { @@ -54,17 +48,11 @@ public SpServiceDefinition provideServiceDefinition() { "", 8096) .registerPipelineElements( - new KafkaPublishSink(), new JmsPublisherSink(), new RestSink(), new BufferRestPublisherSink(), new RabbitMqPublisherSink(), - new MqttPublisherSink(), - new WebsocketServerSink(), - new PulsarPublisherSink(), - new RocketMQPublisherSink(), - new TubeMQPublisherSink(), - new NatsController()) + new WebsocketServerSink()) .registerMessagingFormats( new JsonDataFormatFactory(), new CborDataFormatFactory(), diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/MqttPublisherSink.java b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/MqttPublisherSink.java deleted file mode 100644 index 3d17ea3992..0000000000 --- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/mqtt/MqttPublisherSink.java +++ /dev/null @@ -1,153 +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.streampipes.sinks.brokers.jvm.mqtt; - -import org.apache.streampipes.commons.exceptions.SpRuntimeException; -import org.apache.streampipes.extensions.api.pe.context.EventSinkRuntimeContext; -import org.apache.streampipes.model.DataSinkType; -import org.apache.streampipes.model.graph.DataSinkDescription; -import org.apache.streampipes.model.runtime.Event; -import org.apache.streampipes.model.staticproperty.Option; -import org.apache.streampipes.sdk.StaticProperties; -import org.apache.streampipes.sdk.builder.DataSinkBuilder; -import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; -import org.apache.streampipes.sdk.helpers.Alternatives; -import org.apache.streampipes.sdk.helpers.Labels; -import org.apache.streampipes.sdk.helpers.Locales; -import org.apache.streampipes.sdk.utils.Assets; -import org.apache.streampipes.wrapper.params.compat.SinkParams; -import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink; - -import java.util.Arrays; - -public class MqttPublisherSink extends StreamPipesDataSink { - - private static final int DEFAULT_MQTT_PORT = 1883; - private static final int DEFAULT_RECONNECT_PERIOD = 30; - private static final int DEFAULT_KEEP_ALIVE = 30; - - public static final String TOPIC = "topic"; - public static final String HOST = "host"; - public static final String PORT = "port"; - public static final String AUTH_MODE = "auth-mode"; - public static final String NO_AUTH_ALTERNATIVE = "no-auth-alternative"; - public static final String AUTH_ALTERNATIVE = "basic-auth-alternative"; - public static final String USERNAME_GROUP = "username-group"; - public static final String USERNAME = "username"; - public static final String PASSWORD = "password"; - public static final String QOS_LEVEL_KEY = "qos-level"; - public static final String CLEAN_SESSION_KEY = "clean-session"; - public static final String WILL_RETAIN = "will-retain"; - public static final String ENCRYPTION_MODE = "encryption-mode"; - public static final String RECONNECT_PERIOD_IN_SEC = "reconnect-period"; - public static final String WILL_MODE = "lwt-mode"; - public static final String NO_WILL_ALTERNATIVE = "no-lwt-alternative"; - public static final String WILL_ALTERNATIVE = "lwt-alternative"; - public static final String WILL_GROUP = "lwt-group"; - public static final String WILL_TOPIC = "lwt-topic"; - public static final String WILL_MESSAGE = "lwt-message"; - public static final String WILL_QOS = "lwt-qos-level"; - public static final String RETAIN = "retain"; - public static final String KEEP_ALIVE_IN_SEC = "keep-alive"; - public static final String MQTT_COMPLIANT = "mqtt-version-compliant"; - - private MqttClient mqttClient; - - @Override - public DataSinkDescription declareModel() { - return DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.mqtt") - .category(DataSinkType.MESSAGING) - .withLocales(Locales.EN) - .withAssets(Assets.DOCUMENTATION, Assets.ICON) - .requiredStream(StreamRequirementsBuilder.any()) - .requiredTextParameter(Labels.withId(TOPIC)) - .requiredTextParameter(Labels.withId(HOST)) - .requiredIntegerParameter(Labels.withId(PORT), DEFAULT_MQTT_PORT) - .requiredAlternatives( - Labels.withId(AUTH_MODE), - Alternatives.from(Labels.withId(NO_AUTH_ALTERNATIVE), true), - Alternatives.from(Labels.withId(AUTH_ALTERNATIVE), - StaticProperties.group(Labels.withId(USERNAME_GROUP), - StaticProperties.stringFreeTextProperty(Labels.withId(USERNAME)), - StaticProperties.secretValue(Labels.withId(PASSWORD))))) - .requiredSingleValueSelection( - Labels.withId(ENCRYPTION_MODE), - Arrays.asList( - new Option("TCP", true), - // SSL not yet supported - new Option("SSL/TLS", false))) - .requiredSingleValueSelection( - Labels.withId(QOS_LEVEL_KEY), - Arrays.asList( - new Option("0 - at-most-once", false), - new Option("1 - at-least-once", true), - new Option("2 - exactly-once", false))) - .requiredSingleValueSelection( - Labels.withId(RETAIN), - Arrays.asList( - new Option("Yes", false), - new Option("No", true))) - .requiredSingleValueSelection( - Labels.withId(CLEAN_SESSION_KEY), - Arrays.asList( - new Option("Yes", true), - new Option("No", false))) - .requiredIntegerParameter(Labels.withId(RECONNECT_PERIOD_IN_SEC), DEFAULT_RECONNECT_PERIOD) - .requiredIntegerParameter(Labels.withId(KEEP_ALIVE_IN_SEC), DEFAULT_KEEP_ALIVE) - .requiredSingleValueSelection( - Labels.withId(MQTT_COMPLIANT), - Arrays.asList( - new Option("Yes", true), - new Option("No", false))) - .requiredAlternatives( - Labels.withId(WILL_MODE), - Alternatives.from(Labels.withId(NO_WILL_ALTERNATIVE), true), - Alternatives.from(Labels.withId(WILL_ALTERNATIVE), - StaticProperties.group(Labels.withId(WILL_GROUP), - StaticProperties.stringFreeTextProperty(Labels.withId(WILL_TOPIC)), - StaticProperties.stringFreeTextProperty(Labels.withId(WILL_MESSAGE)), - StaticProperties.singleValueSelection(Labels.withId(WILL_RETAIN), - Arrays.asList( - new Option("Yes", false), - new Option("No", true))), - StaticProperties.singleValueSelection( - Labels.withId(WILL_QOS), - Arrays.asList( - new Option("0 - at-most-once", true), - new Option("1 - at-least-once", false), - new Option("2 - exactly-once", false)))))) - .build(); - } - - - @Override - public void onInvocation(SinkParams params, EventSinkRuntimeContext runtimeContext) throws SpRuntimeException { - this.mqttClient = new MqttClient(params); - this.mqttClient.connect(); - } - - @Override - public void onEvent(Event event) throws SpRuntimeException { - this.mqttClient.publish(event); - } - - @Override - public void onDetach() throws SpRuntimeException { - this.mqttClient.disconnect(); - } -} diff --git a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/AdaptersTest.java b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/AdaptersTest.java index 4785c58368..6a334e822f 100644 --- a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/AdaptersTest.java +++ b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/AdaptersTest.java @@ -22,12 +22,12 @@ public class AdaptersTest { -// @Test -// public void testPulsarAdapter() throws Exception { -// try (PulsarAdapterTester pulsarAdapterTester = new PulsarAdapterTester()) { -// pulsarAdapterTester.run(); -// } -// } + @Test + public void testPulsarAdapter() throws Exception { + try (PulsarAdapterTester pulsarAdapterTester = new PulsarAdapterTester()) { + pulsarAdapterTester.run(); + } + } @Test public void testMqttAdapter() throws Exception { diff --git a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/KafkaAdapterTester.java b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/KafkaAdapterTester.java index 4d12cd10f7..d58611a5e4 100644 --- a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/KafkaAdapterTester.java +++ b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/KafkaAdapterTester.java @@ -19,9 +19,10 @@ package org.apache.streampipes.integration.adapters; import org.apache.streampipes.commons.exceptions.connect.AdapterException; -import org.apache.streampipes.connect.iiot.protocol.stream.KafkaProtocol; import org.apache.streampipes.extensions.api.connect.IAdapterConfiguration; import org.apache.streampipes.extensions.api.connect.StreamPipesAdapter; +import org.apache.streampipes.extensions.connectors.kafka.adapter.KafkaProtocol; +import org.apache.streampipes.extensions.connectors.kafka.shared.kafka.KafkaConnectUtils; import org.apache.streampipes.integration.containers.KafkaContainer; import org.apache.streampipes.integration.containers.KafkaDevContainer; import org.apache.streampipes.manager.template.AdapterTemplateHandler; @@ -32,7 +33,6 @@ import org.apache.streampipes.model.staticproperty.StaticPropertyAlternatives; import org.apache.streampipes.model.template.PipelineElementTemplate; import org.apache.streampipes.model.template.PipelineElementTemplateConfig; -import org.apache.streampipes.pe.shared.config.kafka.KafkaConnectUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/MqttAdapterTester.java b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/MqttAdapterTester.java index f7e38f7e1a..89eb52f814 100644 --- a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/MqttAdapterTester.java +++ b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/MqttAdapterTester.java @@ -19,9 +19,10 @@ package org.apache.streampipes.integration.adapters; import org.apache.streampipes.commons.exceptions.connect.AdapterException; -import org.apache.streampipes.connect.iiot.protocol.stream.MqttProtocol; import org.apache.streampipes.extensions.api.connect.IAdapterConfiguration; import org.apache.streampipes.extensions.api.connect.StreamPipesAdapter; +import org.apache.streampipes.extensions.connectors.mqtt.adapter.MqttProtocol; +import org.apache.streampipes.extensions.connectors.mqtt.shared.MqttConnectUtils; import org.apache.streampipes.integration.containers.MosquittoContainer; import org.apache.streampipes.integration.containers.MosquittoDevContainer; import org.apache.streampipes.integration.utils.Utils; @@ -31,7 +32,6 @@ import org.apache.streampipes.model.staticproperty.StaticPropertyAlternatives; import org.apache.streampipes.model.template.PipelineElementTemplate; import org.apache.streampipes.model.template.PipelineElementTemplateConfig; -import org.apache.streampipes.pe.shared.config.mqtt.MqttConnectUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/PulsarAdapterTester.java b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/PulsarAdapterTester.java index 177b38a3da..79da691017 100644 --- a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/PulsarAdapterTester.java +++ b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/PulsarAdapterTester.java @@ -18,9 +18,9 @@ package org.apache.streampipes.integration.adapters; import org.apache.streampipes.commons.exceptions.connect.AdapterException; -import org.apache.streampipes.connect.iiot.protocol.stream.pulsar.PulsarProtocol; import org.apache.streampipes.extensions.api.connect.IAdapterConfiguration; import org.apache.streampipes.extensions.api.connect.StreamPipesAdapter; +import org.apache.streampipes.extensions.connectors.pulsar.adapter.PulsarProtocol; import org.apache.streampipes.integration.containers.PulsarContainer; import org.apache.streampipes.integration.containers.PulsarDevContainer; import org.apache.streampipes.integration.utils.Utils;