You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2018/07/11 21:54:41 UTC

[incubator-plc4x] branch feature/site-generation-fixes updated (bb9e8e7 -> 0be404c)

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a change to branch feature/site-generation-fixes
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git.


    from bb9e8e7  - Patched ascidoctor-site-plugin to generate the images into the correct path - Custom skin for the site generation
     add 525e7c0  improved mocking of serial protocol test
     add 430b3a0  serial ads protocol: as soon as we transmitted the ack frame we unset the boolean
     add dbdb331  Added another interesting link regarding the s7 comm plus protocol.
     add 87cf9d0  added toString(), equals() and hashCode() to PlcRequestContainer
     add 4ad7ea2  added ADS protocol Tracing
     add a2d2b4f  added output for cli input on example test
     add 3ef3922  added logging of retransmission
     add db58135  fixed wrong log category
     add bf508e3  updated serial ads-protocol: - removed thread blocking - only read on complete data
     add 8a874ed  added toString(), equals(), hashCode() for some basic api objects.
     add 976464d  fixed failing test on travis
     add 929162b  move ack to postaction as we only ack a valid (crc) packet
     add d06dd30  ADS/AMS serial protocol. Throw error if user data exceeds 255 bytes.
     add 572e16b  ADS/AMS log unexpected frames
     add 4b7fc7e  fixed wrong padding of strings.
     add 587b5d2  small access change
     add 20090bb  fixed device name handling
     add aaad9ce  smaller cleanups
     add 83c69c9  added single message rate limiter to throttle outgoing messages to one on serial connection
     add c14ecc1  added a ADSException to correlate ads messages using the invokeId
     add e69ef91  implement retry mechanism on ADS/AMS using the fixed rate scheduler.
     add b0fad96  fixed tests
     add 89c034c  fixed build
     add ef96140  switch from link to code as the handlers are not a current dependency
     add dff0d41  set interrupt flag where necessary.
     add 067cf7a  try to fix wobbily test by avoid using the thread if no message is on the way
     add 1e684e9  removed obsolete TODO
     add 864bd96  fixed some sonar bugs (equals, hashcode, serializable)
     add 96eaca6  fixed sonar warning about not serializable fields
     add 8b8a938  fixed some bugs while working on coverage
     add de97867  fix remaining sonar bug
     add cf6d54d  added tests for AdsNotificationSample and AdsStampHeader
     add 151a20f  fixed serial driver regex to match the serial port the right way
     add 971acb2  added serial testing to ManualPlc4AdsTest
     add 97245e2  BUGFIX: receive behaves differently on receive without a timeout
     add ffc1680  fixed small warning
     add 6a564cf  added a basic type converter to the camel component
     add 474a95e  Added missing Apache header.
     add 88ddd90  added initial integration of https://github.com/digitalpetri/modbus
     add 0d37f46  added basic manual test for Modbus
     add 295a5e9  MODBUS: fixed patterns and aligned them on ADS
     add 0db64c8  fix dependency problems
     add 5330bcd  ignore the tcp dependency for now
     add 948bbba  fix build
     add ae4e81b  use combine children attribute to merge ignored dependencies
     add 3b5fd72  added some logging
     add 6f222f0  added possibility to supply port to modbus
     add 3560f75  set test logging to trace for now
     add 1ee4886  modbus bugfix don't wait for session complete
     add 807afb5  MODBUS: fixing matchers don't match
     add 5241986  modbus: fix netty read mockup
     add 7920c4f  modbus test display byte[]
     add e2e735e  fix build
     add 920a96f  modbus: fixed typo in addressing
     add a643829  modbus consume error messages
     add ff9aa2d  implemented getSize() on WriteRequestItem method analog to ReadRequestItem
     add 3e2585d  disolved quantity in favor of size attribute of PlcRead and PlcWrite Request.
     add a7cc186  modbus: added some logging and pdu todo
     add 4fe91d0  fixed small typo
     add fff1b70  added logging for incoming tcp payload
     add 9c57fc4  added a todo about chunking and quantity regarding item types
     add 33b8a51  modbus: added basic type encoding and decoding.
     add cdddd19  fixed produce coil value method. Added a basic test
     add 6c27497  ignore commons io for now
     add 5714e07  Added some more information about the wago web-interface and the default login to this.
     add 369ee00  small fixes in the modbus protocol
     add f95d70f  Introduced TcpHexDumper to driver-bases/test
     add 492ed4a  added test for modbus PlcDriver
     add 1c65826  moved Assert and Junit5Backport to driver-bases/test
     add c326e36  added modbus connection tests
     add 036e394  fixed build problems
     add 22d5106  added Test for Plc4XModbusProtocol and fixed several Bugs.
     add a66f66d  Refactored the way the maps the enums are built up.
     add 7a2b14b  Added some EtherNet/IP related documentation.
     add 748a39d  PLC4X-40 - Refactor the PlcSubscriber to be more aligned with the PlcReader and PlcWriter
     add 7079cad  Changed the pom to use a variable instead of having it hard coded for every modbus driver dependency.
     new f9bc175  Merged changes from master
     new 0be404c  Merged changes from master

