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:42 UTC

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

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>