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>