The 2 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:
 .../java/org/apache/plc4x/camel/Plc4XConsumer.java |  33 +-
 .../apache/plc4x/camel/Plc4XPollingConsumer.java   |   2 +-
 .../plc4x/camel/ResponseItemTypeConverter.java}    |  37 +--
 .../camel/{component/plc4x => TypeConverter}       |   2 +-
 .../java/org/apache/plc4x/camel/ManualTest.java    |   2 +-
 .../java/org/apache/plc4x/camel/MockDriver.java    |  57 ++--
 .../plc4x/java/api/connection/PlcSubscriber.java   |  24 +-
 .../plc4x/java/api/messages/PlcNotification.java   |  80 -----
 .../java/api/messages/PlcProprietaryRequest.java   |  23 ++
 .../java/api/messages/PlcProprietaryResponse.java  |  22 ++
 .../apache/plc4x/java/api/messages/PlcRequest.java |  29 +-
 .../java/api/messages/PlcRequestContainer.java     |  32 ++
 .../plc4x/java/api/messages/PlcResponse.java       |  32 +-
 .../{PlcMessage.java => PlcSubscriptionEvent.java} |  21 +-
 ...PlcMessage.java => PlcSubscriptionRequest.java} |   9 +-
 .../api/messages/PlcSubscriptionResponse.java}     |  19 +-
 .../api/messages/PlcUnsubscriptionRequest.java     |  54 ++++
 .../api/messages/PlcUnsubscriptionResponse.java}   |   4 +-
 .../java/api/messages/items/ReadRequestItem.java   |  54 +++-
 .../java/api/messages/items/ReadResponseItem.java  |  52 ++-
 .../plc4x/java/api/messages/items/RequestItem.java |  58 +++-
 .../java/api/messages/items/ResponseItem.java      |  59 +++-
 .../api/messages/items/SubscriptionEventItem.java} |  34 +-
 ...a => SubscriptionRequestChangeOfStateItem.java} |  19 +-
 ...tem.java => SubscriptionRequestCyclicItem.java} |  25 +-
 ...Item.java => SubscriptionRequestEventItem.java} |  11 +-
 .../messages/items/SubscriptionRequestItem.java}   |  34 +-
 .../messages/items/SubscriptionResponseItem.java}  |  25 +-
 .../messages/items/UnsubscriptionRequestItem.java  |  62 ++++
 .../items/UnsubscriptionResponseItem.java}         |  14 +-
 .../java/api/messages/items/WriteRequestItem.java  |  56 +++-
 .../java/api/messages/items/WriteResponseItem.java |  28 +-
 .../messages/specific/TypeSafePlcReadRequest.java  |  21 ++
 .../messages/specific/TypeSafePlcWriteRequest.java |  21 ++
 .../SubscriptionHandle.java}                       |  12 +-
 .../plc4x/java/api/model/SubscriptionType.java}    |  26 +-
 plc4j/protocols/ads/pom.xml                        |  12 +
 .../org/apache/plc4x/java/ads/AdsPlcDriver.java    |   2 +-
 .../api/commands/AdsDeviceNotificationRequest.java |   2 +-
 .../java/ads/api/commands/AdsReadResponse.java     |  17 +-
 .../java/ads/api/commands/AdsReadWriteRequest.java |   2 +-
 .../ads/api/commands/AdsReadWriteResponse.java     |   2 +-
 .../ads/api/commands/AdsWriteControlRequest.java   |   2 +-
 .../java/ads/api/commands/AdsWriteRequest.java     |   2 +-
 .../java/ads/api/commands/UnknownCommand.java      |  11 +-
 .../api/commands/types/AdsNotificationSample.java  |   2 +-
 .../java/ads/api/commands/types/AdsState.java      |   2 +-
 .../plc4x/java/ads/api/commands/types/Device.java  |  27 +-
 .../plc4x/java/ads/api/generic/AmsHeader.java      |  34 +-
 .../java/ads/api/serial/AmsSerialResetFrame.java   |  13 +
 .../java/ads/api/serial/types/FragmentNumber.java  |  26 ++
 .../java/ads/api/serial/types/ReceiverAddress.java |  26 ++
 .../ads/api/serial/types/TransmitterAddress.java   |  26 ++
 .../java/ads/api/serial/types/UserDataLength.java  |  23 ++
 .../plc4x/java/ads/api/tcp/AmsTcpHeader.java       |   2 +-
 .../plc4x/java/ads/api/util/ByteReadable.java      |   3 +-
 .../java/ads/api/util/UnsignedIntLEByteValue.java  |  11 +-
 .../ads/api/util/UnsignedShortLEByteValue.java     |  11 +-
 .../ads/connection/AdsAbstractPlcConnection.java   |   5 +
 .../ads/connection/AdsSerialPlcConnection.java     |   2 +
 .../java/ads/connection/AdsTcpPlcConnection.java   | 208 ++++++------
 .../java/ads/model/AdsSubscriptionHandle.java}     |  23 +-
 .../java/ads/protocol/Ads2PayloadProtocol.java     |   2 +
 .../java/ads/protocol/Payload2SerialProtocol.java  | 117 ++++---
 .../java/ads/protocol/Payload2TcpProtocol.java     |   6 +-
 .../plc4x/java/ads/protocol/Plc4x2AdsProtocol.java |  19 +-
 .../java/ads/protocol/exception/AdsException.java  |  57 ++++
 .../protocol/util/SingleMessageRateLimiter.java    | 124 ++++++++
 .../java/org/apache/plc4x/java/ads/AdsDumper.java  |   2 +-
 .../apache/plc4x/java/ads/AdsPlcDriverTest.java    |   2 +-
 .../apache/plc4x/java/ads/ManualPlc4XAdsTest.java  |  32 +-
 .../ads/adslib/ADSClientNotificationExample.java   |   2 +
 .../org/apache/plc4x/java/ads/adslib/AdsLib.java   |  30 +-
 .../apache/plc4x/java/ads/adslib/AmsRouter.java    |  18 +-
 .../commands/types/AdsNotificationSampleTest.java  |  69 ++++
 .../ads/api/commands/types/AdsStampHeaderTest.java |  90 ++++++
 .../types/CommandTypesFactoryMethodTest.java       |  11 +
 .../java/ads/api/commands/types/DeviceTest.java    |  34 +-
 .../java/ads/api/commands/types/LengthTest.java    |   2 +-
 .../ads/api/commands/types/ReadLengthTest.java     |   2 +-
 .../ads/api/commands/types/SampleSizeTest.java     |   2 +-
 .../java/ads/api/commands/types/SamplesTest.java   |   2 +-
 .../ads/api/commands/types/WriteLengthTest.java    |   2 +-
 .../ads/api/generic/GenericFactoryMethodTest.java  |   6 +-
 .../java/ads/api/generic/types/AmsPortTest.java    |  11 +-
 .../java/ads/api/generic/types/DataLengthTest.java |   2 +-
 .../java/ads/api/generic/types/TcpLengthTest.java  |   2 +-
 .../SerialFactoryMethodTest.java}                  |  29 +-
 .../types/GenericTypesFactoryMethodTest.java       |  22 +-
 .../TcpFactoryMethodTest.java}                     |   8 +-
 .../types/GenericTypesFactoryMethodTest.java       |  15 +-
 .../connection/AdsAbstractPlcConnectionTest.java   |   2 +-
 .../ads/connection/AdsConnectionFactoryTest.java   |   2 +-
 .../ads/connection/AdsSerialPlcConnectionTest.java | 197 +++++++++++-
 .../ads/connection/AdsTcpPlcConnectionTests.java   |  46 ++-
 ...load2SerialProtocolExampleConversationTest.java |  41 ++-
 .../java/ads/protocol/util/DigestUtilTest.java     |   4 +-
 .../ads/protocol/util/LittleEndianDecoderTest.java |   2 +-
 .../ads/protocol/util/LittleEndianEncoderTest.java |   4 +-
 plc4j/protocols/driver-bases/test/pom.xml          |  33 ++
 .../java/base/connection/tcp}/TcpHexDumper.java    |   2 +-
 .../org/apache/plc4x/java/base}/util/Assert.java   |  22 +-
 .../plc4x/java/base}/util/Junit5Backport.java      |   2 +-
 plc4j/protocols/modbus/pom.xml                     |  76 ++++-
 .../apache/plc4x/java/modbus/ModbusPlcDriver.java  |  41 ++-
 .../modbus/connection/BaseModbusPlcConnection.java |  49 +--
 .../connection/ModbusConnectionFactory.java}       |  32 +-
 .../connection/ModbusSerialPlcConnection.java      |  25 +-
 .../modbus/connection/ModbusTcpPlcConnection.java  |  36 ++-
 .../java/modbus/model/CoilModbusAddress.java}      |  32 +-
 .../model/MaskWriteRegisterModbusAddress.java      |  88 ++++++
 .../plc4x/java/modbus/model/ModbusAddress.java     |  42 ++-
 .../model/ReadDiscreteInputsModbusAddress.java     |  42 +++
 .../model/ReadHoldingRegistersModbusAddress.java   |  42 +++
 .../model/ReadInputRegistersModbusAddress.java     |  42 +++
 .../java/modbus/model/RegisterModbusAddress.java   |  43 +++
 .../plc4x/java/modbus/netty/ModbusProtocol.java    |  40 ---
 .../plc4x/java/modbus/netty/ModbusTcpProtocol.java |  39 ---
 .../java/modbus/netty/Plc4XModbusProtocol.java     | 351 ++++++++++++++++++++-
 .../plc4x/java/modbus/ManualPlc4XModbusTest.java}  |  31 +-
 .../plc4x/java/modbus/ModbusPlcDriverTest.java     | 125 ++++++++
 .../connection/BaseModbusPlcConnectionTest.java    | 166 ++++++++++
 .../connection/ModbusConnectionFactoryTest.java    |  95 ++++++
 .../connection/ModbusSerialPlcConnectionTest.java  | 286 +++++++++++++++++
 .../connection/ModbusTcpPlcConnectionTests.java    | 134 ++++++++
 .../java/modbus/netty/Plc4XModbusProtocolTest.java | 303 ++++++++++++++++++
 .../main => modbus/src/test}/resources/logback.xml |   6 +-
 .../java/isotp/netty/model/types/DeviceGroup.java  |  17 +-
 .../isotp/netty/model/types/DisconnectReason.java  |  17 +-
 .../isotp/netty/model/types/ParameterCode.java     |  17 +-
 .../isotp/netty/model/types/ProtocolClass.java     |  17 +-
 .../java/isotp/netty/model/types/RejectCause.java  |  17 +-
 .../java/isotp/netty/model/types/TpduCode.java     |  17 +-
 .../java/isotp/netty/model/types/TpduSize.java     |  17 +-
 .../netty/model/types/DataTransportErrorCode.java  |  17 +-
 .../s7/netty/model/types/DataTransportSize.java    |  17 +-
 .../s7/netty/model/types/HeaderErrorClass.java     |  17 +-
 .../java/s7/netty/model/types/MemoryArea.java      |  17 +-
 .../java/s7/netty/model/types/MessageType.java     |  17 +-
 .../java/s7/netty/model/types/ParameterError.java  |  17 +-
 .../java/s7/netty/model/types/ParameterType.java   |  17 +-
 .../s7/netty/model/types/SpecificationType.java    |  17 +-
 .../java/s7/netty/model/types/TransportSize.java   |  17 +-
 .../netty/model/types/VariableAddressingMode.java  |  17 +-
 pom.xml                                            | 159 +---------
 src/site/asciidoc/developers/vpn.adoc              |   7 +
 src/site/asciidoc/protocols/s7/s7comm-plus.adoc    |   3 +
 src/site/resources/img/apache_incubator_logo.png   | Bin 0 -> 13171 bytes
 src/site/resources/img/apache_plc4x_logo_small.png | Bin 0 -> 18451 bytes
 src/site/site.xml                                  |   4 +-
 utils/site-skin/pom.xml                            |  62 ++++
 .../main/resources/META-INF/maven/site-macros.vm   |  17 +-
 .../src/main/resources/META-INF/maven/site.vm      | 173 +++++++---
 153 files changed, 4297 insertions(+), 1249 deletions(-)
 copy integrations/apache-camel/src/{test/java/org/apache/plc4x/camel/Plc4XConsumerTest.java => main/java/org/apache/plc4x/camel/ResponseItemTypeConverter.java} (66%)
 copy integrations/apache-camel/src/main/resources/META-INF/services/org/apache/camel/{component/plc4x => TypeConverter} (94%)
 delete mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcNotification.java
 copy plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/{PlcMessage.java => PlcSubscriptionEvent.java} (66%)
 copy plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/{PlcMessage.java => PlcSubscriptionRequest.java} (83%)
 rename plc4j/{protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/ModbusSerialProtocol.java => api/src/main/java/org/apache/plc4x/java/api/messages/PlcSubscriptionResponse.java} (60%)
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcUnsubscriptionRequest.java
 rename plc4j/{protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/model/ModbusMessage.java => api/src/main/java/org/apache/plc4x/java/api/messages/PlcUnsubscriptionResponse.java} (87%)
 copy plc4j/{protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/TransmitterAddress.java => api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionEventItem.java} (51%)
 copy plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/{ReadRequestItem.java => SubscriptionRequestChangeOfStateItem.java} (68%)
 copy plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/{ReadRequestItem.java => SubscriptionRequestCyclicItem.java} (58%)
 copy plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/{WriteResponseItem.java => SubscriptionRequestEventItem.java} (68%)
 copy plc4j/api/src/{test/java/org/apache/plc4x/java/api/connection/PlcWriterTest.java => main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java} (51%)
 copy plc4j/{protocols/ads/src/test/java/org/apache/plc4x/java/ads/adslib/Output.java => api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionResponseItem.java} (55%)
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/UnsubscriptionRequestItem.java
 copy plc4j/{protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/util/ByteBufSupplier.java => api/src/main/java/org/apache/plc4x/java/api/messages/items/UnsubscriptionResponseItem.java} (74%)
 copy plc4j/api/src/main/java/org/apache/plc4x/java/api/{messages/PlcMessage.java => model/SubscriptionHandle.java} (60%)
 copy plc4j/{protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameter.java => api/src/main/java/org/apache/plc4x/java/api/model/SubscriptionType.java} (58%)
 copy plc4j/protocols/{s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/DisconnectAdditionalInformationParameter.java => ads/src/main/java/org/apache/plc4x/java/ads/model/AdsSubscriptionHandle.java} (60%)
 create mode 100644 plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/exception/AdsException.java
 create mode 100644 plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/SingleMessageRateLimiter.java
 create mode 100644 plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/AdsNotificationSampleTest.java
 create mode 100644 plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/AdsStampHeaderTest.java
 copy integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XConsumerTest.java => plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/DeviceTest.java (64%)
 copy plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/{generic/GenericFactoryMethodTest.java => serial/SerialFactoryMethodTest.java} (76%)
 copy plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/{generic => serial}/types/GenericTypesFactoryMethodTest.java (85%)
 copy plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/{generic/GenericFactoryMethodTest.java => tcp/TcpFactoryMethodTest.java} (92%)
 copy plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/{generic => tcp}/types/GenericTypesFactoryMethodTest.java (90%)
 rename plc4j/protocols/{ads/src/test/java/org/apache/plc4x/java/ads/util => driver-bases/test/src/main/java/org/apache/plc4x/java/base/connection/tcp}/TcpHexDumper.java (98%)
 rename plc4j/protocols/{ads/src/test/java/org/apache/plc4x/java/ads => driver-bases/test/src/main/java/org/apache/plc4x/java/base}/util/Assert.java (80%)
 copy plc4j/protocols/{ads/src/test/java/org/apache/plc4x/java/ads => driver-bases/test/src/main/java/org/apache/plc4x/java/base}/util/Junit5Backport.java (97%)
 copy plc4j/protocols/{ads/src/test/java/org/apache/plc4x/java/ads/util/Junit5Backport.java => modbus/src/main/java/org/apache/plc4x/java/modbus/connection/ModbusConnectionFactory.java} (53%)
 rename plc4j/protocols/{ads/src/test/java/org/apache/plc4x/java/ads/util/Junit5Backport.java => modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java} (50%)
 create mode 100644 plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusAddress.java
 create mode 100644 plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusAddress.java
 create mode 100644 plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusAddress.java
 create mode 100644 plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusAddress.java
 create mode 100644 plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusAddress.java
 delete mode 100644 plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/ModbusProtocol.java
 delete mode 100644 plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/ModbusTcpProtocol.java
 copy plc4j/protocols/{ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java => modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java} (68%)
 create mode 100644 plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusPlcDriverTest.java
 create mode 100644 plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnectionTest.java
 create mode 100644 plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusConnectionFactoryTest.java
 create mode 100644 plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
 create mode 100644 plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnectionTests.java
 create mode 100644 plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
 copy plc4j/protocols/{benchmarks/src/main => modbus/src/test}/resources/logback.xml (84%)
 create mode 100644 src/site/resources/img/apache_incubator_logo.png
 create mode 100644 src/site/resources/img/apache_plc4x_logo_small.png


