You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by er...@apache.org on 2020/05/15 10:40:15 UTC
[plc4x] branch feature/scraper updated (4cafe61 -> 8b86167)
This is an automated email from the ASF dual-hosted git repository.
erobinet pushed a change to branch feature/scraper
in repository https://gitbox.apache.org/repos/asf/plc4x.git.
from 4cafe61 Merge branches 'develop' and 'feature/scraper' of github.com:apache/plc4x into feature/scraper
new 597294d Merge branch 'feature/osgi' of https://github.com/apache/plc4x into feature/scraper
new 912c1ef Camel-Scraper
new cb640f8 ClassCast Exception still
new e5d3cdd Merge branch 'develop' of https://github.com/apache/plc4x into feature/scraper
new 8a1db07 Camel using Scraper -trigger and period parameters to use Triggered Scraper
new 6b0ad60 Cleaning
new f8b1303 Reading with Scraper or Writing using Map<String,Map<String,Object>>
add 82efefb - Moved the karaf-feature stuff into the driver modules themselves - Applied the "prepareField" API change to all drivers that were missing this - Applied the osgi refactoring to the drivers that were missing them - Added static "of" methods to the Field types that were missing them
add c1b9dfe do not stop the global timer, remove and cancel the Timeouts instead
add b9d4979 Merge pull request #155 from ottobackwards/clear-timeouts
add a88791e - Disabled the building of the plc4cpp hello world example
add f1838b0 Made the docker and opennssl detection safe against ioexeptions (if the tools are not installed at all)
add 6032544 - Added some more documentation on installing prerequisites on windows - Fixed the python detection in the prerequisiteCheck.groovy script
add 9a0ba2d - Added a "using plc4x" page
add 97ba102 - Fixed the parser - Made sure the spi module is linked to the drivers - Made the test a little more verbose
add ab6b25d - Worked on the prerequisiteCheck.groovy script - Worked on the setup instructions for Windows
add 845f879 - Updated to the newest IoTDB version
add 34e1177 - Moved the groovy code for generating the artificial version properties into a groovy-file - Added code to generate a pom.adoc file containinng all of maven's properties in an adoc format - Removed now obsolete pom stuff that was already commented out
new 8b86167 Merge branch 'develop' of https://github.com/apache/plc4x into feature/scraper
The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
RELEASE_NOTES | 3 +
plc4j/drivers/ab-eth/pom.xml | 50 ++-
.../org/apache/plc4x/java/abeth/AbEthDriver.java | 14 +-
.../org/apache/plc4x/java/ads/AdsPlcDriver.java | 2 -
plc4j/drivers/eip/pom.xml | 79 +++-
plc4j/drivers/firmata/pom.xml | 38 +-
.../java/firmata/readwrite/FirmataDriver.java | 25 +-
.../java/firmata/readwrite/field/FirmataField.java | 14 +
plc4j/drivers/knxnetip/pom.xml | 31 ++
.../apache/plc4x/java/knxnetip/KnxNetIpDriver.java | 6 +
.../org/apache/plc4x/java/mock/MockDriver.java | 6 +
.../apache/plc4x/java/mock/field/MockField.java | 6 +
plc4j/drivers/modbus/pom.xml | 38 +-
.../org/apache/plc4x/java/modbus/ModbusDriver.java | 9 +-
.../plc4x/java/modbus/field/ModbusField.java | 22 +
plc4j/drivers/opcua/pom.xml | 78 +++-
.../apache/plc4x/java/opcua/OpcuaPlcDriver.java | 6 +
plc4j/drivers/s7/pom.xml | 23 +-
plc4j/drivers/simulated/pom.xml | 54 ++-
.../plc4x/java/simulated/SimulatedDriver.java | 8 +-
plc4j/examples/hello-integration-iotdb/pom.xml | 2 +-
plc4j/examples/hello-webapp/pom.xml | 2 +-
plc4j/integrations/apache-camel/pom.xml | 183 +++++---
.../java/org/apache/plc4x/camel/Constants.java | 3 +-
.../org/apache/plc4x/camel/Plc4XComponent.java | 16 +-
.../java/org/apache/plc4x/camel/Plc4XConsumer.java | 111 +++--
.../java/org/apache/plc4x/camel/Plc4XEndpoint.java | 93 ++--
.../apache/plc4x/camel/Plc4XPollingConsumer.java | 27 +-
.../java/org/apache/plc4x/camel/Plc4XProducer.java | 27 +-
.../main/java/org/apache/plc4x/camel/TagData.java | 12 +
.../org/apache/plc4x/camel/Plc4XComponentTest.java | 10 +-
plc4j/karaf-features/camel/pom.xml | 2 +-
plc4j/pom.xml | 2 +-
plc4j/protocols/ethernet-ip/pom.xml | 124 -----
.../java/ethernetip/model/EtherNetIpField.java | 102 -----
.../plc4x/java/ethernetip/netty/EnipCodec.java | 58 ---
.../ethernetip/netty/Plc4XEtherNetIpProtocol.java | 497 ---------------------
.../netty/events/EtherNetIpConnectedEvent.java | 22 -
.../ethernetip/netty/util/EnipPlcFieldHandler.java | 110 -----
.../ethernet-ip/src/site/asciidoc/index.adoc | 80 ----
.../site/resources/images/WAGO_enip_exporer.png | Bin 293168 -> 0 bytes
plc4j/protocols/pom.xml | 1 -
.../SingleItemToSingleRequestProtocol.java | 4 +-
plc4j/tools/scraper/pom.xml | 14 +-
.../triggerhandler/TriggerConfiguration.java | 14 +-
.../triggeredscraper/TriggeredScraperImplTest.java | 3 +-
.../test/resources/example_triggered_scraper.yml | 8 +-
.../src/test/resources/mock-scraper-config.yml | 4 +-
pom.xml | 121 +----
sandbox/code-gen/pom.xml | 16 +
sandbox/plc4c/drivers/modbus/CMakeLists.txt | 2 +-
sandbox/plc4c/drivers/s7/CMakeLists.txt | 2 +-
sandbox/plc4c/drivers/simulated/CMakeLists.txt | 2 +-
sandbox/plc4c/spi/src/system.c | 13 +-
sandbox/plc4c/spi/test/system_test.c | 4 +
sandbox/plc4cpp/examples/CMakeLists.txt | 2 +-
src/main/script/preSiteGeneration.groovy | 71 +++
src/main/script/prerequisiteCheck.groovy | 189 ++++----
.../asciidoc/developers/preparing/windows.adoc | 22 +
src/site/asciidoc/developers/release/release.adoc | 2 -
src/site/asciidoc/users/users.adoc | 43 ++
61 files changed, 1034 insertions(+), 1498 deletions(-)
delete mode 100644 plc4j/protocols/ethernet-ip/pom.xml
delete mode 100644 plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpField.java
delete mode 100644 plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/EnipCodec.java
delete mode 100644 plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java
delete mode 100644 plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/events/EtherNetIpConnectedEvent.java
delete mode 100644 plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/util/EnipPlcFieldHandler.java
delete mode 100644 plc4j/protocols/ethernet-ip/src/site/asciidoc/index.adoc
delete mode 100644 plc4j/protocols/ethernet-ip/src/site/resources/images/WAGO_enip_exporer.png
create mode 100644 src/main/script/preSiteGeneration.groovy
create mode 100644 src/site/asciidoc/users/users.adoc
[plc4x] 08/08: Merge branch 'develop' of
https://github.com/apache/plc4x into feature/scraper
Posted by er...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
erobinet pushed a commit to branch feature/scraper
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 8b861671a4b0f2c75cdd01d86688deb04c4afc59
Merge: f8b1303 34e1177
Author: etiennerobinet <61...@users.noreply.github.com>
AuthorDate: Fri May 15 12:38:00 2020 +0200
Merge branch 'develop' of https://github.com/apache/plc4x into feature/scraper
Conflicts:
plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/MockDriver.java
plc4j/tools/scraper/pom.xml
RELEASE_NOTES | 3 +
plc4j/drivers/ab-eth/pom.xml | 50 +-
.../org/apache/plc4x/java/abeth/AbEthDriver.java | 14 +-
.../org/apache/plc4x/java/ads/AdsPlcDriver.java | 2 -
plc4j/drivers/eip/pom.xml | 79 ++-
plc4j/drivers/firmata/pom.xml | 38 +-
.../java/firmata/readwrite/FirmataDriver.java | 25 +-
.../java/firmata/readwrite/field/FirmataField.java | 14 +
plc4j/drivers/knxnetip/pom.xml | 31 ++
.../apache/plc4x/java/knxnetip/KnxNetIpDriver.java | 6 +
.../org/apache/plc4x/java/mock/MockDriver.java | 2 +-
.../apache/plc4x/java/mock/field/MockField.java | 6 +
plc4j/drivers/modbus/pom.xml | 38 +-
.../org/apache/plc4x/java/modbus/ModbusDriver.java | 9 +-
.../plc4x/java/modbus/field/ModbusField.java | 22 +
plc4j/drivers/opcua/pom.xml | 78 ++-
.../apache/plc4x/java/opcua/OpcuaPlcDriver.java | 6 +
.../plc4x/java/opcua/protocol/OpcuaField.java | 1 -
.../java/opcua/protocol/OpcuaPlcFieldHandler.java | 1 -
.../opcua/protocol/OpcuaSubsriptionHandle.java | 1 -
plc4j/drivers/s7/pom.xml | 23 +-
plc4j/drivers/simulated/pom.xml | 54 +-
.../plc4x/java/simulated/SimulatedDriver.java | 8 +-
plc4j/examples/hello-integration-iotdb/pom.xml | 2 +-
plc4j/examples/hello-webapp/pom.xml | 2 +-
plc4j/integrations/apache-camel/pom.xml | 165 +++---
plc4j/pom.xml | 2 +-
plc4j/protocols/ethernet-ip/pom.xml | 124 -----
.../java/ethernetip/model/EtherNetIpField.java | 102 ----
.../plc4x/java/ethernetip/netty/EnipCodec.java | 58 ---
.../ethernetip/netty/Plc4XEtherNetIpProtocol.java | 497 ------------------
.../netty/events/EtherNetIpConnectedEvent.java | 22 -
.../ethernetip/netty/util/EnipPlcFieldHandler.java | 110 ----
.../ethernet-ip/src/site/asciidoc/index.adoc | 80 ---
.../site/resources/images/WAGO_enip_exporer.png | Bin 293168 -> 0 bytes
plc4j/protocols/pom.xml | 1 -
.../SingleItemToSingleRequestProtocol.java | 4 +-
pom.xml | 119 +----
sandbox/code-gen/pom.xml | 16 +
sandbox/plc4c/.clang-format | 186 +++++++
sandbox/plc4c/.gitignore | 145 ++++++
sandbox/plc4c/CMakeLists.txt | 54 +-
sandbox/plc4c/CODE_CONVENTIONS.md | 43 ++
sandbox/plc4c/README.md | 41 ++
sandbox/plc4c/api/CMakeLists.txt | 9 +-
sandbox/plc4c/api/include/plc4c/connection.h | 313 +++++++++++
sandbox/plc4c/api/include/plc4c/data.h | 154 ++++++
.../test/c/AdderTest.c => include/plc4c/plc4c.h} | 35 +-
sandbox/plc4c/api/include/plc4c/read.h | 114 ++++
sandbox/plc4c/api/include/plc4c/subscribe.h | 259 +++++++++
sandbox/plc4c/api/include/plc4c/system.h | 278 ++++++++++
sandbox/plc4c/api/include/plc4c/types.h | 197 +++++++
sandbox/plc4c/api/include/plc4c/utils/list.h | 81 +++
sandbox/plc4c/api/include/plc4c/utils/queue.h | 60 +++
sandbox/plc4c/api/include/plc4c/write.h | 115 ++++
sandbox/plc4c/api/src/main/include/plc4c.h | 280 ----------
sandbox/plc4c/design-guidelines.adoc | 53 +-
sandbox/plc4c/drivers/CMakeLists.txt | 1 +
sandbox/plc4c/drivers/modbus/CMakeLists.txt | 9 +-
.../modbus/include/plc4c/driver_modbus.h} | 30 +-
sandbox/plc4c/drivers/modbus/src/driver_modbus.c | 41 ++
.../plc4c/drivers/modbus/src/main/include/Test.h | 19 -
sandbox/plc4c/drivers/s7/CMakeLists.txt | 9 +-
.../s7/include/plc4c/driver_s7.h} | 15 +-
sandbox/plc4c/drivers/s7/src/driver_s7.c | 41 ++
.../serial => drivers/simulated}/CMakeLists.txt | 10 +-
.../simulated/include/plc4c/driver_simulated.h} | 17 +-
.../plc4c/drivers/simulated/src/driver_simulated.c | 424 +++++++++++++++
sandbox/plc4c/examples/CMakeLists.txt | 1 +
.../CMakeLists.txt | 11 +-
.../hello-subsciptions/src/hello_subscriptions.c | 285 ++++++++++
sandbox/plc4c/examples/hello-world/CMakeLists.txt | 11 +-
.../plc4c/examples/hello-world/src/hello_world.c | 337 ++++++++++++
.../examples/hello-world/src/main/c/hello_world.c | 71 ---
.../integrations/apache-mynewt/CMakeLists.txt | 2 +-
sandbox/plc4c/pom.xml | 577 +++++++++++----------
sandbox/plc4c/spi/CMakeLists.txt | 18 +-
.../plc4c/spi/system_private.h} | 26 +-
.../plc4c/spi/include/plc4c/spi/types_private.h | 301 +++++++++++
sandbox/plc4c/spi/src/connection.c | 277 ++++++++++
sandbox/plc4c/spi/src/data.c | 183 +++++++
sandbox/plc4c/spi/src/main/c/plc4c.c | 100 ----
sandbox/plc4c/spi/src/read.c | 108 ++++
sandbox/plc4c/spi/src/subscribe.c | 344 ++++++++++++
sandbox/plc4c/spi/src/system.c | 488 +++++++++++++++++
sandbox/plc4c/spi/src/types.c | 147 ++++++
sandbox/plc4c/spi/src/utils/list.c | 189 +++++++
sandbox/plc4c/spi/src/utils/queue.c | 73 +++
sandbox/plc4c/spi/src/write.c | 116 +++++
sandbox/plc4c/spi/test/system_test.c | 97 ++++
sandbox/plc4c/transports/CMakeLists.txt | 1 +
.../transports/{serial => dummy}/CMakeLists.txt | 10 +-
.../dummy/include/plc4c/transport_dummy.h} | 28 +-
.../dummy/src/transport_dummy.c} | 10 +
sandbox/plc4c/transports/serial/CMakeLists.txt | 10 +-
.../serial/include/plc4c/transport_serial.h} | 28 +-
.../serial/src/transport_serial.c} | 10 +
sandbox/plc4c/transports/tcp/CMakeLists.txt | 10 +-
.../tcp/include/plc4c/transport_tcp.h} | 28 +-
.../Test.c => transports/tcp/src/transport_tcp.c} | 10 +
sandbox/plc4cpp/examples/CMakeLists.txt | 2 +-
src/main/script/preSiteGeneration.groovy | 71 +++
src/main/script/prerequisiteCheck.groovy | 189 +++----
.../asciidoc/developers/preparing/windows.adoc | 22 +
src/site/asciidoc/developers/release/release.adoc | 2 -
src/site/asciidoc/users/users.adoc | 43 ++
106 files changed, 6768 insertions(+), 2316 deletions(-)
[plc4x] 04/08: Merge branch 'develop' of
https://github.com/apache/plc4x into feature/scraper
Posted by er...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
erobinet pushed a commit to branch feature/scraper
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit e5d3cdd65b8ea04c16aacd3b3366e539d93ace29
Merge: cb640f8 6dd963f
Author: etiennerobinet <61...@users.noreply.github.com>
AuthorDate: Tue May 12 10:31:08 2020 +0200
Merge branch 'develop' of https://github.com/apache/plc4x into feature/scraper
RELEASE_NOTES | 2 +
plc4j/drivers/firmata/pom.xml | 12 +++
plc4j/drivers/knxnetip/pom.xml | 12 +++
plc4j/drivers/modbus/pom.xml | 12 +++
plc4j/drivers/opcua/pom.xml | 39 ++++----
.../apache/plc4x/java/opcua/OpcuaPlcDriver.java | 1 -
plc4j/pom.xml | 2 +-
plc4j/transports/pcap-replay/pom.xml | 20 +++-
plc4j/transports/raw-socket/pom.xml | 19 ++++
plc4j/transports/serial/pom.xml | 20 +++-
plc4j/transports/udp/pom.xml | 20 ++++
src/site/asciidoc/users/protocols/opc-ua.adoc | 104 ++++++++++++++++++++-
12 files changed, 231 insertions(+), 32 deletions(-)
[plc4x] 06/08: Cleaning
Posted by er...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
erobinet pushed a commit to branch feature/scraper
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 6b0ad60a9c2468040e0a9c26818b68eaab0de9c4
Author: Etienne Robinet <et...@gmail.com>
AuthorDate: Fri May 15 10:26:04 2020 +0200
Cleaning
---
.../src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java | 1 -
.../triggerhandler/TriggerConfiguration.java | 12 +++++-------
2 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
index e069e2e..c67f288 100644
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
@@ -120,7 +120,6 @@ public class Plc4XConsumer extends DefaultConsumer {
ScraperConfiguration configuration = getScraperConfig(validateTags());
TriggerCollector collector = new TriggerCollectorImpl(plc4XEndpoint.getPlcDriverManager());
TriggeredScraperImpl scraper = new TriggeredScraperImpl(configuration, (job, alias, response) -> {
- LOGGER.info("SCRAPER {} {} {}",job,alias,response);
try {
Exchange exchange = plc4XEndpoint.createExchange();
exchange.getIn().setBody(response);
diff --git a/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/triggerhandler/TriggerConfiguration.java b/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/triggerhandler/TriggerConfiguration.java
index 0f3ddc3..8035270 100644
--- a/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/triggerhandler/TriggerConfiguration.java
+++ b/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/triggerhandler/TriggerConfiguration.java
@@ -40,7 +40,6 @@ import java.util.regex.Pattern;
public class TriggerConfiguration{
private static final Logger logger = LoggerFactory.getLogger(TriggerConfiguration.class);
- //private static final String S_7_TRIGGER_VAR = "S7_TRIGGER_VAR";
private static final String TRIGGER = "TRIGGER_VAR";
private static final String SCHEDULED = "SCHEDULED";
private static final String PREVIOUS_DEF = "PREV";
@@ -56,7 +55,7 @@ public class TriggerConfiguration{
private List<TriggerElement> triggerElementList;
/**
- * default constructor when an S7Field should be used for triggering
+ * default constructor when an Field should be used for triggering
* @param triggerType type of trigger from enum
* @param scrapeInterval scrape interval of triggered variable
* @param triggerElementList list of triggerElemts with concat that combined is used as triger
@@ -75,10 +74,10 @@ public class TriggerConfiguration{
String exceptionMessage;
- if(this.triggerType.equals(TriggerType.S7_TRIGGER_VAR) ||this.triggerType.equals(TriggerType.TRIGGER_VAR) ) {
+ if(this.triggerType.equals(TriggerType.TRIGGER_VAR) ) {
//test for valid field-connection string, on exception quit job and return message to user
if(this.triggerElementList.isEmpty()){
- exceptionMessage = String.format("No items in trigger List for trigger-type S7_TRIGGER_VAR for Job %s!", triggeredScrapeJobImpl.getJobName());
+ exceptionMessage = String.format("No items in trigger List for trigger-type TRIGGER_VAR for Job %s!", triggeredScrapeJobImpl.getJobName());
throw new ScraperConfigurationException(exceptionMessage);
}
checkTriggerVarList();
@@ -150,7 +149,7 @@ public class TriggerConfiguration{
/**
* defines the used base type for comparison
* @return the detected base type
- * @throws ScraperException when an unsupported S7-Type is chosen,which is not (yet) implemented for comparison
+ * @throws ScraperException when an unsupported Type is chosen,which is not (yet) implemented for comparison
* ToDo check how to handle time-variables if needed
*/
private static Class<?> validateDataType(PlcField plcField) throws ScraperConfigurationException {
@@ -541,12 +540,11 @@ public class TriggerConfiguration{
this.plcConnectionString = plcConnectionString;
if(triggerStrategy.equals(TRIGGER)){
try {
- //this.plcField = S7Field.of(this.plcFieldString);
this.plcField = prepareField(plcFieldString);
}
catch (Exception e){
if(logger.isDebugEnabled()) {
- logger.debug("Exception occurred parsing a S7Field");
+ logger.debug("Exception occurred parsing a PlcField");
}
throw new ScraperConfigurationException("Exception on parsing S7Field (" + plcField + "): " + e.getMessage());
}
[plc4x] 07/08: Reading with Scraper or Writing using Map>
Posted by er...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
erobinet pushed a commit to branch feature/scraper
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit f8b13037427db0e042ee9163ed1a88db0dbfdb19
Author: Etienne Robinet <et...@gmail.com>
AuthorDate: Fri May 15 12:36:25 2020 +0200
Reading with Scraper or Writing using Map<String,Map<String,Object>>
---
.../src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java | 1 +
.../src/main/java/org/apache/plc4x/camel/Plc4XProducer.java | 13 +++++++------
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
index c67f288..c81fe66 100644
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
@@ -119,6 +119,7 @@ public class Plc4XConsumer extends DefaultConsumer {
try {
ScraperConfiguration configuration = getScraperConfig(validateTags());
TriggerCollector collector = new TriggerCollectorImpl(plc4XEndpoint.getPlcDriverManager());
+
TriggeredScraperImpl scraper = new TriggeredScraperImpl(configuration, (job, alias, response) -> {
try {
Exchange exchange = plc4XEndpoint.createExchange();
diff --git a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java
index 151d83b..2325d3a 100644
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java
@@ -31,6 +31,7 @@ import org.apache.plc4x.java.api.messages.PlcWriteResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
@@ -56,16 +57,16 @@ public class Plc4XProducer extends DefaultAsyncProducer {
Object body = in.getBody();
PlcWriteRequest.Builder builder = plcConnection.writeRequestBuilder();
if (body instanceof Map) { //Check if we have a Map
- Map<String, Map.Entry<String, Object>> tags = (Map<String, Map.Entry<String, Object>>) body;
- for (Map.Entry<String, Map.Entry<String, Object>> entry : tags.entrySet()) {
- //Tags are stored like this --> Map<Tagname,Entry<Query,Value>> for writing
+ Map<String, Map<String, Object>> tags = (Map<String, Map<String, Object>>) body;
+ for (Map.Entry<String, Map<String, Object>> entry : tags.entrySet()) {
+ //Tags are stored like this --> Map<Tagname,Map<Query,Value>> for writing
String name = entry.getKey();
- String query = entry.getValue().getKey();
- Object value = entry.getValue().getValue();
+ String query = entry.getValue().keySet().iterator().next();
+ Object value = entry.getValue().get(query);
builder.addItem(name,query,value);
}
} else {
- throw new PlcInvalidFieldException("Parameter 'tags' has to be a List of TagData");
+ throw new PlcInvalidFieldException("The body must contain a Map<String,Map<String,Object>");
}
CompletableFuture<? extends PlcWriteResponse> completableFuture = builder.build().execute();
[plc4x] 03/08: ClassCast Exception still
Posted by er...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
erobinet pushed a commit to branch feature/scraper
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit cb640f8fd367d25f0d85e45623dee9bea922e9e7
Author: etiennerobinet <61...@users.noreply.github.com>
AuthorDate: Tue May 12 09:58:35 2020 +0200
ClassCast Exception still
---
.../examples/hello-world-plc4x/src/main/resources/config.yaml | 10 ++++++++++
plc4j/integrations/apache-camel/pom.xml | 6 ------
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/plc4j/examples/hello-world-plc4x/src/main/resources/config.yaml b/plc4j/examples/hello-world-plc4x/src/main/resources/config.yaml
new file mode 100644
index 0000000..258f727
--- /dev/null
+++ b/plc4j/examples/hello-world-plc4x/src/main/resources/config.yaml
@@ -0,0 +1,10 @@
+sources:
+ AB: eip:tcp://163.243.183.250?backplane=1&slot=4
+ S7: s7://192.168.178.10
+jobs:
+ - name: triggerS7
+ triggerConfig: (TRIGGER_VAR,1000,(%M200.0:BOOL)==(true))
+ sources:
+ - S7
+ fields:
+ test: "%DB1.DBW0:INT"
\ No newline at end of file
diff --git a/plc4j/integrations/apache-camel/pom.xml b/plc4j/integrations/apache-camel/pom.xml
index 85cd04f..0368d98 100644
--- a/plc4j/integrations/apache-camel/pom.xml
+++ b/plc4j/integrations/apache-camel/pom.xml
@@ -140,12 +140,6 @@
<version>0.7.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-driver-eip</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <scope>test</scope>
- </dependency>
</dependencies>
<dependencyManagement>
[plc4x] 01/08: Merge branch 'feature/osgi' of
https://github.com/apache/plc4x into feature/scraper
Posted by er...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
erobinet pushed a commit to branch feature/scraper
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 597294d6b300e267648a3b71dbadbe5746c8a623
Merge: 2ef6adf f2db740
Author: etiennerobinet <61...@users.noreply.github.com>
AuthorDate: Fri May 8 13:01:27 2020 +0200
Merge branch 'feature/osgi' of https://github.com/apache/plc4x into feature/scraper
plc4j/api/pom.xml | 20 +---
.../java/org/apache/plc4x/java/DriverManager.java | 30 ------
.../org/apache/plc4x/java/PlcDriverManager.java | 6 +-
.../org/apache/plc4x/java/osgi/ApiActivator.java | 104 ---------------------
.../apache/plc4x/java/osgi/OsgiDriverManager.java | 81 ----------------
plc4j/drivers/eip/pom.xml | 1 +
plc4j/drivers/s7/pom.xml | 1 +
plc4j/karaf-features/eip/pom.xml | 6 ++
plc4j/karaf-features/s7/pom.xml | 5 +
plc4j/{karaf-features/eip => osgi}/pom.xml | 50 ++++------
.../apache/plc4x/java/osgi/DriverActivator.java | 53 +++++++++++
.../apache/plc4x/java/osgi/TransportActivator.java | 54 +++++++++++
plc4j/pom.xml | 5 +-
plc4j/spi/pom.xml | 8 +-
.../org/apache/plc4x/java/osgi/SpiActivator.java | 89 ------------------
plc4j/transports/tcp/pom.xml | 1 +
16 files changed, 147 insertions(+), 367 deletions(-)
[plc4x] 05/08: Camel using Scraper -trigger and period parameters
to use Triggered Scraper
Posted by er...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
erobinet pushed a commit to branch feature/scraper
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 8a1db07fa1a845a52339ed37676f4a9737712438
Merge: e5d3cdd 2dbaa94
Author: Etienne Robinet <et...@gmail.com>
AuthorDate: Tue May 12 14:03:37 2020 +0200
Camel using Scraper
-trigger and period parameters to use Triggered Scraper
.../org/apache/plc4x/java/mock/MockDriver.java | 6 ++
.../apache/plc4x/java/opcua/OpcuaPlcDriver.java | 1 -
.../src/main/resources/config.yaml | 10 ---
plc4j/integrations/apache-camel/pom.xml | 6 ++
.../java/org/apache/plc4x/camel/Constants.java | 3 +-
.../org/apache/plc4x/camel/Plc4XComponent.java | 14 ++--
.../java/org/apache/plc4x/camel/Plc4XConsumer.java | 74 ++++++++---------
.../java/org/apache/plc4x/camel/Plc4XEndpoint.java | 94 ++++++++++------------
.../apache/plc4x/camel/Plc4XPollingConsumer.java | 27 +++++--
.../java/org/apache/plc4x/camel/Plc4XProducer.java | 26 +++---
.../org/apache/plc4x/camel/Plc4XComponentTest.java | 10 +--
plc4j/karaf-features/camel/pom.xml | 2 +-
.../triggeredscraper/TriggeredScraperImplTest.java | 3 +-
.../test/resources/example_triggered_scraper.yml | 8 +-
.../src/test/resources/mock-scraper-config.yml | 4 +-
.../asciidoc/developers/release/validation.adoc | 5 ++
16 files changed, 149 insertions(+), 144 deletions(-)
diff --cc plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/MockDriver.java
index 3878fa0,3878fa0..e04a55d
--- a/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/MockDriver.java
+++ b/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/MockDriver.java
@@@ -23,6 -23,6 +23,7 @@@ import org.apache.plc4x.java.api.authen
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
import org.apache.plc4x.java.mock.connection.MockConnection;
++import org.apache.plc4x.java.mock.field.MockField;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@@ -60,4 -60,4 +61,9 @@@ public class MockDriver implements PlcD
return connectionMap.computeIfAbsent(deviceName, name -> new MockConnection(authentication));
}
++ @Override
++ public MockField prepareField(String query){
++ return new MockField(query);
++ }
++
}
diff --cc plc4j/integrations/apache-camel/pom.xml
index 0368d98,cfa551a..fced3e1
--- a/plc4j/integrations/apache-camel/pom.xml
+++ b/plc4j/integrations/apache-camel/pom.xml
@@@ -128,18 -128,6 +128,24 @@@
<version>3.1.0</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.plc4x</groupId>
+ <artifactId>plc4j-connection-pool</artifactId>
+ <version>0.7.0-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.plc4x</groupId>
+ <artifactId>plc4j-scraper</artifactId>
+ <version>0.7.0-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
++ <dependency>
++ <groupId>org.apache.plc4x</groupId>
++ <artifactId>plc4j-scraper</artifactId>
++ <version>0.7.0-SNAPSHOT</version>
++ <scope>compile</scope>
++ </dependency>
</dependencies>
<dependencyManagement>
diff --cc plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Constants.java
index 733e269,733e269..e5bfd12
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Constants.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Constants.java
@@@ -22,7 -22,7 +22,8 @@@ public class Constants
public static final String FIELD_NAME_HEADER = "fieldName";
public static final String FIELD_QUERY_HEADER = "fieldQuery";
--
++ public final static String TRIGGER = "TRIGGER_VAR";
++ public final static String PLC_NAME = "PLC";
private Constants() {
throw new IllegalStateException("Utility class!");
}
diff --cc plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XComponent.java
index f7e705f,82763ff..b629bd2
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XComponent.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XComponent.java
@@@ -21,11 -21,11 +21,10 @@@ package org.apache.plc4x.camel
import org.apache.camel.Endpoint;
import org.apache.camel.support.DefaultComponent;
import org.apache.camel.util.IntrospectionSupport;
++
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
--import java.util.ArrayList;
--import java.util.List;
import java.util.Map;
public class Plc4XComponent extends DefaultComponent {
@@@ -34,18 -34,10 +33,21 @@@
@Override
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
Endpoint endpoint = new Plc4XEndpoint(uri, this);
-- List<TagData>tags = getAndRemoveOrResolveReferenceParameter(parameters,"tags", List.class);
++ //Tags have a Name, a query and an optional value (for writing)
++ //Reading --> Map<String,String>
++ //Writing --> Map<String,Map.Entry<String,Object>>
++ Map<String, Object> tags = getAndRemoveOrResolveReferenceParameter(parameters, "tags", Map.class);
if(tags!=null){
((Plc4XEndpoint)endpoint).setTags(tags);
}
+ String trigger = getAndRemoveOrResolveReferenceParameter(parameters,"trigger",String.class);
+ if(trigger!=null){
+ ((Plc4XEndpoint)endpoint).setTrigger(trigger);
+ }
- int period = getAndRemoveOrResolveReferenceParameter(parameters,"period",Integer.class);
- if(period!=0){
- ((Plc4XEndpoint)endpoint).setPeriod(period);
++ Object period = getAndRemoveOrResolveReferenceParameter(parameters,"period",Integer.class);
++ if(period!=null && period instanceof Integer){
++ ((Plc4XEndpoint)endpoint).setPeriod((int)period);
+ }
setProperties(endpoint,parameters);
return endpoint;
}
diff --cc plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
index 132aed8,18161db..e069e2e
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
@@@ -25,17 -25,8 +25,18 @@@ import org.apache.camel.support.Default
import org.apache.camel.spi.ExceptionHandler;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcException;
++import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
import org.apache.plc4x.java.api.messages.PlcReadRequest;
import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
+import org.apache.plc4x.java.scraper.ScrapeJob;
+import org.apache.plc4x.java.scraper.config.JobConfigurationImpl;
+import org.apache.plc4x.java.scraper.config.ScraperConfiguration;
+import org.apache.plc4x.java.scraper.config.triggeredscraper.ScraperConfigurationTriggeredImpl;
+import org.apache.plc4x.java.scraper.exception.ScraperException;
+import org.apache.plc4x.java.scraper.triggeredscraper.TriggeredScrapeJobImpl;
+import org.apache.plc4x.java.scraper.triggeredscraper.TriggeredScraperImpl;
+import org.apache.plc4x.java.scraper.triggeredscraper.triggerhandler.collector.TriggerCollector;
+import org.apache.plc4x.java.scraper.triggeredscraper.triggerhandler.collector.TriggerCollectorImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@@ -47,26 -41,19 +48,23 @@@ public class Plc4XConsumer extends Defa
private ExceptionHandler exceptionHandler;
private PlcConnection plcConnection;
-- private List<TagData> tags;
- private Map<String,String> fields;
- private Map parameters;
++ private Map<String,Object> tags;
+ private String trigger;
private PlcSubscriptionResponse subscriptionResponse;
private Plc4XEndpoint plc4XEndpoint;
private ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
private ScheduledFuture<?> future;
- private final static String TRIGGER = "TRIGGER_VAR";
- private final static String PLC_NAME = "PLC";
++
+
public Plc4XConsumer(Plc4XEndpoint endpoint, Processor processor) throws PlcException {
super(endpoint, processor);
plc4XEndpoint =endpoint;
this.plcConnection = endpoint.getConnection();
this.tags = endpoint.getTags();
- this.fields = TagData.toMap(this.tags);
+ this.trigger= endpoint.getTrigger();
+ plc4XEndpoint=endpoint;
}
@Override
@@@ -89,79 -76,41 +87,75 @@@
@Override
protected void doStart() throws InterruptedException, ExecutionException {
- PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
- if (tags.size()==1){
- TagData tag = tags.get(0);
- builder.addItem(tag.getTagName(),tag.getQuery());
-
- }
- else{
- for(TagData tag : tags){
- builder.addItem(tag.getTagName(),tag.getQuery());
- }
- }
- PlcReadRequest request = builder.build();
- future = executorService.schedule(() -> {
- request.execute().thenAccept(response -> {
+ if(trigger==null) {
+ PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
- if (tags.size() == 1) {
- TagData tag = tags.get(0);
- builder.addItem(tag.getTagName(), tag.getQuery());
-
- } else {
- for (TagData tag : tags) {
- builder.addItem(tag.getTagName(), tag.getQuery());
++ for( String tag : tags.keySet()){
++ try{
++ String query = (String)tags.get(tag);
++ builder.addItem(tag,query);
++ }
++ catch (PlcIncompatibleDatatypeException e){
++ LOGGER.error("For consumer, please use Map<String,String>, currently using {}",tags.getClass().getSimpleName());
+ }
+ }
+ PlcReadRequest request = builder.build();
+ future = executorService.schedule(() -> {
+ request.execute().thenAccept(response -> {
try {
Exchange exchange = plc4XEndpoint.createExchange();
- if (tags.size() > 1) {
- if (tags.size()>1){
-- List<TagData> values = new ArrayList<>();
- for (TagData tag : tags) {
- for(TagData tag : tags){
-- tag.setValue(response.getObject(tag.getTagName()));
-- values.add(tag);
-- }
-- exchange.getIn().setBody(values);
- } else {
- }
- else {
-- TagData tag = tags.get(0);
-- tag.setValue(response.getAllObjects(tag.getTagName()));
-- exchange.getIn().setBody(tag);
++ Map<String,Object> rsp = new HashMap<>();
++ for(String field : response.getFieldNames()){
++ rsp.put(field,response.getObject(field));
}
++ exchange.getIn().setBody(rsp);
getProcessor().process(exchange);
} catch (Exception e) {
exceptionHandler.handleException(e);
}
});
- }, 500, TimeUnit.MILLISECONDS);
+ }, 500, TimeUnit.MILLISECONDS);
+ }
+ else{
-
- ScraperConfiguration configuration = getScraperConfig(TagData.toMap(plc4XEndpoint.getTags()));
- TriggerCollector collector = new TriggerCollectorImpl(plc4XEndpoint.getPlcDriverManager());
+ try {
++ ScraperConfiguration configuration = getScraperConfig(validateTags());
++ TriggerCollector collector = new TriggerCollectorImpl(plc4XEndpoint.getPlcDriverManager());
+ TriggeredScraperImpl scraper = new TriggeredScraperImpl(configuration, (job, alias, response) -> {
++ LOGGER.info("SCRAPER {} {} {}",job,alias,response);
+ try {
+ Exchange exchange = plc4XEndpoint.createExchange();
- if (tags.size() > 1) {
- List<TagData> values = new ArrayList<>();
- for (TagData tag : tags) {
- tag.setValue(response.get(tag.getTagName()));
- values.add(tag);
- }
- exchange.getIn().setBody(values);
- } else {
- TagData tag = tags.get(0);
- tag.setValue(response.get(tag.getTagName()));
- exchange.getIn().setBody(tag);
- }
++ exchange.getIn().setBody(response);
+ getProcessor().process(exchange);
+ } catch (Exception e) {
+ exceptionHandler.handleException(e);
+ };
+ },collector);
+ scraper.start();
+ collector.start();
+ } catch (ScraperException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
++ private Map<String, String> validateTags() {
++ Map<String, String> map = new HashMap<>();
++ for(Map.Entry<String,Object>tag: tags.entrySet()){
++ if(tag.getValue() instanceof String){
++ map.put(tag.getKey(),(String)tag.getValue());
++ }
++ }
++ if(map.size()!=tags.size()){
++ LOGGER.error("At least one entry does not match the format : Map.Entry<String,String> ");
++ return null;
++ }
++ else return map;
++ }
++
+ private ScraperConfigurationTriggeredImpl getScraperConfig(Map<String,String> tagList){
+ String config = "(TRIGGER_VAR,"+plc4XEndpoint.getPeriod()+",("+ plc4XEndpoint.getTrigger() +")==(true))";
- List<JobConfigurationImpl> job = Collections.singletonList(new JobConfigurationImpl("PLC4X-Camel",config,0,Collections.singletonList(PLC_NAME),tagList));
- Map<String,String> source = Collections.singletonMap(PLC_NAME,plc4XEndpoint.getUri());
++ List<JobConfigurationImpl> job = Collections.singletonList(new JobConfigurationImpl("PLC4X-Camel",config,0,Collections.singletonList(Constants.PLC_NAME),tagList));
++ Map<String,String> source = Collections.singletonMap(Constants.PLC_NAME,plc4XEndpoint.getUri());
+ return new ScraperConfigurationTriggeredImpl(source,job);
}
@Override
diff --cc plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XEndpoint.java
index 5e493ec,c7e6a0e..e14e9f5
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XEndpoint.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XEndpoint.java
@@@ -24,6 -24,6 +24,7 @@@ import org.apache.camel.spi.Metadata
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriPath;
++import org.apache.commons.math3.util.Pair;
import org.apache.plc4x.java.PlcDriverManager;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
@@@ -36,67 -36,30 +37,64 @@@ import java.util.Objects
@UriEndpoint(scheme = "plc4x", title = "PLC4X", syntax = "plc4x:driver", label = "plc4x")
public class Plc4XEndpoint extends DefaultEndpoint {
-- @UriPath @Metadata(required = true)
++ @UriPath
++ @Metadata(required = true)
private String driver;
@UriParam
-- private List<TagData> tags;
++ private Map<String, Object> tags;
+ @UriParam
+ private String trigger;
+
+ @UriParam
+ private int period;
+
+ public int getPeriod() {
+ return period;
+ }
+
+ public void setPeriod(int period) {
+ this.period = period;
+ }
-- private final PlcDriverManager plcDriverManager;
-- private PlcConnection connection;
++ private PlcDriverManager plcDriverManager;
++ private PlcConnection connection;
private String uri;
+ public String getUri() {
+ return uri;
+ }
+
+ public String getTrigger() {
+ return trigger;
+ }
+
+ public void setTrigger(String trigger) {
+ this.trigger = trigger;
++ plcDriverManager = new PooledPlcDriverManager();
++ String plc4xURI = uri.replaceFirst("plc4x:/?/?", "");
++ uri=plc4xURI;
++ try {
++ connection = plcDriverManager.getConnection(plc4xURI);
++ } catch (PlcConnectionException e) {
++ e.printStackTrace();
++ }
+ }
+
public Plc4XEndpoint(String endpointUri, Component component) {
super(endpointUri, component);
- if(trigger==null) {
- plcDriverManager = new PlcDriverManager();
- uri = endpointUri;
- //Here we establish the connection in the endpoint, as it is created once during the context
- // to avoid disconnecting and reconnecting for every request
- try {
- String plc4xURI = uri.replaceFirst("plc4x:/?/?", "");
- uri=plc4xURI;
- connection = plcDriverManager.getConnection(plc4xURI);
-
- } catch (PlcConnectionException e) {
- e.printStackTrace();
- }
- }
- else {
- plcDriverManager = new PooledPlcDriverManager();
- plcDriverManager= new PlcDriverManager();
++ plcDriverManager = new PlcDriverManager();
+ uri = endpointUri;
-
+ //Here we establish the connection in the endpoint, as it is created once during the context
+ // to avoid disconnecting and reconnecting for every request
+ try {
String plc4xURI = uri.replaceFirst("plc4x:/?/?", "");
- uri=plc4xURI;
- try {
- connection = plcDriverManager.getConnection(plc4xURI);
- } catch (PlcConnectionException e) {
- e.printStackTrace();
- }
++ uri = plc4xURI;
+ connection = plcDriverManager.getConnection(plc4xURI);
+
+ } catch (PlcConnectionException e) {
+ e.printStackTrace();
}
}
@@@ -112,11 -75,11 +110,10 @@@
@Override
public Producer createProducer() throws Exception {
//Checking if connection is still up and reconnecting if not
-- if(!connection.isConnected()){
-- try{
-- connection= plcDriverManager.getConnection(uri.replaceFirst("plc4x:/?/?", ""));
-- }
-- catch (Exception e){
++ if (!connection.isConnected()) {
++ try {
++ connection = plcDriverManager.getConnection(uri.replaceFirst("plc4x:/?/?", ""));
++ } catch (Exception e) {
e.printStackTrace();
}
}
@@@ -126,11 -89,11 +123,10 @@@
@Override
public Consumer createConsumer(Processor processor) throws Exception {
//Checking if connection is still up and reconnecting if not
-- if(!connection.isConnected()){
-- try{
-- connection= plcDriverManager.getConnection(uri.replaceFirst("plc4x:/?/?", ""));
-- }
-- catch (Exception e){
++ if (!connection.isConnected()) {
++ try {
++ connection = plcDriverManager.getConnection(uri.replaceFirst("plc4x:/?/?", ""));
++ } catch (Exception e) {
e.printStackTrace();
}
}
@@@ -140,11 -103,11 +136,10 @@@
@Override
public PollingConsumer createPollingConsumer() throws Exception {
//Checking if connection is still up and reconnecting if not
-- if(!connection.isConnected()){
-- try{
-- connection= plcDriverManager.getConnection(uri.replaceFirst("plc4x:/?/?", ""));
-- }
-- catch (Exception e){
++ if (!connection.isConnected()) {
++ try {
++ connection = plcDriverManager.getConnection(uri.replaceFirst("plc4x:/?/?", ""));
++ } catch (Exception e) {
e.printStackTrace();
}
}
@@@ -168,11 -131,11 +163,11 @@@
this.driver = driver;
}
-- public List<TagData> getTags() {
++ public Map<String, Object> getTags() {
return tags;
}
-- public void setTags(List<TagData> tags) {
++ public void setTags(Map<String, Object> tags) {
this.tags = tags;
}
@@@ -195,20 -158,20 +190,19 @@@
@Override
public int hashCode() {
-- return Objects.hash(super.hashCode(), getDriver(), getTags(),getPlcDriverManager());
++ return Objects.hash(super.hashCode(), getDriver(), getTags(), getPlcDriverManager());
}
@Override
-- public void doStop(){
++ public void doStop() {
//Shutting down the connection when leaving the Context
-- try{
-- if(connection!=null){
-- if(connection.isConnected()){
++ try {
++ if (connection != null) {
++ if (connection.isConnected()) {
connection.close();
}
}
-- }
-- catch (Exception e){
++ } catch (Exception e) {
e.printStackTrace();
}
}
diff --cc plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XPollingConsumer.java
index a261606,a261606..c6c369e
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XPollingConsumer.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XPollingConsumer.java
@@@ -26,8 -26,8 +26,14 @@@ import org.apache.camel.spi.ExceptionHa
import org.apache.camel.support.LoggingExceptionHandler;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcException;
++import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
import org.apache.plc4x.java.api.messages.PlcReadRequest;
import org.apache.plc4x.java.api.messages.PlcReadResponse;
++import org.apache.plc4x.java.scraper.config.ScraperConfiguration;
++import org.apache.plc4x.java.scraper.exception.ScraperException;
++import org.apache.plc4x.java.scraper.triggeredscraper.TriggeredScraperImpl;
++import org.apache.plc4x.java.scraper.triggeredscraper.triggerhandler.collector.TriggerCollector;
++import org.apache.plc4x.java.scraper.triggeredscraper.triggerhandler.collector.TriggerCollectorImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@@ -44,14 -44,14 +50,17 @@@ public class Plc4XPollingConsumer imple
private ExceptionHandler exceptionHandler;
private PlcConnection plcConnection;
private PlcReadRequest.Builder requestBuilder;
-- private Map parameters;
--
++ private Map<String,Object> tags;
++ private String trigger;
++//TODO Is this still needed with the scraper working?
public Plc4XPollingConsumer(Plc4XEndpoint endpoint) throws PlcException {
plc4XEndpoint=endpoint;
this.exceptionHandler = new LoggingExceptionHandler(endpoint.getCamelContext(), getClass());
String plc4xURI = endpoint.getEndpointUri().replaceFirst("plc4x:/?/?", "");
this.plcConnection = endpoint.getConnection();
++ this.tags = endpoint.getTags();
++ this.trigger= endpoint.getTrigger();
}
@Override
@@@ -73,7 -73,7 +82,7 @@@
}
@Override
-- public Exchange receive() {
++ public Exchange receive() {/**
Exchange exchange = plc4XEndpoint.createExchange();
try {
PlcReadResponse read = createReadRequest().execute().get();
@@@ -96,7 -96,7 +105,8 @@@
} catch (ExecutionException e) {
exchange.setException(e);
}
-- return exchange;
++ return exchange;*/
++ return null;
}
@Override
@@@ -105,7 -105,7 +115,7 @@@
}
@Override
-- public Exchange receive(long timeout) {
++ public Exchange receive(long timeout) {/**
Exchange exchange = plc4XEndpoint.createExchange();
CompletableFuture<? extends PlcReadResponse> read = createReadRequest().execute();
try {
@@@ -129,11 -129,11 +139,12 @@@
} catch(ExecutionException | TimeoutException e){
exchange.setException(e);
}
-- return exchange;
++ return exchange;*/
++ return null;
}
-- private PlcReadRequest createReadRequest() {
++ private PlcReadRequest createReadRequest() {/**
requestBuilder = plcConnection.readRequestBuilder();
if (plc4XEndpoint.getTags().size()>1){
for(TagData tag : plc4XEndpoint.getTags()){
@@@ -145,7 -145,7 +156,7 @@@
requestBuilder.addItem(tag.getTagName(),tag.getQuery());
}
return requestBuilder.build();
-- }
++ */return null;}
private Object unwrapIfSingle(Collection collection) {
if (collection.isEmpty()) {
diff --cc plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java
index 2dd64ba,2dd64ba..151d83b
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java
@@@ -22,6 -22,6 +22,7 @@@ import org.apache.camel.AsyncCallback
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.support.DefaultAsyncProducer;
++import org.apache.commons.math3.util.Pair;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcException;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
@@@ -30,7 -30,7 +31,7 @@@ import org.apache.plc4x.java.api.messag
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
--import java.util.List;
++import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
@@@ -54,20 -54,20 +55,19 @@@ public class Plc4XProducer extends Defa
Message in = exchange.getIn();
Object body = in.getBody();
PlcWriteRequest.Builder builder = plcConnection.writeRequestBuilder();
-- if (body instanceof List) { //Check if we have a List
-- if(((List) body).get(0) instanceof TagData){ //Check if this List contains TagData
-- List<TagData> tags =(List<TagData>) body;
-- for(TagData tag : tags){
-- builder.addItem(tag.getTagName(),tag.getQuery(),tag.getValue());
-- }
++ if (body instanceof Map) { //Check if we have a Map
++ Map<String, Map.Entry<String, Object>> tags = (Map<String, Map.Entry<String, Object>>) body;
++ for (Map.Entry<String, Map.Entry<String, Object>> entry : tags.entrySet()) {
++ //Tags are stored like this --> Map<Tagname,Entry<Query,Value>> for writing
++ String name = entry.getKey();
++ String query = entry.getValue().getKey();
++ Object value = entry.getValue().getValue();
++ builder.addItem(name,query,value);
}
-- else {
-- throw new PlcInvalidFieldException("Parameter 'tags' has to be a List of TagData");
-- }
-- }
-- else {
-- throw new PlcInvalidFieldException("Parameter 'tags' has to be a List");
++ } else {
++ throw new PlcInvalidFieldException("Parameter 'tags' has to be a List of TagData");
}
++
CompletableFuture<? extends PlcWriteResponse> completableFuture = builder.build().execute();
int currentlyOpenRequests = openRequests.incrementAndGet();
try {
diff --cc plc4j/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XComponentTest.java
index 168e2e5,168e2e5..7d8f78d
--- a/plc4j/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XComponentTest.java
+++ b/plc4j/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XComponentTest.java
@@@ -25,10 -25,10 +25,7 @@@ import org.apache.camel.test.junit5.Cam
import org.apache.plc4x.java.api.model.PlcField;
import org.junit.jupiter.api.Test;
--import java.util.ArrayList;
--import java.util.Arrays;
--import java.util.Collections;
--import java.util.List;
++import java.util.*;
import java.util.concurrent.TimeUnit;
public class Plc4XComponentTest extends CamelTestSupport {
@@@ -49,9 -49,9 +46,8 @@@
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
-- List<TagData> tags = new ArrayList<>();
-- tags.add(new TagData("testTagName","testTagAddress"));
-- tags.add(new TagData("testTagName2","testTagAddress2"));
++ Map<String,Object> tags = new HashMap<>();
++ tags.put("Test1","%TestQuery");
Plc4XEndpoint producer = getContext().getEndpoint("plc4x:mock:10.10.10.1/1/1", Plc4XEndpoint.class);
producer.setTags(tags);
from("direct:plc4x")
diff --cc plc4j/karaf-features/camel/pom.xml
index bbedb00,bbedb00..8c17998
--- a/plc4j/karaf-features/camel/pom.xml
+++ b/plc4j/karaf-features/camel/pom.xml
@@@ -29,7 -29,7 +29,7 @@@
<modelVersion>4.0.0</modelVersion>
-- <artifactId>camel-feature</artifactId>
++ <artifactId>camel-plc4x</artifactId>
<name>PLC4J: Karaf-Features: Camel</name>
<packaging>pom</packaging>
diff --cc plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java
index a35dd12,a35dd12..691fd7f
--- a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java
+++ b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java
@@@ -32,6 -32,6 +32,7 @@@ import org.apache.plc4x.java.scraper.tr
import org.apache.plc4x.java.scraper.triggeredscraper.triggerhandler.collector.TriggerCollectorImpl;
import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
import org.junit.jupiter.api.BeforeEach;
++import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@@ -73,7 -73,7 +74,7 @@@ public class TriggeredScraperImplTest
/**
* Test is added because we assume some strange behavior.
*/
-- //@Test
++ @Test
public void scrapeMultipleTargets() throws ScraperException, IOException, InterruptedException {
// Prepare the Mocking
// Scrate Jobs 1 and 2
diff --cc plc4j/tools/scraper/src/test/resources/example_triggered_scraper.yml
index ec79e17,ec79e17..30ab0af
--- a/plc4j/tools/scraper/src/test/resources/example_triggered_scraper.yml
+++ b/plc4j/tools/scraper/src/test/resources/example_triggered_scraper.yml
@@@ -29,14 -29,14 +29,14 @@@ jobs
test1: '%DB810:DBB0:USINT'
- name: triggered-demo-job1
-- triggerConfig: (S7_TRIGGER_VAR,10,(%M0.3:BOOL)==(true))
++ triggerConfig: (TRIGGER_VAR,10,(%M0.3:BOOL)==(true))
sources:
- S7_PI
fields:
test1: '%DB810:DBW0:INT'
- name: triggered-demo-job2
-- triggerConfig: (S7_TRIGGER_VAR,1000,(%M0.7:BOOL)==(true))
++ triggerConfig: (TRIGGER_VAR,1000,(%M0.7:BOOL)==(true))
sources:
- S7_PI
fields:
@@@ -60,14 -60,14 +60,14 @@@
- name: triggered-demo-job3-prev_value
-- triggerConfig: (S7_TRIGGER_VAR,500,(%M0:USINT)>=(PREV))
++ triggerConfig: (TRIGGER_VAR,500,(%M0:USINT)>=(PREV))
sources:
- S7_PI
fields:
test1: '%DB810:DBW0:INT'
- name: triggered-demo-job4-combinded-condition
-- triggerConfig: (S7_TRIGGER_VAR,5,(%M0.1:BOOL)==(true)OR(%M0.2:BOOL)==(true))
++ triggerConfig: (TRIGGER_VAR,5,(%M0.1:BOOL)==(true)OR(%M0.2:BOOL)==(true))
sources:
- S7_PI
fields:
diff --cc plc4j/tools/scraper/src/test/resources/mock-scraper-config.yml
index face235,face235..af9163a
--- a/plc4j/tools/scraper/src/test/resources/mock-scraper-config.yml
+++ b/plc4j/tools/scraper/src/test/resources/mock-scraper-config.yml
@@@ -40,7 -40,7 +40,7 @@@ jobs
- name: triggered-demo-job1
-- triggerConfig: (S7_TRIGGER_VAR,10,(%M0.3:BOOL)==(true))
++ triggerConfig: (TRIGGER_VAR,10,(%M0.3:BOOL)==(true))
sources:
- MOCK_1
- MOCK_2
@@@ -49,7 -49,7 +49,7 @@@
- name: triggered-demo-job2
-- triggerConfig: (S7_TRIGGER_VAR,10,(%M0.7:BOOL)==(true))
++ triggerConfig: (TRIGGER_VAR,10,(%M0.7:BOOL)==(true))
sources:
- MOCK_1
- MOCK_2
[plc4x] 02/08: Camel-Scraper
Posted by er...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
erobinet pushed a commit to branch feature/scraper
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 912c1effdfc6244b4b7a63f9d316df6ea2710a4d
Author: Etienne Robinet <et...@gmail.com>
AuthorDate: Tue May 12 08:54:56 2020 +0200
Camel-Scraper
---
plc4j/integrations/apache-camel/pom.xml | 18 ++++
.../org/apache/plc4x/camel/Plc4XComponent.java | 8 ++
.../java/org/apache/plc4x/camel/Plc4XConsumer.java | 99 ++++++++++++++++------
.../java/org/apache/plc4x/camel/Plc4XEndpoint.java | 59 ++++++++++---
.../main/java/org/apache/plc4x/camel/TagData.java | 12 +++
plc4j/tools/scraper/pom.xml | 14 +--
.../triggerhandler/TriggerConfiguration.java | 2 -
pom.xml | 2 +-
8 files changed, 163 insertions(+), 51 deletions(-)
diff --git a/plc4j/integrations/apache-camel/pom.xml b/plc4j/integrations/apache-camel/pom.xml
index cfa551a..85cd04f 100644
--- a/plc4j/integrations/apache-camel/pom.xml
+++ b/plc4j/integrations/apache-camel/pom.xml
@@ -128,6 +128,24 @@
<version>3.1.0</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.plc4x</groupId>
+ <artifactId>plc4j-connection-pool</artifactId>
+ <version>0.7.0-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.plc4x</groupId>
+ <artifactId>plc4j-scraper</artifactId>
+ <version>0.7.0-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.plc4x</groupId>
+ <artifactId>plc4j-driver-eip</artifactId>
+ <version>0.7.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<dependencyManagement>
diff --git a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XComponent.java b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XComponent.java
index 82763ff..f7e705f 100644
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XComponent.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XComponent.java
@@ -38,6 +38,14 @@ public class Plc4XComponent extends DefaultComponent {
if(tags!=null){
((Plc4XEndpoint)endpoint).setTags(tags);
}
+ String trigger = getAndRemoveOrResolveReferenceParameter(parameters,"trigger",String.class);
+ if(trigger!=null){
+ ((Plc4XEndpoint)endpoint).setTrigger(trigger);
+ }
+ int period = getAndRemoveOrResolveReferenceParameter(parameters,"period",Integer.class);
+ if(period!=0){
+ ((Plc4XEndpoint)endpoint).setPeriod(period);
+ }
setProperties(endpoint,parameters);
return endpoint;
}
diff --git a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
index 18161db..132aed8 100644
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
@@ -27,13 +27,19 @@ import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcException;
import org.apache.plc4x.java.api.messages.PlcReadRequest;
import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
+import org.apache.plc4x.java.scraper.ScrapeJob;
+import org.apache.plc4x.java.scraper.config.JobConfigurationImpl;
+import org.apache.plc4x.java.scraper.config.ScraperConfiguration;
+import org.apache.plc4x.java.scraper.config.triggeredscraper.ScraperConfigurationTriggeredImpl;
+import org.apache.plc4x.java.scraper.exception.ScraperException;
+import org.apache.plc4x.java.scraper.triggeredscraper.TriggeredScrapeJobImpl;
+import org.apache.plc4x.java.scraper.triggeredscraper.TriggeredScraperImpl;
+import org.apache.plc4x.java.scraper.triggeredscraper.triggerhandler.collector.TriggerCollector;
+import org.apache.plc4x.java.scraper.triggeredscraper.triggerhandler.collector.TriggerCollectorImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.*;
public class Plc4XConsumer extends DefaultConsumer {
@@ -42,18 +48,25 @@ public class Plc4XConsumer extends DefaultConsumer {
private ExceptionHandler exceptionHandler;
private PlcConnection plcConnection;
private List<TagData> tags;
- private Map parameters;
+ private Map<String,String> fields;
+ private String trigger;
private PlcSubscriptionResponse subscriptionResponse;
private Plc4XEndpoint plc4XEndpoint;
private ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
private ScheduledFuture<?> future;
+ private final static String TRIGGER = "TRIGGER_VAR";
+ private final static String PLC_NAME = "PLC";
+
public Plc4XConsumer(Plc4XEndpoint endpoint, Processor processor) throws PlcException {
super(endpoint, processor);
plc4XEndpoint =endpoint;
this.plcConnection = endpoint.getConnection();
this.tags = endpoint.getTags();
+ this.fields = TagData.toMap(this.tags);
+ this.trigger= endpoint.getTrigger();
+ plc4XEndpoint=endpoint;
}
@Override
@@ -76,31 +89,30 @@ public class Plc4XConsumer extends DefaultConsumer {
@Override
protected void doStart() throws InterruptedException, ExecutionException {
- PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
- if (tags.size()==1){
- TagData tag = tags.get(0);
- builder.addItem(tag.getTagName(),tag.getQuery());
-
- }
- else{
- for(TagData tag : tags){
- builder.addItem(tag.getTagName(),tag.getQuery());
- }
- }
- PlcReadRequest request = builder.build();
- future = executorService.schedule(() -> {
- request.execute().thenAccept(response -> {
+ if(trigger==null) {
+ PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
+ if (tags.size() == 1) {
+ TagData tag = tags.get(0);
+ builder.addItem(tag.getTagName(), tag.getQuery());
+
+ } else {
+ for (TagData tag : tags) {
+ builder.addItem(tag.getTagName(), tag.getQuery());
+ }
+ }
+ PlcReadRequest request = builder.build();
+ future = executorService.schedule(() -> {
+ request.execute().thenAccept(response -> {
try {
Exchange exchange = plc4XEndpoint.createExchange();
- if (tags.size()>1){
+ if (tags.size() > 1) {
List<TagData> values = new ArrayList<>();
- for(TagData tag : tags){
+ for (TagData tag : tags) {
tag.setValue(response.getObject(tag.getTagName()));
values.add(tag);
}
exchange.getIn().setBody(values);
- }
- else {
+ } else {
TagData tag = tags.get(0);
tag.setValue(response.getAllObjects(tag.getTagName()));
exchange.getIn().setBody(tag);
@@ -110,7 +122,46 @@ public class Plc4XConsumer extends DefaultConsumer {
exceptionHandler.handleException(e);
}
});
- }, 500, TimeUnit.MILLISECONDS);
+ }, 500, TimeUnit.MILLISECONDS);
+ }
+ else{
+
+ ScraperConfiguration configuration = getScraperConfig(TagData.toMap(plc4XEndpoint.getTags()));
+ TriggerCollector collector = new TriggerCollectorImpl(plc4XEndpoint.getPlcDriverManager());
+ try {
+ TriggeredScraperImpl scraper = new TriggeredScraperImpl(configuration, (job, alias, response) -> {
+ try {
+ Exchange exchange = plc4XEndpoint.createExchange();
+ if (tags.size() > 1) {
+ List<TagData> values = new ArrayList<>();
+ for (TagData tag : tags) {
+ tag.setValue(response.get(tag.getTagName()));
+ values.add(tag);
+ }
+ exchange.getIn().setBody(values);
+ } else {
+ TagData tag = tags.get(0);
+ tag.setValue(response.get(tag.getTagName()));
+ exchange.getIn().setBody(tag);
+ }
+ getProcessor().process(exchange);
+ } catch (Exception e) {
+ exceptionHandler.handleException(e);
+ };
+ },collector);
+ scraper.start();
+ collector.start();
+ } catch (ScraperException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private ScraperConfigurationTriggeredImpl getScraperConfig(Map<String,String> tagList){
+ String config = "(TRIGGER_VAR,"+plc4XEndpoint.getPeriod()+",("+ plc4XEndpoint.getTrigger() +")==(true))";
+ List<JobConfigurationImpl> job = Collections.singletonList(new JobConfigurationImpl("PLC4X-Camel",config,0,Collections.singletonList(PLC_NAME),tagList));
+ Map<String,String> source = Collections.singletonMap(PLC_NAME,plc4XEndpoint.getUri());
+ return new ScraperConfigurationTriggeredImpl(source,job);
}
@Override
diff --git a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XEndpoint.java b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XEndpoint.java
index c7e6a0e..5e493ec 100644
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XEndpoint.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XEndpoint.java
@@ -27,7 +27,7 @@ import org.apache.camel.spi.UriPath;
import org.apache.plc4x.java.PlcDriverManager;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.slf4j.LoggerFactory;
+import org.apache.plc4x.java.utils.connectionpool.PooledPlcDriverManager;
import java.util.List;
import java.util.Map;
@@ -42,24 +42,61 @@ public class Plc4XEndpoint extends DefaultEndpoint {
@UriParam
private List<TagData> tags;
+ @UriParam
+ private String trigger;
+
+ @UriParam
+ private int period;
+
+ public int getPeriod() {
+ return period;
+ }
+
+ public void setPeriod(int period) {
+ this.period = period;
+ }
private final PlcDriverManager plcDriverManager;
private PlcConnection connection;
private String uri;
+ public String getUri() {
+ return uri;
+ }
+
+ public String getTrigger() {
+ return trigger;
+ }
+
+ public void setTrigger(String trigger) {
+ this.trigger = trigger;
+ }
+
public Plc4XEndpoint(String endpointUri, Component component) {
super(endpointUri, component);
- plcDriverManager= new PlcDriverManager();
- uri = endpointUri;
-
- //Here we establish the connection in the endpoint, as it is created once during the context
- // to avoid disconnecting and reconnecting for every request
- try {
+ if(trigger==null) {
+ plcDriverManager = new PlcDriverManager();
+ uri = endpointUri;
+ //Here we establish the connection in the endpoint, as it is created once during the context
+ // to avoid disconnecting and reconnecting for every request
+ try {
+ String plc4xURI = uri.replaceFirst("plc4x:/?/?", "");
+ uri=plc4xURI;
+ connection = plcDriverManager.getConnection(plc4xURI);
+
+ } catch (PlcConnectionException e) {
+ e.printStackTrace();
+ }
+ }
+ else {
+ plcDriverManager = new PooledPlcDriverManager();
String plc4xURI = uri.replaceFirst("plc4x:/?/?", "");
- connection = plcDriverManager.getConnection(plc4xURI);
-
- } catch (PlcConnectionException e) {
- e.printStackTrace();
+ uri=plc4xURI;
+ try {
+ connection = plcDriverManager.getConnection(plc4xURI);
+ } catch (PlcConnectionException e) {
+ e.printStackTrace();
+ }
}
}
diff --git a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/TagData.java b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/TagData.java
index f57774f..c6b5d53 100644
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/TagData.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/TagData.java
@@ -18,7 +18,10 @@ under the License.
*/
package org.apache.plc4x.camel;
+import org.slf4j.LoggerFactory;
+
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
@@ -114,4 +117,13 @@ public class TagData {
}
+
+ public static Map<String,String> toMap(List<TagData> tags){
+ Map<String,String> map = new HashMap<>();
+ LoggerFactory.getLogger(TagData.class).info("Classloader {} ", Thread.currentThread().getContextClassLoader());
+ for(TagData tag : tags){
+ map.put(tag.getTagName(),tag.getQuery());
+ }
+ return map;
+ }
}
diff --git a/plc4j/tools/scraper/pom.xml b/plc4j/tools/scraper/pom.xml
index ce16973..61605f8 100644
--- a/plc4j/tools/scraper/pom.xml
+++ b/plc4j/tools/scraper/pom.xml
@@ -101,18 +101,7 @@
<version>0.7.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-driver-s7</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-driver-s7</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <scope>compile</scope>
- </dependency>
+
</dependencies>
<build>
@@ -122,7 +111,6 @@
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<usedDependencies combine.children="append">
- <!--usedDependency>org.apache.plc4x:plc4j-driver-s7</usedDependency-->
</usedDependencies>
</configuration>
</plugin>
diff --git a/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/triggerhandler/TriggerConfiguration.java b/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/triggerhandler/TriggerConfiguration.java
index 3390432..0f3ddc3 100644
--- a/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/triggerhandler/TriggerConfiguration.java
+++ b/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/triggerhandler/TriggerConfiguration.java
@@ -20,11 +20,9 @@
package org.apache.plc4x.java.scraper.triggeredscraper.triggerhandler;
import org.apache.plc4x.java.PlcDriverManager;
-import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.PlcDriver;
import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
import org.apache.plc4x.java.api.model.PlcField;
-import org.apache.plc4x.java.s7.readwrite.field.S7Field;
import org.apache.plc4x.java.scraper.exception.ScraperConfigurationException;
import org.apache.plc4x.java.scraper.exception.ScraperException;
import org.apache.plc4x.java.scraper.triggeredscraper.TriggeredScrapeJobImpl;
diff --git a/pom.xml b/pom.xml
index 6932577..1af28d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -155,7 +155,7 @@
<pcap4j.version>1.8.2</pcap4j.version>
<scala.version>2.12.6</scala.version>
<slf4j.version>1.7.25</slf4j.version>
- <snakeyaml.version>1.23</snakeyaml.version>
+ <snakeyaml.version>1.24</snakeyaml.version>
<spock-reports.version>1.6.1</spock-reports.version>
<spock.version>1.2-groovy-2.5</spock.version>
<t-digest.version>3.2</t-digest.version>