[incubator-plc4x] 02/02: Merged changes from master

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/site-generation-fixes
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit 0be404c30d0f33865e8654fd90dcbdd9177cbe80
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Jul 11 23:54:25 2018 +0200

    Merged changes from master
---
 .../java/org/apache/plc4x/java/ads/protocol/util/DigestUtilTest.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/DigestUtilTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/DigestUtilTest.java
index 5271462..1570ec7 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/DigestUtilTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/util/DigestUtilTest.java
@@ -71,7 +71,7 @@ public class DigestUtilTest {
 
     @Ignore("This test is used to find proper crc parameters and can be run manually")
     @Test
-    public void findRightAdsCrc() throws Exception {
+    public void findRightAdsCrc() {
         int[] exampleResponseInt = {
             /*Magic Cookie     */    0x01, 0xA5,
             /*Sender           */    0x00,


[incubator-plc4x] 01/02: Merged changes from master

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/site-generation-fixes
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit f9bc17593c3056f92e3dfa91abef1862bb350491
Merge: bb9e8e7 7079cad
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Jul 11 23:53:52 2018 +0200

    Merged changes from master

 .../java/org/apache/plc4x/camel/Plc4XConsumer.java |  33 +-
 .../apache/plc4x/camel/Plc4XPollingConsumer.java   |   2 +-
 .../plc4x/camel/ResponseItemTypeConverter.java     |  30 +-
 .../services/org/apache/camel/TypeConverter        |  19 ++
 .../java/org/apache/plc4x/camel/ManualTest.java    |   2 +-
 .../java/org/apache/plc4x/camel/MockDriver.java    |  57 ++--
 .../plc4x/java/api/connection/PlcSubscriber.java   |  24 +-
 .../plc4x/java/api/messages/PlcNotification.java   |  80 -----
 .../java/api/messages/PlcProprietaryRequest.java   |  23 ++
 .../java/api/messages/PlcProprietaryResponse.java  |  22 ++
 .../apache/plc4x/java/api/messages/PlcRequest.java |  29 +-
 .../java/api/messages/PlcRequestContainer.java     |  32 ++
 .../plc4x/java/api/messages/PlcResponse.java       |  32 +-
 .../java/api/messages/PlcSubscriptionEvent.java}   |  26 +-
 .../java/api/messages/PlcSubscriptionRequest.java} |   7 +-
 .../api/messages/PlcSubscriptionResponse.java}     |  19 +-
 .../api/messages/PlcUnsubscriptionRequest.java     |  54 ++++
 .../api/messages/PlcUnsubscriptionResponse.java}   |   4 +-
 .../java/api/messages/items/ReadRequestItem.java   |  54 +++-
 .../java/api/messages/items/ReadResponseItem.java  |  52 ++-
 .../plc4x/java/api/messages/items/RequestItem.java |  58 +++-
 .../java/api/messages/items/ResponseItem.java      |  59 +++-
 .../api/messages/items/SubscriptionEventItem.java} |  34 +-
 ...a => SubscriptionRequestChangeOfStateItem.java} |  19 +-
 ...tem.java => SubscriptionRequestCyclicItem.java} |  25 +-
 ...Item.java => SubscriptionRequestEventItem.java} |  11 +-
 .../messages/items/SubscriptionRequestItem.java    |  45 +++
 .../messages/items/SubscriptionResponseItem.java}  |  31 +-
 .../messages/items/UnsubscriptionRequestItem.java  |  62 ++++
 .../items/UnsubscriptionResponseItem.java}         |  27 +-
 .../java/api/messages/items/WriteRequestItem.java  |  56 +++-
 .../java/api/messages/items/WriteResponseItem.java |  28 +-
 .../messages/specific/TypeSafePlcReadRequest.java  |  21 ++
 .../messages/specific/TypeSafePlcWriteRequest.java |  21 ++
 .../SubscriptionHandle.java}                       |  19 +-
 .../plc4x/java/api/model/SubscriptionType.java}    |  39 +--
 plc4j/protocols/ads/pom.xml                        |  12 +
 .../org/apache/plc4x/java/ads/AdsPlcDriver.java    |   2 +-
 .../api/commands/AdsDeviceNotificationRequest.java |   2 +-
 .../java/ads/api/commands/AdsReadResponse.java     |  17 +-
 .../java/ads/api/commands/AdsReadWriteRequest.java |   2 +-
 .../ads/api/commands/AdsReadWriteResponse.java     |   2 +-
 .../ads/api/commands/AdsWriteControlRequest.java   |   2 +-
 .../java/ads/api/commands/AdsWriteRequest.java     |   2 +-
 .../java/ads/api/commands/UnknownCommand.java      |  11 +-
 .../api/commands/types/AdsNotificationSample.java  |   2 +-
 .../java/ads/api/commands/types/AdsState.java      |   2 +-
 .../plc4x/java/ads/api/commands/types/Device.java  |  27 +-
 .../plc4x/java/ads/api/generic/AmsHeader.java      |  34 +-
 .../java/ads/api/serial/AmsSerialResetFrame.java   |  13 +
 .../java/ads/api/serial/types/FragmentNumber.java  |  26 ++
 .../java/ads/api/serial/types/ReceiverAddress.java |  26 ++
 .../ads/api/serial/types/TransmitterAddress.java   |  26 ++
 .../java/ads/api/serial/types/UserDataLength.java  |  23 ++
 .../plc4x/java/ads/api/tcp/AmsTcpHeader.java       |   2 +-
 .../plc4x/java/ads/api/util/ByteReadable.java      |   3 +-
 .../java/ads/api/util/UnsignedIntLEByteValue.java  |  11 +-
 .../ads/api/util/UnsignedShortLEByteValue.java     |  11 +-
 .../ads/connection/AdsAbstractPlcConnection.java   |   5 +
 .../ads/connection/AdsSerialPlcConnection.java     |   2 +
 .../java/ads/connection/AdsTcpPlcConnection.java   | 208 ++++++------
 .../java/ads/model/AdsSubscriptionHandle.java}     |  23 +-
 .../java/ads/protocol/Ads2PayloadProtocol.java     |   2 +
 .../java/ads/protocol/Payload2SerialProtocol.java  | 117 ++++---
 .../java/ads/protocol/Payload2TcpProtocol.java     |   6 +-
 .../plc4x/java/ads/protocol/Plc4x2AdsProtocol.java |  19 +-
 .../java/ads/protocol/exception/AdsException.java  |  57 ++++
 .../protocol/util/SingleMessageRateLimiter.java    | 124 ++++++++
 .../java/org/apache/plc4x/java/ads/AdsDumper.java  |   2 +-
 .../apache/plc4x/java/ads/AdsPlcDriverTest.java    |   2 +-
 .../apache/plc4x/java/ads/ManualPlc4XAdsTest.java  |  32 +-
 .../ads/adslib/ADSClientNotificationExample.java   |   2 +
 .../org/apache/plc4x/java/ads/adslib/AdsLib.java   |  30 +-
 .../apache/plc4x/java/ads/adslib/AmsRouter.java    |  18 +-
 .../commands/types/AdsNotificationSampleTest.java  |  69 ++++
 .../ads/api/commands/types/AdsStampHeaderTest.java |  90 ++++++
 .../types/CommandTypesFactoryMethodTest.java       |  11 +
 .../java/ads/api/commands/types/DeviceTest.java}   |  29 +-
 .../java/ads/api/commands/types/LengthTest.java    |   2 +-
 .../ads/api/commands/types/ReadLengthTest.java     |   2 +-
 .../ads/api/commands/types/SampleSizeTest.java     |   2 +-
 .../java/ads/api/commands/types/SamplesTest.java   |   2 +-
 .../ads/api/commands/types/WriteLengthTest.java    |   2 +-
 .../ads/api/generic/GenericFactoryMethodTest.java  |   6 +-
 .../java/ads/api/generic/types/AmsPortTest.java    |  11 +-
 .../java/ads/api/generic/types/DataLengthTest.java |   2 +-
 .../java/ads/api/generic/types/TcpLengthTest.java  |   2 +-
 .../SerialFactoryMethodTest.java}                  |  29 +-
 .../types/GenericTypesFactoryMethodTest.java       |  92 ++++++
 .../TcpFactoryMethodTest.java}                     |   8 +-
 .../tcp/types/GenericTypesFactoryMethodTest.java   |  87 +++++
 .../connection/AdsAbstractPlcConnectionTest.java   |   2 +-
 .../ads/connection/AdsConnectionFactoryTest.java   |   2 +-
 .../ads/connection/AdsSerialPlcConnectionTest.java | 197 +++++++++++-
 .../ads/connection/AdsTcpPlcConnectionTests.java   |  46 ++-
 ...load2SerialProtocolExampleConversationTest.java |  41 ++-
 .../java/ads/protocol/util/DigestUtilTest.java     |   2 +-
 .../ads/protocol/util/LittleEndianDecoderTest.java |   2 +-
 .../ads/protocol/util/LittleEndianEncoderTest.java |   4 +-
 plc4j/protocols/driver-bases/test/pom.xml          |  33 ++
 .../java/base/connection/tcp}/TcpHexDumper.java    |   2 +-
 .../org/apache/plc4x/java/base}/util/Assert.java   |  22 +-
 .../plc4x/java/base}/util/Junit5Backport.java      |   2 +-
 plc4j/protocols/modbus/pom.xml                     |  76 ++++-
 .../apache/plc4x/java/modbus/ModbusPlcDriver.java  |  41 ++-
 .../modbus/connection/BaseModbusPlcConnection.java |  49 +--
 .../connection/ModbusConnectionFactory.java}       |  32 +-
 .../connection/ModbusSerialPlcConnection.java      |  25 +-
 .../modbus/connection/ModbusTcpPlcConnection.java  |  36 ++-
 .../java/modbus/model/CoilModbusAddress.java}      |  32 +-
 .../model/MaskWriteRegisterModbusAddress.java      |  88 ++++++
 .../plc4x/java/modbus/model/ModbusAddress.java     |  42 ++-
 .../model/ReadDiscreteInputsModbusAddress.java     |  42 +++
 .../model/ReadHoldingRegistersModbusAddress.java   |  42 +++
 .../model/ReadInputRegistersModbusAddress.java     |  42 +++
 .../java/modbus/model/RegisterModbusAddress.java   |  43 +++
 .../plc4x/java/modbus/netty/ModbusProtocol.java    |  40 ---
 .../java/modbus/netty/Plc4XModbusProtocol.java     | 351 ++++++++++++++++++++-
 .../plc4x/java/modbus/ManualPlc4XModbusTest.java}  |  31 +-
 .../plc4x/java/modbus/ModbusPlcDriverTest.java     | 125 ++++++++
 .../connection/BaseModbusPlcConnectionTest.java    | 166 ++++++++++
 .../connection/ModbusConnectionFactoryTest.java    |  95 ++++++
 .../connection/ModbusSerialPlcConnectionTest.java  | 286 +++++++++++++++++
 .../connection/ModbusTcpPlcConnectionTests.java    | 134 ++++++++
 .../java/modbus/netty/Plc4XModbusProtocolTest.java | 303 ++++++++++++++++++
 .../modbus/src/test/resources/logback.xml          |  38 +++
 .../java/isotp/netty/model/types/DeviceGroup.java  |  17 +-
 .../isotp/netty/model/types/DisconnectReason.java  |  17 +-
 .../isotp/netty/model/types/ParameterCode.java     |  17 +-
 .../isotp/netty/model/types/ProtocolClass.java     |  17 +-
 .../java/isotp/netty/model/types/RejectCause.java  |  17 +-
 .../java/isotp/netty/model/types/TpduCode.java     |  17 +-
 .../java/isotp/netty/model/types/TpduSize.java     |  17 +-
 .../netty/model/types/DataTransportErrorCode.java  |  17 +-
 .../s7/netty/model/types/DataTransportSize.java    |  17 +-
 .../s7/netty/model/types/HeaderErrorClass.java     |  17 +-
 .../java/s7/netty/model/types/MemoryArea.java      |  17 +-
 .../java/s7/netty/model/types/MessageType.java     |  17 +-
 .../java/s7/netty/model/types/ParameterError.java  |  17 +-
 .../java/s7/netty/model/types/ParameterType.java   |  17 +-
 .../s7/netty/model/types/SpecificationType.java    |  17 +-
 .../java/s7/netty/model/types/TransportSize.java   |  17 +-
 .../netty/model/types/VariableAddressingMode.java  |  17 +-
 pom.xml                                            | 159 +---------
 src/site/asciidoc/developers/vpn.adoc              |   7 +
 src/site/asciidoc/protocols/s7/s7comm-plus.adoc    |   3 +
 src/site/resources/img/apache_incubator_logo.png   | Bin 0 -> 13171 bytes
 src/site/resources/img/apache_plc4x_logo_small.png | Bin 0 -> 18451 bytes
 src/site/site.xml                                  |   4 +-
 utils/site-skin/pom.xml                            |  62 ++++
 .../main/resources/META-INF/maven/site-macros.vm   |  17 +-
 .../src/main/resources/META-INF/maven/site.vm      | 173 +++++++---
 152 files changed, 4538 insertions(+), 1199 deletions(-)

diff --cc pom.xml
index 1ee8073,ab4629a..ec67aa0
--- a/pom.xml
+++ b/pom.xml
@@@ -317,8 -317,8 +317,11 @@@
              <!-- Jenkins build related files -->
              <exclude>.repository/**</exclude>
  
+             <!-- Data files created by examples running an embedded elasticsearch -->
+             <exclude>elasticsearch-data/**</exclude>
++
 +            <!-- Exclude this for now -->
 +            <exclude>utils/**</exclude>
            </excludes>
          </configuration>
        </plugin>
@@@ -358,162 -358,163 +361,6 @@@
        -->
  
        <!--
--          The reflow maven skin used for the site-generation requires some static resources.
--          The following plugins configure the acquisition and location of these resources.
--      -->
-       <!--plugin>
 -      <plugin>
--        <groupId>org.apache.maven.plugins</groupId>
--        <artifactId>maven-dependency-plugin</artifactId>
--        <executions>
--          <execution>
--            <id>unpack-js-deps</id>
--            <phase>pre-site</phase>
--            <goals>
--              <goal>unpack</goal>
--            </goals>
--            <configuration>
-               <!-
 -              <!--
--                  Bundle these dependencies in the war.
--
--                  You must maintain the corresponding info if you
--                  add/remove artifacts or change their versions:
--                    - entry in src/main/webapp/META-INF/LICENSE
--                    - entry in src/main/webapp/META-INF/NOTICE when appropriate
--
--                  You must maintain the info in the corresponding
--                  console/server files because it bundles this war.
--
--                  You must maintain the info in this project's
--                  corresponding platforms/java7 files.
-                ->
 -               -->
--              <artifactItems>
--                <artifactItem>
--                  <groupId>lt.velykis.maven.skins</groupId>
--                  <artifactId>reflow-maven-skin</artifactId>
--                  <version>1.1.1</version>
--                  <excludes>META-INF/**</excludes>
--                  <outputDirectory>${project.build.directory}/dependency/reflow-maven-skin-1.1.1/</outputDirectory>
--                </artifactItem>
--                <artifactItem>
--                  <groupId>org.webjars</groupId>
--                  <artifactId>bootstrap</artifactId>
--                  <version>2.3.2</version>
--                  <includes>META-INF/resources/webjars/**/*.min.*</includes>
--                  <excludes>META-INF/resources/webjars/**/bootstrap.min.css</excludes>
--                </artifactItem>
--                <artifactItem>
--                  <groupId>org.webjars</groupId>
--                  <artifactId>jquery</artifactId>
--                  <version>1.9.1</version>
--                  <includes>META-INF/resources/webjars/**/jquery.min.js</includes>
--                </artifactItem>
--              </artifactItems>
--            </configuration>
--          </execution>
--        </executions>
-       </plugin-->
 -      </plugin>
--
--      <!--
--        Replace the bootstrap css with the version of the theme
--      -->
-       <!--lugin>
 -      <plugin>
--        <groupId>com.googlecode.maven-download-plugin</groupId>
--        <artifactId>download-maven-plugin</artifactId>
--        <version>1.4.0</version>
--        <executions>
--          <execution>
--            <id>get-flatly-bootstrap-theme</id>
--            <phase>pre-site</phase>
--            <goals>
--              <goal>wget</goal>
--            </goals>
--            <configuration>
--              <url>http://netdna.bootstrapcdn.com/bootswatch/2.3.2/flatly/bootstrap.min.css</url>
--              <outputDirectory>${project.build.directory}/dependency/META-INF/resources/webjars/bootstrap/2.3.2/css/
--              </outputDirectory>
--              <outputFileName>bootstrap.min.css</outputFileName>
--            </configuration>
--          </execution>
--        </executions>
-       </plugin-->
 -      </plugin>
--
-       <!--plugin>
 -      <plugin>
--        <groupId>org.apache.maven.plugins</groupId>
--        <artifactId>maven-resources-plugin</artifactId>
--        <executions>
--          <execution>
--            <id>copy-site-resources</id>
--            <phase>pre-site</phase>
--            <goals>
--              <goal>copy-resources</goal>
--            </goals>
--            <configuration>
--              <outputDirectory>${project.build.directory}/site</outputDirectory>
--              <resources>
--                <resource>
-                   <directory>${project.build.directory}/dependency/META-INF/resources/webjars/bootstrap/2.3.2</directory>
 -                  <directory>${project.build.directory}/dependency/META-INF/resources/webjars/bootstrap/2.3.2
 -                  </directory>
--                </resource>
--                <resource>
--                  <directory>${project.build.directory}/dependency/META-INF/resources/webjars/jquery/1.9.1</directory>
--                  <targetPath>${project.build.directory}/site/js</targetPath>
--                </resource>
--              </resources>
--            </configuration>
--          </execution>
--        </executions>
-       </plugin-->
 -      </plugin>
--
--      <!--
--        When running asciidoctor as part of the site-generation there were great problems with
-         the configuration of the diagram generation. Unfortunately when generating all content here,
 -        the configuration of the diagram generation. Unfortunatel when generating all content here,
--        the output will not have the site style. That's why here we generate the images to the
--        site directory and have the output written to an outside directory, so it will not interfere.
--      -->
-       <!--plugin>
 -      <plugin>
--        <groupId>org.asciidoctor</groupId>
--        <artifactId>asciidoctor-maven-plugin</artifactId>
--        <version>1.5.6</version>
--        <executions>
--          <execution>
--            <id>generate-asciidoc</id>
--            <phase>site</phase>
--            <goals>
--              <goal>process-asciidoc</goal>
--            </goals>
--            <configuration>
--              <sourceDirectory>src/site/asciidoc</sourceDirectory>
--              <outputDirectory>${project.build.directory}/dump</outputDirectory>
--              <attributes>
--                <source-highlighter>prettify</source-highlighter>
-                 <!- Tells asciidoctor where to put the generated files ->
 -                <!-- Tells asciidoctor where to put the generated files -->
--                <imagesoutdir>${project.build.directory}/site/img</imagesoutdir>
--              </attributes>
--              <requires>
--                <require>asciidoctor-diagram</require>
--              </requires>
--            </configuration>
--          </execution>
--        </executions>
--        <dependencies>
--          <dependency>
--            <groupId>org.jruby</groupId>
--            <artifactId>jruby-complete</artifactId>
--            <version>9.1.13.0</version>
--          </dependency>
--          <dependency>
--            <groupId>org.asciidoctor</groupId>
--            <artifactId>asciidoctorj</artifactId>
--            <version>1.5.6</version>
--          </dependency>
--          <dependency>
--            <groupId>org.asciidoctor</groupId>
--            <artifactId>asciidoctorj-diagram</artifactId>
--            <version>1.5.4.1</version>
--          </dependency>
--        </dependencies>
-       </plugin-->
 -      </plugin>
--
--      <!--
          Make the maven-site-plugin stage the output in the "asf-site" branch
        -->
        <plugin>
diff --cc src/site/resources/img/apache_incubator_logo.png
index 0000000,0000000..b741661
new file mode 100644
Binary files differ
diff --cc src/site/resources/img/apache_plc4x_logo_small.png
index 0000000,0000000..539d80d
new file mode 100644
Binary files differ
diff --cc src/site/site.xml
index b22e8f9,1b071c0..73668a5
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@@ -74,13 -74,13 +74,13 @@@
  
    <bannerLeft>
        <name>Apache PLC4X (incubating)</name>
--      <src>https://plc4x.apache.org/img/apache_plc4x_logo.png</src>
++      <src>/img/apache_plc4x_logo_small.png</src>
        <href>https://plc4x.apache.org/</href>
    </bannerLeft>
  
    <bannerRight>
      <name>Apache Incubator</name>
--    <src>https://incubator.apache.org/images/incubator_feather_egg_logo_sm.png</src>
++    <src>/img/apache_incubator_logo.png</src>
      <href>http://incubator.apache.org/</href>
    </bannerRight>
  
diff --cc utils/site-skin/pom.xml
index 5f5fb71,0000000..7f9f550
mode 100644,000000..100644
--- a/utils/site-skin/pom.xml
+++ b/utils/site-skin/pom.xml
@@@ -1,183 -1,0 +1,245 @@@
 +<?xml version="1.0" encoding="UTF-8"?>
 +
 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 +  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 +  <modelVersion>4.0.0</modelVersion>
 +
 +  <parent>
 +    <groupId>org.apache</groupId>
 +    <artifactId>apache</artifactId>
 +    <version>19</version>
 +  </parent>
 +
 +  <groupId>org.apache.plc4x.utils</groupId>
 +  <artifactId>plc4x-site-skin</artifactId>
 +  <version>0.0.1-SNAPSHOT</version>
 +
 +  <name>plc4x-site-skin</name>
 +
 +  <properties>
 +    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 +
 +    <!-- properties used in the integration-test -->
 +    <sitePluginVersion>3.7.1</sitePluginVersion>
 +    <mpirVersion>2.9</mpirVersion>
 +  </properties>
 +
 +  <build>
 +    <plugins>
 +      <plugin>
 +        <groupId>org.apache.maven.plugins</groupId>
 +        <artifactId>maven-resources-plugin</artifactId>
 +        <configuration>
 +          <delimiters>
 +            <delimiter>@</delimiter>
 +          </delimiters>
 +          <useDefaultDelimiters>false</useDefaultDelimiters>
 +        </configuration>
 +      </plugin>
++
++      <!--
++        Download the Material Design Light package and unpack it.
++      -->
++      <plugin>
++        <groupId>com.googlecode.maven-download-plugin</groupId>
++        <artifactId>download-maven-plugin</artifactId>
++        <version>1.4.0</version>
++        <executions>
++          <execution>
++            <id>get-mdl-zip</id>
++            <phase>generate-resources</phase>
++            <goals>
++              <goal>wget</goal>
++            </goals>
++            <configuration>
++              <url>https://code.getmdl.io/1.3.0/mdl.zip</url>
++              <outputDirectory>
++                ${project.build.directory}/dependency/mdl
++              </outputDirectory>
++              <unpack>true</unpack>
++            </configuration>
++          </execution>
++        </executions>
++      </plugin>
++
++      <!--
++        Copy the MDL files to the site directory.
++      -->
++      <plugin>
++        <groupId>org.apache.maven.plugins</groupId>
++        <artifactId>maven-resources-plugin</artifactId>
++        <executions>
++          <execution>
++            <id>copy-mdl-site-resources</id>
++            <phase>process-resources</phase>
++            <goals>
++              <goal>copy-resources</goal>
++            </goals>
++            <configuration>
++              <outputDirectory>${project.build.directory}/site</outputDirectory>
++              <resources>
++                <resource>
++                  <directory>${project.build.directory}/dependency/mdl</directory>
++                  <includes>
++                    <include>**.css</include>
++                  </includes>
++                  <targetPath>${project.build.outputDirectory}/css</targetPath>
++                </resource>
++                <resource>
++                  <directory>${project.build.directory}/dependency/mdl</directory>
++                  <includes>
++                    <include>**.js</include>
++                  </includes>
++                  <targetPath>${project.build.outputDirectory}/js</targetPath>
++                </resource>
++              </resources>
++            </configuration>
++          </execution>
++        </executions>
++      </plugin>
++
 +    </plugins>
 +    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
 +      <plugins>
 +        <plugin>
 +          <artifactId>maven-clean-plugin</artifactId>
 +          <version>3.0.0</version>
 +        </plugin>
 +        <plugin>
 +          <artifactId>maven-site-plugin</artifactId>
 +          <version>3.7.1</version>
 +        </plugin>
 +        <plugin>
 +          <artifactId>maven-invoker-plugin</artifactId>
 +          <version>3.0.1</version>
 +        </plugin>
 +        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
 +        <plugin>
 +          <artifactId>maven-resources-plugin</artifactId>
 +          <version>3.0.2</version>
 +        </plugin>
 +        <plugin>
 +          <artifactId>maven-compiler-plugin</artifactId>
 +          <version>3.7.0</version>
 +        </plugin>
 +        <plugin>
 +          <artifactId>maven-surefire-plugin</artifactId>
 +          <version>2.20.1</version>
 +        </plugin>
 +        <plugin>
 +          <artifactId>maven-jar-plugin</artifactId>
 +          <version>3.0.2</version>
 +        </plugin>
 +        <plugin>
 +          <artifactId>maven-install-plugin</artifactId>
 +          <version>2.5.2</version>
 +        </plugin>
 +        <plugin>
 +          <artifactId>maven-deploy-plugin</artifactId>
 +          <version>2.8.2</version>
 +        </plugin>
 +      </plugins>
 +    </pluginManagement>
 +  </build>
 +  <profiles>
 +    <profile>
 +      <id>run-its</id>
 +      <build>
 +        <plugins>
 +          <plugin>
 +            <groupId>org.apache.maven.plugins</groupId>
 +            <artifactId>maven-invoker-plugin</artifactId>
 +            <executions>
 +              <execution>
 +                <id>integration-test</id>
 +                <goals>
 +                  <goal>install</goal>
 +                  <goal>integration-test</goal>
 +                  <goal>verify</goal>
 +                </goals>
 +              </execution>
 +            </executions>
 +            <configuration>
 +              <debug>true</debug>
 +              <projectsDirectory>src/it</projectsDirectory>
 +              <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
 +              <preBuildHookScript>setup</preBuildHookScript>
 +              <postBuildHookScript>verify</postBuildHookScript>
 +              <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
 +              <settingsFile>src/it/settings.xml</settingsFile>
 +              <pomIncludes>
 +                <pomInclude>*/pom.xml</pomInclude>
 +              </pomIncludes>
 +              <goals>
 +                <goal>site</goal>
 +              </goals>
 +            </configuration>
 +          </plugin>
 +        </plugins>
 +      </build>
 +    </profile>
 +    <profile>
 +      <id>minify</id>
 +      <build>
 +        <resources>
 +          <!-- exclude css and js since will include the minified version -->
 +          <resource>
 +            <directory>${basedir}/src/main/resources</directory>
 +            <excludes>
 +              <exclude>css/**</exclude>
 +              <exclude>js/**</exclude>
 +            </excludes>
 +            <filtering>true</filtering> <!-- add skin-info -->
 +          </resource>
 +
 +          <!-- include the print.css -->
 +          <resource>
 +            <directory>/home/herve/projets/maven/git/aggregator/archetypes/target/checkout/maven-archetype-site-skin/src/main/resources</directory>
 +            <includes>
 +              <include>css/print.css</include>
 +            </includes>
 +          </resource>
 +
 +          <!-- include minified only -->
 +          <resource>
 +            <directory>${project.build.directory}/${project.build.finalName}</directory>
 +            <includes>
 +              <include>css/plc4x-site-skin-${project.version}.min.css</include>
 +              <include>js/plc4x-site-skin-${project.version}.min.js</include>
 +            </includes>
 +          </resource>
 +        </resources>
 +        <plugins>
 +          <plugin>
 +            <groupId>com.samaxes.maven</groupId>
 +            <artifactId>maven-minify-plugin</artifactId>
 +            <version>1.3.5</version>
 +            <executions>
 +              <execution>
 +                <id>default-minify</id>
 +                <phase>generate-resources</phase>
 +                <goals>
 +                  <goal>minify</goal>
 +                </goals>
 +                <configuration>
 +                  <webappSourceDir>${basedir}/src/main/resources</webappSourceDir>
 +                  <cssSourceDir>css</cssSourceDir>
 +                  <cssSourceFiles>
 +                    <cssSourceFile>maven-base.css</cssSourceFile>
 +                    <cssSourceFile>maven-theme.css</cssSourceFile>
 +                  </cssSourceFiles>
 +                  <cssFinalFile>plc4x-site-skin-${project.version}.css</cssFinalFile>
 +                  <!--jsSourceDir>js</jsSourceDir>
 +                  <jsSourceFiles>
 +                    <jsSourceFile>fluido.js</jsSourceFile>
 +                  </jsSourceFiles>
 +                  <jsFinalFile>plc4x-site-skin-${project.version}.js</jsFinalFile-->
 +                </configuration>
 +              </execution>
 +            </executions>
 +          </plugin>
 +        </plugins>
 +      </build>
 +    </profile>
 +  </profiles>
 +</project>
diff --cc utils/site-skin/src/main/resources/META-INF/maven/site-macros.vm
index 1a8140d,0000000..386bb8a
mode 100644,000000..100644
--- a/utils/site-skin/src/main/resources/META-INF/maven/site-macros.vm
+++ b/utils/site-skin/src/main/resources/META-INF/maven/site-macros.vm
@@@ -1,474 -1,0 +1,475 @@@
 +#macro ( link $href $name $target $img $position $alt $border $width $height $title )
 +#**##set ( $linkTitle = ' title="' + $name + '"' )
 +#**##if( $target )
 +#*  *##set ( $linkTarget = ' target="' + $target + '"' )
 +#**##else
 +#*  *##set ( $linkTarget = "" )
 +#**##end
 +#**##if ( $decoration.isLink( $href ) )
 +#*  *##set ( $linkClass = ' class="externalLink"' )
 +#**##else
 +#*  *##set ( $linkClass = "" )
 +#**##end
 +#**##if ( $img )
 +#*  *##if ( $position == "left" )
 +#*    *#<a href="$href"$linkClass$linkTarget$linkTitle>#image($img $alt $border $width $height $title)$name</a>##
 +#*  *##else
 +#*    *#<a href="$href"$linkClass$linkTarget$linkTitle>$name #image($img $alt $border $width $height $title)</a>##
 +#*  *##end
 +#**##else
 +#*  *#<a href="$href"$linkClass$linkTarget$linkTitle>$name</a>##
 +#**##end
 +#end
 +##
 +#macro ( image $img $alt $border $width $height $title )
 +#**##if( $img )
 +#*  *##if ( !$decoration.isLink( $img ) )
 +#*    *##set ( $imgSrc = $PathTool.calculateLink( $img, $relativePath ) )
 +#*    *##set ( $imgSrc = $imgSrc.replaceAll( '\\', '/' ) )
 +#*    *##set ( $imgSrc = ' src="' + $imgSrc + '"' )
 +#*  *##else
 +#*    *##set ( $imgSrc = ' src="' + $img + '"' )
 +#*  *##end
 +#*  *##if( $alt )
 +#*    *##set ( $imgAlt = ' alt="' + $alt + '"' )
 +#*  *##else
 +#*    *##set ( $imgAlt = ' alt=""' )
 +#*  *##end
 +#*  *##if( $border )
 +#*    *##set ( $imgBorder = ' border="' + $border + '"' )
 +#*  *##else
 +#*    *##set ( $imgBorder = "" )
 +#*  *##end
 +#*  *##if( $width )
 +#*    *##set ( $imgWidth = ' width="' + $width + '"' )
 +#*  *##else
 +#*    *##set ( $imgWidth = "" )
 +#*  *##end
 +#*  *##if( $height )
 +#*    *##set ( $imgHeight = ' height="' + $height + '"' )
 +#*  *##else
 +#*    *##set ( $imgHeight = "" )
 +#*  *##end
 +#*  *##if( $title )
 +#*    *##set ( $imgTitle = ' title="' + $title + '"' )
 +#*  *##else
 +#*    *##set ( $imgTitle = "" )
 +#*  *##end
 +#*  *#<img class="imageLink"$imgSrc$imgAlt$imgBorder$imgWidth$imgHeight$imgTitle/>##
 +#**##end
 +#end
 +##
 +#macro ( banner $banner $id )
 +#**##if ( $banner )
 +#*  *##if( $banner.href )
 +#*    *##set ( $hrf = $banner.href )
 +#*    *##if ( !$decoration.isLink( $hrf ) )
 +#*      *##set ( $hrf = $PathTool.calculateLink( $hrf, $relativePath ) )
 +#*      *##set ( $hrf = $hrf.replaceAll( '\\', '/' ) )
 +#*      *##if ( ( $hrf == '' ) )
 +#*        *##set ( $hrf = './' )
 +#*      *##end
 +#*    *##end
 +#*    *#<a href="$hrf" id="$id"#if( $banner.alt ) title="$banner.alt"#end>##
 +#*  *##else
 +#*  *#<div id="$id">
 +#*  *##end
 +##
 +#*  *##if( $banner.src )
 +#*    *##set ( $src = $banner.src )
 +#*      *##if ( !$decoration.isLink( $src ) )
 +#*        *##set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
 +#*        *##set ( $src = $src.replaceAll( '\\', '/' ) )
 +#*      *##end
 +#*      *##if ( $banner.alt )
 +#*        *##set ( $alt = ' alt="' + $banner.alt + '"' )
 +#*      *##elseif ( $banner.name )
 +#*        *##set ( $alt = ' alt="' + $banner.name + '"' )
 +#*      *##else
 +#*        *##set ( $alt = ' alt=""' )
 +#*      *##end
 +#*      *##if( $banner.border )
 +#*        *##set ( $imgBorder = ' border="' + $banner.border + '"' )
 +#*      *##else
 +#*        *##set ( $imgBorder = "" )
 +#*      *##end
 +#*      *##if( $banner.width )
 +#*        *##set ( $imgWidth = ' width="' + $banner.width + '"' )
 +#*      *##else
 +#*        *##set ( $imgWidth = "" )
 +#*      *##end
 +#*      *##if( $banner.height )
 +#*        *##set ( $imgHeight = ' height="' + $banner.height + '"' )
 +#*      *##else
 +#*        *##set ( $imgHeight = "" )
 +#*      *##end
 +#*      *##if( $banner.title )
 +#*        *##set ( $bannerTitle=' title="' + $banner.title + '"' )
 +#*      *##else
 +#*      *##set ( $bannerTitle="" )
 +#*    *##end
 +#*    *#<img src="$src" $alt$bannerTitle$imgBorder$imgWidth$imgHeight/>##
 +#*  *##else
 +#*    *#$banner.name
 +#*  *##end
 +##
 +#*  *##if( $banner.href )
 +#*    *#</a>
 +#*  *##else
 +#*    *#</div>
 +#*  *##end
 +#**##end
 +#end
 +##
 +#macro ( links $links )
 +#**##set ( $counter = 0 )
 +#**##foreach( $item in $links )
 +#*  *##set ( $counter = $counter + 1 )
 +#*  *##set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
 +#*  *##set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
 +#*  *##link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $item.title )
 +#*  *##if ( $links.size() > $counter )
 +#*  *# |
 +#*  *##end
 +#**##end
 +#end
 +##
 +#macro ( breadcrumbs $breadcrumbs )
 +#**##foreach( $item in $breadcrumbs )
 +#*  *##set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
 +#*  *##set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
 +#*  *##if ( ( $currentItemHref == '' ) )
 +#*    *##set ( $currentItemHref = './' )
 +#*  *##end
 +##
 +#*  *##link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $item.title )
 +#**# &gt;
 +#**##end
 +#**#$shortTitle
 +#**##if( $decoration.edit && $docRenderingContext.editable )
 +#*  *# <a href="$docRenderingContext.getDoxiaSourcePath( $decoration.edit )">[edit]</a>
 +#**##end
 +#end
 +##
 +#macro ( displayTree $display $item )
 +#**##if ( $item && $item.items && $item.items.size() > 0 )
 +#*  *##foreach( $subitem in $item.items )
 +#*    *##set ( $subitemHref = $PathTool.calculateLink( $subitem.href, $relativePath ) )
 +#*    *##set ( $subitemHref = $subitemHref.replaceAll( '\\', '/' ) )
 +##
 +#*    *##if ( $alignedFileName == $subitemHref )
 +#*      *##set ( $display = true )
 +#*    *##end
 +##
 +#*    *##displayTree( $display $subitem )
 +#*  *##end
 +#**##end
 +#end
 +##
 +#macro ( menuItem $item )
 +#**##set ( $collapse = "none" )
 +#**##set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
 +#**##set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
 +##
 +#**##if ( $item && $item.items && $item.items.size() > 0 )
 +#*  *##if ( $item.collapse == false )
 +#*    *##set ( $collapse = "expanded" )
 +#*  *##else
 +#*    *### By default collapsed
 +#*    *##set ( $collapse = "collapsed" )
 +#*  *##end
 +##
 +#*  *##set ( $display = false )
 +#*  *##displayTree( $display $item )
 +##
 +#*  *##if ( $alignedFileName == $currentItemHref || $display )
 +#*    *##set ( $collapse = "expanded" )
 +#*  *##end
 +#**##end
 +  <li class="$collapse">##
 +#**##if ( $item.img )
 +#*  *##if ( $item.position == "left" )
 +#*    *##if ( $alignedFileName == $currentItemHref )
 +#*      *#<strong>#image($item.img $item.alt $item.border $item.width $item.height $item.title) $item.name</strong>
 +#*    *##else
 +#*      *##link($currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $item.title)
 +#*    *##end
 +#*  *##else
 +#*    *##if ( $alignedFileName == $currentItemHref )
 +#*      *#<strong>$item.name #image($item.img $item.alt $item.border $item.width $item.height $item.title)</strong>
 +#*    *##else
 +#*      *##link($currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $item.title)
 +#*    *##end
 +#*  *##end
 +#**##else
 +#*  *##if ( $alignedFileName == $currentItemHref )
 +#*    *#<strong>$item.name</strong>
 +#*  *##else
 +#*    *##link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $item.title )
 +#*  *##end
 +#**##end
 +#**##if ( $item && $item.items && $item.items.size() > 0 )
 +#*  *##if ( $collapse == "expanded" )
 +      <ul>
 +#*    *##foreach( $subitem in $item.items )
 +#*      *##menuItem( $subitem )
 +#*    *##end
 +      </ul>
 +#*  *##end
 +#**##end
 +  </li>
 +#end
 +##
 +#macro ( mainMenu $menus )
 +#**##foreach( $menu in $menus )
 +#*  *##if ( $menu.name )
 +#*    *##if ( $menu.img )
 +#*      *##if( $menu.position )
 +#*        *##set ( $position = $menu.position )
 +#*      *##else
 +#*        *##set ( $position = "left" )
 +#*      *##end
 +##
 +#*      *##if ( !$decoration.isLink( $menu.img ) )
 +#*        *##set ( $src = $PathTool.calculateLink( $menu.img, $relativePath ) )
 +#*        *##set ( $src = $src.replaceAll( '\\', '/' ) )
 +#*        *##set ( $src = ' src="' + $src + '"' )
 +#*      *##else
 +#*        *##set ( $src = ' src="' + $menu.img + '"' )
 +#*      *##end
 +##
 +#*      *##if( $menu.alt )
 +#*        *##set ( $alt = ' alt="' + $menu.alt + '"' )
 +#*      *##else
 +#*        *##set ( $alt = ' alt="' + $menu.name + '"' )
 +#*      *##end
 +##
 +#*      *##if( $menu.border )
 +#*        *##set ( $border = ' border="' + $menu.border + '"' )
 +#*      *##else
 +#*        *##set ( $border = ' border="0"' )
 +#*      *##end
 +##
 +#*      *##if( $menu.width )
 +#*        *##set ( $width = ' width="' + $menu.width + '"' )
 +#*      *##else
 +#*        *##set ( $width = "" )
 +#*      *##end
 +#*      *##if( $menu.height )
 +#*        *##set ( $height = ' height="' + $menu.height + '"' )
 +#*      *##else
 +#*        *##set ( $height = "" )
 +#*      *##end
 +#*      *##if( $menu.title )
 +#*        *##set ( $title = ' title="' + $menu.title + '"' )
 +#*      *##else
 +#*        *##set ( $title = "" )
 +#*      *##end
 +##
 +#*      *##set ( $img = '<img class="imageLink"' + $src + $alt + $border + $width + $height + $title + "/>" )
 +##
 +#*      *##if ( $position == "left" )
-         <h5>$img $menu.name</h5>
++            <a id="$menu.name.toLowerCase().replaceAll('[^a-z0-9]', '_')" class="plc4x-navigation__link plc4-navigation__link_$menu.name.toLowerCase().replaceAll('[^a-z0-9]', '_') mdl-navigation__link mdl-typography--text-uppercase" href="#">$img $menu.name</a>
 +#*      *##else
-         <h5>$menu.name $img</h5>
++            <a id="$menu.name.toLowerCase().replaceAll('[^a-z0-9]', '_')" class="plc4x-navigation__link plc4-navigation__link_$menu.name.toLowerCase().replaceAll('[^a-z0-9]', '_') mdl-navigation__link mdl-typography--text-uppercase" href="#">$menu.name $img</a>
 +#*      *##end
 +#*    *##else
-        <h5>$menu.name</h5>
++        <a id="$menu.name.toLowerCase().replaceAll('[^a-z0-9]', '_')" class="plc4x-navigation__link plc4-navigation__link_$menu.name.toLowerCase().replaceAll('[^a-z0-9]', '_') mdl-navigation__link mdl-typography--text-uppercase" href="#">$menu.name</a>
 +#*    *##end
 +#*  *##end
 +#*  *##if ( $menu.items && $menu.items.size() > 0 )
-     <ul>
- #*    *##foreach( $item in $menu.items )
- #*      *##menuItem( $item )
- #*    *##end
-     </ul>
++      <ul class="plc4x-menu mdl-menu mdl-menu--bottom-left mdl-js-menu mdl-js-ripple-effect"
++          for="$menu.name.toLowerCase().replaceAll('[^a-z0-9]', '_')">
++        #*    *##foreach( $item in $menu.items )
++        #*      *##menuItem( $item )
++        #*    *##end
++      </ul>
 +#*  *##end
 +#**##end
 +#end
 +##
 +#macro ( copyright )
 +#**##if ( $project )
 +#*  *##if ( ${project.organization} && ${project.organization.name} )
 +#*    *##set ( $period = "" )
 +#*  *##else
 +#*    *##set ( $period = "." )
 +#*  *##end
 +##
 +#*  *##set ( $currentYear = ${currentDate.year} + 1900 )
 +##
 +#*  *##if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) )
 +      ${project.inceptionYear}&#x2013;${currentYear}${period}##
 +#*  *##else
 +      ${currentYear}${period}##
 +#*  *##end
 +##
 +#*  *##if ( ${project.organization} )
 +#*    *##if ( ${project.organization.name} && ${project.organization.url} )
 +#*      *# <a href="$project.organization.url">${project.organization.name}</a>.
 +#*    *##elseif ( ${project.organization.name} )
 +#*      *#${project.organization.name}.
 +#*    *##end
 +#*  *##end
 +#**##end
 +#end
 +##
 +#macro ( publishDate $position $decorationPublishDate $version )
 +#**##if ( $publishDate )
 +#*  *##set ( $dateValue = $dateFormat.format( $publishDate ) )
 +#**##elseif ( $decoration.custom.getChild( 'publishDate' ) )
 +#*  *##set ( $dateValue = $decoration.custom.getChild( 'publishDate' ).getValue() )
 +#**##else
 +#*  *##set ( $dateValue = $dateFormat.format( $currentDate ) )
 +#**##end
 +##
 +#**##set ( $datePosition = $decorationPublishDate.position )
 +#**##set ( $versionPosition = $version.position )
 +##
 +#**##set ( $breadcrumbs = $decoration.body.breadcrumbs )
 +#**##set ( $links = $decoration.body.links )
 +##
 +#**##if ( $datePosition.equalsIgnoreCase( "right" ) && $links && $links.size() > 0 )
 +#*  *##set ( $prefix = "&nbsp;|" )
 +#**##else
 +#*  *##set ( $prefix = "" )
 +#**##end
 +##
 +#**##if ( $datePosition.equalsIgnoreCase( $position ) )
 +#*  *##if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) )
 +        $prefix <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue</span>
 +#*    *##if ( $versionPosition.equalsIgnoreCase( $position ) )
 +        &nbsp;| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
 +#*    *##end
 +#*  *##elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $datePosition.equalsIgnoreCase( "navigation-top" ) ) )
 +      <div id="lastPublished">
 +        <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue</span>
 +#*      *##if ( $versionPosition.equalsIgnoreCase( $position ) )
 +          &nbsp;| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
 +#*      *##end
 +      </div>
 +#*    *##elseif ( $datePosition.equalsIgnoreCase( "left" ) )
 +      <div class="xleft">
 +        <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue</span>
 +#*      *##if ( $versionPosition.equalsIgnoreCase( $position ) )
 +          &nbsp;| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
 +#*      *##end
 +#*      *##if ( $breadcrumbs && $breadcrumbs.size() > 0 )
 +          | #breadcrumbs( $breadcrumbs )
 +#*      *##end
 +      </div>
 +#*  *##end
 +#**##elseif ( $versionPosition.equalsIgnoreCase( $position ) )
 +#*  *##if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( $versionPosition.equalsIgnoreCase( "bottom" ) ) )
 +      $prefix <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
 +#*  *##elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
 +      <div id="lastPublished">
 +        <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
 +      </div>
 +#*  *##elseif ( $versionPosition.equalsIgnoreCase( "left" ) )
 +      <div class="xleft">
 +        <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
 +#*      *##if ( $breadcrumbs && $breadcrumbs.size() > 0 )
 +          | #breadcrumbs( $breadcrumbs )
 +#*      *##end
 +      </div>
 +#*  *##end
 +#**##elseif ( $position.equalsIgnoreCase( "left" ) )
 +#*  *##if ( $breadcrumbs && $breadcrumbs.size() > 0 )
 +      <div class="xleft">
 +#*      *##breadcrumbs( $breadcrumbs )
 +      </div>
 +#*  *##end
 +#**##end
 +#end
 +##
 +#macro ( poweredByLogo $poweredBy )
 +#**##if( $poweredBy )
 +#*  *##foreach ($item in $poweredBy)
 +#*    *##if( $item.href )
 +#*      *##set ( $href = $PathTool.calculateLink( $item.href, $relativePath ) )
 +#*      *##set ( $href = $href.replaceAll( '\\', '/' ) )
 +#*    *##else
 +#*      *##set ( $href="http://maven.apache.org/" )
 +#*    *##end
 +##
 +#*    *##if( $item.name )
 +#*      *##set ( $name = $item.name )
 +#*    *##else
 +#*      *##set ( $name = $i18n.getString( "site-renderer", $locale, "template.builtby" )  )
 +#*      *##set ( $name = "${name} Maven"  )
 +#*    *##end
 +##
 +#*    *##if( $item.img )
 +#*      *##set ( $img = $item.img )
 +#*    *##else
 +#*      *##set ( $img = "images/logos/maven-feather.png" )
 +#*    *##end
 +##
 +#*    *##if ( !$decoration.isLink( $img ) )
 +#*      *##set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
 +#*      *##set ( $img = $img.replaceAll( '\\', '/' ) )
 +#*    *##end
 +##
 +#*    *##if( $item.alt )
 +#*      *##set ( $alt = ' alt="' + $item.alt + '"' )
 +#*    *##else
 +#*      *##set ( $alt = ' alt="' + $name + '"' )
 +#*    *##end
 +##
 +#*    *##if( $item.border )
 +#*      *##set ( $border = ' border="' + $item.border + '"' )
 +#*    *##else
 +#*      *##set ( $border = "" )
 +#*    *##end
 +##
 +#*    *##if( $item.width )
 +#*      *##set ( $width = ' width="' + $item.width + '"' )
 +#*    *##else
 +#*      *##set ( $width = "" )
 +#*    *##end
 +#*    *##if( $item.height )
 +#*      *##set ( $height = ' height="' + $item.height + '"' )
 +#*    *##else
 +#*      *##set ( $height = "" )
 +#*    *##end
 +#*    *##if( $item.title )
 +#*      *##set ( $title = ' title="' + $item.title + '"' )
 +#*    *##else
 +#*      *##set ( $title = "" )
 +#*    *##end
 +##
 +      <a href="$href" title="$name" class="poweredBy">
 +        <img class="poweredBy" $alt src="$img" $border $width $height $title />
 +      </a>
 +#*  *##end
 +#*  *##if( $poweredBy.isEmpty() )
 +      <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
 +        <img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png" />
 +      </a>
 +#*  *##end
 +#**##else
 +    <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
 +      <img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png" />
 +    </a>
 +#**##end
 +#end
 +##
 +#macro ( googleAnalytics $accountId )
 +#**##if( $accountId && $accountId != "" )
 +    <!-- Google Analytics -->
 +    <script type="text/javascript">
 +
 +      var _gaq = _gaq || [];
 +      _gaq.push(['_setAccount', '$accountId']);
 +      _gaq.push(['_trackPageview']);
 +
 +      (function() {
 +        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
 +        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
 +        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 +      })();
 +
 +    </script>
 +#**##end
 +#end
diff --cc utils/site-skin/src/main/resources/META-INF/maven/site.vm
index 64c98ad,0000000..214d6f4
mode 100644,000000..100644
--- a/utils/site-skin/src/main/resources/META-INF/maven/site.vm
+++ b/utils/site-skin/src/main/resources/META-INF/maven/site.vm
@@@ -1,80 -1,0 +1,163 @@@
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +#parse( "site-macros.vm" )
 +<!-- Generated by Apache Maven Doxia Site Renderer#if( $doxiaSiteRendererVersion ) $doxiaSiteRendererVersion#end##
 +#if( $docRenderingContext.generator || $docRenderingContext.doxiaSource ) from##
 +#if( $docRenderingContext.generator ) $docRenderingContext.generator#end##
 +#if( $docRenderingContext.doxiaSource ) $docRenderingContext.doxiaSourcePath#end##
 +#end
 + at $dateFormat.format( $currentDate ) -->
 +<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
 +    <title>$title</title>
 +    <style type="text/css" media="all">
-       @import url("$relativePath/css/maven-base.css");
++      @import url("$relativePath/css/material.min.css");
++      /*@import url("$relativePath/css/maven-base.css");
 +      @import url("$relativePath/css/maven-theme.css");
-       @import url("$relativePath/css/site.css");
++      @import url("$relativePath/css/site.css");*/
 +    </style>
++    <script src="$relativePath/js/material.min.js"></script>
++    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"/ >
 +    <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" media="print" />
 +#foreach( $author in $authors )
 +      <meta name="author" content="$author" />
 +#end
 +#if ( $documentDate )
 +    <meta name="date" content="$documentDate" />
 +#end
 +#if ( $locale )
 +    <meta http-equiv="Content-Language" content="$locale.language" />
 +#end
 +#if( $decoration.body.head )
 +#**#$render.eval( $decoration.body.head )
 +#end
 +    $headContent
 +#**##googleAnalytics( $decoration.googleAnalyticsAccountId )
 +  </head>
 +  <body class="composite">
-     <div id="banner">
- #*  *##banner( $decoration.bannerLeft "bannerLeft" )
- #*  *##banner( $decoration.bannerRight "bannerRight" )
-       <div class="clear">
-         <hr/>
-       </div>
-     </div>
-     <div id="breadcrumbs">
- #*  *##publishDate( "left" $decoration.publishDate $decoration.version )
-       <div class="xright">#links( $decoration.body.links )
- #*  *##publishDate( "right" $decoration.publishDate $decoration.version )
-       </div>
-       <div class="clear">
-         <hr/>
-       </div>
-     </div>
-     <div id="leftColumn">
-       <div id="navcolumn">
- #*   *##publishDate( "navigation-top" $decoration.publishDate $decoration.version )
- #*   *##mainMenu( $decoration.body.menus )
- #*   *##poweredByLogo( $decoration.poweredBy )
- #*   *##publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
-       </div>
-     </div>
-     <div id="bodyColumn">
-       <div id="contentBox">
- #*   *#$bodyContent
-       </div>
-     </div>
-     <div class="clear">
-       <hr/>
-     </div>
-     <div id="footer">
-       <div class="xright">
- #*  *##if( $decoration.body.footer )
-         $render.eval( $decoration.body.footer )
- #*  *##else
-         Copyright &#169;#copyright()All rights reserved.#publishDate( "bottom" $decoration.publishDate $decoration.version )
- #*  *##end
-       </div>
-       <div class="clear">
-         <hr/>
-       </div>
++    <style>
++      .plc4x-layout-transparent {
++          background-color: #2E2E2E;
++          background-image: url(logo.png);
++          background-size: auto 32px;
++      }
++
++      .plc4x-layout-transparent .mdl-layout__header,
++      .plc4x-layout-transparent .mdl-layout__drawer-button {
++          color: white;
++      }
++
++      .plc4x-layout-header{
++          position: relative;
++          box-sizing: border-box;
++          height: 144px;
++          background-position: 40px 32px;
++      }
++
++      .plc4x-layout__header-row {
++          height: 100px;
++          padding: 0 20px 0 20px;
++      }
++
++      .plc4x-navigation__container {
++          position: absolute;
++          height: 64px;
++          width: 100%;
++          bottom: 0;
++          left: 0;
++      }
++
++      .plc4x-navigation__link {
++          opacity: .65;
++          line-height: 64px;
++          padding: 0 16px;
++          color: #ffffff;
++          box-sizing: border-box;
++          border-bottom: 3px solid transparent;
++      }
++
++      .plc4x-navigation__link:hover {
++          opacity: 1;
++      }
++
++      .plc4-navigation__link_reports {
++          padding: 0 16px 0 60px;
++      }
++
++      .plc4x-layout__content {
++          background-color: #FFFFFF;
++      }
++
++      .plc4x-menu {
++          opacity: 1;
++          background-color: #FFFFFF;
++      }
++
++      .plc4x-footer {
++          opacity: .65;
++          color: #FFFFFF;
++      }
++
++    </style>
++    <div class="plc4x-layout-transparent mdl-layout mdl-js-layout">
++        <header class="plc4x-layout-header mdl-layout__header mdl-layout__header--transparent">
++            <div class="plc4x-layout__header-row mdl-layout__header-row">
++                <span class="mdl-layout-title">
++                    #*  *##banner( $decoration.bannerLeft "bannerLeft" )
++                </span>
++                <div class="mdl-layout-spacer"></div>
++                <span class="mdl-layout-title">
++                    #*  *##banner( $decoration.bannerRight "bannerRight" )
++                </span>
++            </div>
++            <div class="plc4x-navigation__container">
++                <!-- Title -->
++                <!-- Add spacer, to align navigation to the right -->
++                <div class="mdl-layout-spacer"></div>
++                <!-- Navigation -->
++                <nav class="plc4x-navigation mdl-navigation">
++                    #*   *##mainMenu( $decoration.body.menus )
++                    <div class="spacer"></div>
++                </nav>
++                <i class="material-icons scrollindicator scrollindicator--right">&#xE315;</i>
++                <i class="material-icons scrollindicator scrollindicator--left">&#xE314;</i>
++            </div>
++        </header>
++        <main class="plc4x-layout__content mdl-layout__content">
++            <div id="breadcrumbs">
++                #*  *##publishDate( "left" $decoration.publishDate $decoration.version )
++                <div class="xright">#links( $decoration.body.links )
++                    #*  *##publishDate( "right" $decoration.publishDate $decoration.version )
++                </div>
++                <div class="clear">
++                    <hr/>
++                </div>
++            </div>
++            <div id="leftColumn">
++                <div id="navcolumn">
++                    #*   *##publishDate( "navigation-top" $decoration.publishDate $decoration.version )
++                    #*   *##poweredByLogo( $decoration.poweredBy )
++                    #*   *##publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
++                </div>
++            </div>
++            <div id="bodyColumn">
++                <div id="contentBox">
++                    #*  *#$bodyContent
++                </div>
++            </div>
++            <div class="clear">
++                <hr/>
++            </div>
++        </main>
++        <footer class="plc4x-footer">
++            <div class="xright">
++            #*  *##if( $decoration.body.footer )
++                $render.eval( $decoration.body.footer )
++            #*  *##else
++                Copyright &#169;#copyright()All rights reserved.#publishDate( "bottom" $decoration.publishDate $decoration.version )
++            #*  *##end
++            </div>
++        </footer>
 +    </div>
 +  </body>
 +</html>