You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2016/10/25 21:27:11 UTC

svn commit: r1766603 [1/8] - in /openwebbeans/microwave/trunk: ./ microwave-arquillian/src/main/java/org/apache/microwave/arquillian/ microwave-core/src/main/java/org/apache/microwave/ microwave-core/src/main/java/org/apache/microwave/tomcat/ microwave...

Author: rmannibucau
Date: Tue Oct 25 21:27:10 2016
New Revision: 1766603

URL: http://svn.apache.org/viewvc?rev=1766603&view=rev
Log:
flag to setup tomcat defaults + basic doc module (TODO: exclude it from the src module since that's for the site only)

Added:
    openwebbeans/microwave/trunk/microwave-doc/
    openwebbeans/microwave/trunk/microwave-doc/pom.xml
    openwebbeans/microwave/trunk/microwave-doc/src/
    openwebbeans/microwave/trunk/microwave-doc/src/main/
    openwebbeans/microwave/trunk/microwave-doc/src/main/java/
    openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/
    openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/
    openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/
    openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/
    openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/JBake.java   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/PDFify.java   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/slf4j/
    openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/slf4j/bridge/
    openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/slf4j/bridge/SLF4JBridgeHandler.java   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/css/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/css/styles.css
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/images/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/images/empty.gif   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/js/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/js/main.js
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css.map   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.svg   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/js/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/js/bootstrap.min.js   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/elegant_font/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.eot   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.svg   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.ttf   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.woff   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/style.css   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/font-awesome/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/font-awesome/css/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/font-awesome/css/font-awesome.min.css
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/FontAwesome.otf   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.eot   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.svg
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.ttf   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.woff   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.woff2   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/jquery-1.12.3.min.js
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/jquery-match-height/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/jquery-match-height/jquery.matchHeight-min.js   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/favicon.ico   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/favicon.png   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/content/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/content/components.adoc   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/content/download.adoc   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/content/start.adoc   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/jbake.properties   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/templates/
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/templates/footer.gsp   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/templates/header.gsp   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/templates/index.gsp   (with props)
    openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/templates/page.gsp   (with props)
Modified:
    openwebbeans/microwave/trunk/microwave-arquillian/src/main/java/org/apache/microwave/arquillian/MicrowaveConfiguration.java
    openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java
    openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/tomcat/TomcatAutoInitializer.java
    openwebbeans/microwave/trunk/microwave-gradle-plugin/src/main/java/org/apache/microwave/gradle/MicrowaveExtension.java
    openwebbeans/microwave/trunk/microwave-gradle-plugin/src/main/java/org/apache/microwave/gradle/MicrowaveTask.java
    openwebbeans/microwave/trunk/microwave-maven-plugin/src/main/java/org/apache/microwave/maven/MicrowaveRunMojo.java
    openwebbeans/microwave/trunk/pom.xml

Modified: openwebbeans/microwave/trunk/microwave-arquillian/src/main/java/org/apache/microwave/arquillian/MicrowaveConfiguration.java
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-arquillian/src/main/java/org/apache/microwave/arquillian/MicrowaveConfiguration.java?rev=1766603&r1=1766602&r2=1766603&view=diff
==============================================================================
--- openwebbeans/microwave/trunk/microwave-arquillian/src/main/java/org/apache/microwave/arquillian/MicrowaveConfiguration.java (original)
+++ openwebbeans/microwave/trunk/microwave-arquillian/src/main/java/org/apache/microwave/arquillian/MicrowaveConfiguration.java Tue Oct 25 21:27:10 2016
@@ -75,6 +75,7 @@ public class MicrowaveConfiguration impl
     private boolean tomcatScanning = true;
     private boolean tomcatAutoSetup = true;
     private boolean useShutdownHook = false /*arquillian*/;
+    private boolean useTomcatDefaults = true;
 
     @Override
     public void validate() throws ConfigurationException {
@@ -494,4 +495,12 @@ public class MicrowaveConfiguration impl
     public void setTomcatFilter(final String tomcatFilter) {
         this.tomcatFilter = tomcatFilter;
     }
+
+    public boolean isUseTomcatDefaults() {
+        return useTomcatDefaults;
+    }
+
+    public void setUseTomcatDefaults(final boolean useTomcatDefaults) {
+        this.useTomcatDefaults = useTomcatDefaults;
+    }
 }

Modified: openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java?rev=1766603&r1=1766602&r2=1766603&view=diff
==============================================================================
--- openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java (original)
+++ openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java Tue Oct 25 21:27:10 2016
@@ -214,6 +214,24 @@ public class Microwave implements AutoCl
             new TomcatAutoInitializer().onStartup(c, ctx1);
         }, emptySet());
 
+        if (configuration.isUseTomcatDefaults()) {
+            ctx.setSessionTimeout(30);
+            ctx.addWelcomeFile("index.html");
+            ctx.addWelcomeFile("index.htm");
+            try {
+                final Field mimesField = Tomcat.class.getDeclaredField("DEFAULT_MIME_MAPPINGS");
+                if (!mimesField.isAccessible()) {
+                    mimesField.setAccessible(true);
+                }
+                final String[] defaultMimes = String[].class.cast(mimesField.get(null));
+                for (int i = 0; i < defaultMimes.length; ) {
+                    ctx.addMimeMapping(defaultMimes[i++], defaultMimes[i++]);
+                }
+            } catch (final NoSuchFieldException | IllegalAccessException e) {
+                throw new IllegalStateException("Incompatible Tomcat", e);
+            }
+        }
+
         ofNullable(meta.consumer).ifPresent(c -> c.accept(ctx));
 
         tomcat.getHost().addChild(ctx);
@@ -725,10 +743,21 @@ public class Microwave implements AutoCl
         @CliOption(name = "tomcat-filter", description = "A Tomcat JarScanFilter")
         private String tomcatFilter;
 
+        @CliOption(name = "tomcat-default", description = "Should Tomcat default be set (session timeout, mime mapping etc...)")
+        private boolean useTomcatDefaults = true;
+
         public Builder() { // load defaults
             loadFrom("microwave.properties");
         }
 
+        public boolean isUseTomcatDefaults() {
+            return useTomcatDefaults;
+        }
+
+        public void setUseTomcatDefaults(final boolean useTomcatDefaults) {
+            this.useTomcatDefaults = useTomcatDefaults;
+        }
+
         public String getTomcatFilter() {
             return tomcatFilter;
         }

Modified: openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/tomcat/TomcatAutoInitializer.java
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/tomcat/TomcatAutoInitializer.java?rev=1766603&r1=1766602&r2=1766603&view=diff
==============================================================================
--- openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/tomcat/TomcatAutoInitializer.java (original)
+++ openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/tomcat/TomcatAutoInitializer.java Tue Oct 25 21:27:10 2016
@@ -40,7 +40,5 @@ public class TomcatAutoInitializer imple
         def.setInitParameter("debug", "0");
         def.setLoadOnStartup(1);
         def.addMapping("/");
-
-        // TODO: mimetypes
     }
 }

Added: openwebbeans/microwave/trunk/microwave-doc/pom.xml
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-doc/pom.xml?rev=1766603&view=auto
==============================================================================
--- openwebbeans/microwave/trunk/microwave-doc/pom.xml (added)
+++ openwebbeans/microwave/trunk/microwave-doc/pom.xml Tue Oct 25 21:27:10 2016
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<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">
+  <parent>
+    <artifactId>microwave</artifactId>
+    <groupId>org.apache.microwave</groupId>
+    <version>0.0.1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>microwave-doc</artifactId>
+  <name>Microwave :: Doc</name>
+
+  <properties>
+    <jbake.http>false</jbake.http>
+    <jbake.pdf>false</jbake.pdf>
+
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.asciidoctor</groupId>
+      <artifactId>asciidoctorj-pdf</artifactId>
+      <version>1.5.0-alpha.11</version>
+    </dependency>
+    <dependency>
+      <groupId>org.asciidoctor</groupId>
+      <artifactId>asciidoctorj</artifactId>
+      <version>1.5.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.microwave</groupId>
+      <artifactId>microwave-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jbake</groupId>
+      <artifactId>jbake-core</artifactId>
+      <version>2.4.0</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>jul-to-slf4j</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.groovy</groupId>
+      <artifactId>groovy</artifactId>
+      <version>2.3.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.groovy</groupId>
+      <artifactId>groovy-templates</artifactId>
+      <version>2.3.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <version>2.7</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.4.0</version>
+        <executions>
+          <execution>
+            <id>microwave-site</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>java</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <includeProjectDependencies>true</includeProjectDependencies>
+          <mainClass>org.apache.microwave.doc.JBake</mainClass>
+          <arguments>
+            <argument>${project.basedir}/src/main/jbake/</argument>
+            <argument>${project.build.directory}/${project.build.finalName}</argument>
+            <argument>${jbake.http}</argument>
+            <argument>${jbake.pdf}</argument>
+          </arguments>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <!--
+  Don't deliver it yet.
+  -->
+  <distributionManagement>
+    <repository>
+      <id>localhost</id>
+      <url>file://${project.basedir}/target/repo/</url>
+    </repository>
+    <snapshotRepository>
+      <id>localhost</id>
+      <url>file://${project.basedir}/target/snapshot-repo/</url>
+    </snapshotRepository>
+  </distributionManagement>
+</project>

Added: openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/JBake.java
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/JBake.java?rev=1766603&view=auto
==============================================================================
--- openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/JBake.java (added)
+++ openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/JBake.java Tue Oct 25 21:27:10 2016
@@ -0,0 +1,185 @@
+package org.apache.microwave.doc;
+
+import com.orientechnologies.orient.core.Orient;
+import org.apache.commons.configuration.CompositeConfiguration;
+import org.apache.microwave.Microwave;
+import org.jbake.app.ConfigUtil;
+import org.jbake.app.Oven;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.ClosedWatchServiceException;
+import java.nio.file.Path;
+import java.nio.file.WatchEvent;
+import java.nio.file.WatchKey;
+import java.nio.file.WatchService;
+import java.util.Scanner;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Stream;
+
+import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
+import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
+import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
+
+public class JBake {
+    private JBake() {
+        // no-op
+    }
+
+    public static void main(final String[] args) throws Exception {
+        System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "64"); // try to have parallelStream better than default
+
+        final File source = args == null || args.length < 1 ? new File("src/main/jbake") : new File(args[0]);
+        final File pdfSource = new File(source, "content");
+        final File destination = args == null || args.length < 2 ? new File("target/site-tmp") : new File(args[1]);
+        final boolean startHttp = args == null || args.length < 2 || Boolean.parseBoolean(args[2]); // by default we dev
+        final boolean skipPdf = args == null || args.length < 3 || Boolean.parseBoolean(args[3]); // by default...too slow sorry
+
+        final Runnable build = () -> {
+            System.out.println("Building Microwave website in " + destination);
+            final Orient orient = Orient.instance();
+            try {
+                orient.startup();
+
+                final Oven oven = new Oven(source, destination, new CompositeConfiguration() {{
+                    addConfiguration(ConfigUtil.load(source));
+                }}, true);
+                oven.setupPaths();
+
+                System.out.println("  > baking");
+                oven.bake();
+
+                if (!skipPdf) {
+                    System.out.println("  > pdfifying");
+                    PDFify.generatePdf(pdfSource, destination);
+                }
+
+                System.out.println("  > done :)");
+            } catch (final Exception e) {
+                e.printStackTrace();
+            } finally {
+                orient.shutdown();
+            }
+        };
+
+        build.run();
+        if (startHttp) {
+            final Path watched = source.toPath();
+            final WatchService watchService = watched.getFileSystem().newWatchService();
+            watched.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
+            final AtomicBoolean run = new AtomicBoolean(true);
+            final AtomicLong render = new AtomicLong(-1);
+            final Thread renderingThread = new Thread() {
+                {
+                    setName("jbake-renderer");
+                }
+
+                @Override
+                public void run() {
+                    long last = System.currentTimeMillis();
+                    while (run.get()) {
+                        if (render.get() > last) {
+                            last = System.currentTimeMillis();
+                            try {
+                                build.run();
+                            } catch (final Throwable oops) {
+                                oops.printStackTrace();
+                            }
+                        }
+                        try {
+                            sleep(TimeUnit.SECONDS.toMillis(1));
+                        } catch (final InterruptedException e) {
+                            Thread.interrupted();
+                            break;
+                        }
+                    }
+                    System.out.println("Exiting renderer");
+                }
+            };
+            final Thread watcherThread = new Thread() {
+                {
+                    setName("jbake-file-watcher");
+                }
+
+                @Override
+                public void run() {
+                    while (run.get()) {
+                        try {
+                            final WatchKey key = watchService.poll(1, TimeUnit.SECONDS);
+                            if (key == null) {
+                                continue;
+                            }
+
+                            for (final WatchEvent<?> event : key.pollEvents()) {
+                                final WatchEvent.Kind<?> kind = event.kind();
+                                if (kind != ENTRY_CREATE && kind != ENTRY_DELETE && kind != ENTRY_MODIFY) {
+                                    continue; // unlikely but better to protect ourself
+                                }
+
+                                final Path updatedPath = Path.class.cast(event.context());
+                                if (kind == ENTRY_DELETE || updatedPath.toFile().isFile()) {
+                                    final String path = updatedPath.toString();
+                                    if (!path.contains("___jb") && !path.endsWith("~")) {
+                                        render.set(System.currentTimeMillis());
+                                    }
+                                }
+                            }
+                            key.reset();
+                        } catch (final InterruptedException e) {
+                            Thread.interrupted();
+                            run.compareAndSet(true, false);
+                        } catch (final ClosedWatchServiceException cwse) {
+                            if (!run.get()) {
+                                throw new IllegalStateException(cwse);
+                            }
+                        }
+                    }
+                    System.out.println("Exiting file watcher");
+                }
+            };
+
+            renderingThread.start();
+            watcherThread.start();
+
+            final Runnable onQuit = () -> {
+                run.compareAndSet(true, false);
+                Stream.of(watcherThread, renderingThread).forEach(thread -> {
+                    try {
+                        thread.join();
+                    } catch (final InterruptedException e) {
+                        Thread.interrupted();
+                    }
+                });
+                try {
+                    watchService.close();
+                } catch (final IOException ioe) {
+                    // not important
+                }
+            };
+
+            try (final Microwave container = new Microwave(new Microwave.Builder() {{
+                setWebResourceCached(false);
+            }}) {{
+                start();
+                deployWebapp(destination);
+            }}) {
+                System.out.println("Started on http://localhost:" + container.getConfiguration().getHttpPort());
+
+                final Scanner console = new Scanner(System.in);
+                String cmd;
+                while (((cmd = console.nextLine())) != null) {
+                    if ("quit".equals(cmd)) {
+                        break;
+                    } else if ("r".equals(cmd) || "rebuild".equals(cmd) || "build".equals(cmd) || "b".equals(cmd)) {
+                        render.set(System.currentTimeMillis());
+                    } else {
+                        System.err.println("Ignoring " + cmd + ", please use 'build' or 'quit'");
+                    }
+                }
+            }
+            onQuit.run();
+        }
+    }
+}

Propchange: openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/JBake.java
------------------------------------------------------------------------------
    svn:executable = *

Added: openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/PDFify.java
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/PDFify.java?rev=1766603&view=auto
==============================================================================
--- openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/PDFify.java (added)
+++ openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/PDFify.java Tue Oct 25 21:27:10 2016
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.microwave.doc;
+
+import org.asciidoctor.Asciidoctor;
+import org.asciidoctor.AttributesBuilder;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+import static org.asciidoctor.OptionsBuilder.options;
+
+public class PDFify {
+    private PDFify() {
+        // no-op
+    }
+
+    public static void generatePdf(final File from, final File targetBase) throws IOException {
+        final Path sourceBase = from.toPath();
+        final Asciidoctor asciidoctor = Asciidoctor.Factory.create();
+        final ExecutorService pool = Executors.newFixedThreadPool(16);
+        Files.walkFileTree(sourceBase, new SimpleFileVisitor<Path>() {
+            @Override
+            public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException {
+                final String fileName = file.getFileName().toString();
+                if (fileName.endsWith(".adoc")) {
+                    pool.submit(() -> {
+                        final String path = sourceBase.relativize(file).toString();
+                        final File target = new File(targetBase, path.substring(0, path.length() - "adoc".length()) + "pdf");
+                        final File asFile = file.toFile();
+                        final Map<String, Object> attributes = asciidoctor.readDocumentHeader(asFile).getAttributes();
+                        // if we generate the PDF link we need to create the PDF excepted if it is expected to be manual
+                        if (attributes.containsKey("jbake-microwavepdf") && !attributes.containsKey("jbake-microwavepdf-manual")) {
+                            asciidoctor.convertFile(
+                                    asFile,
+                                    options().backend("pdf").attributes(AttributesBuilder.attributes().attribute("source-highlighter", "coderay")).toFile(target).get());
+                            System.out.println("Generated " + target);
+                        }
+                    });
+                }
+                return super.visitFile(file, attrs);
+            }
+        });
+        pool.shutdown();
+        try {
+            pool.awaitTermination(1, TimeUnit.HOURS);
+        } catch (final InterruptedException e) {
+            Thread.interrupted();
+        }
+    }
+}

Propchange: openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/apache/microwave/doc/PDFify.java
------------------------------------------------------------------------------
    svn:executable = *

Added: openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/slf4j/bridge/SLF4JBridgeHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/slf4j/bridge/SLF4JBridgeHandler.java?rev=1766603&view=auto
==============================================================================
--- openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/slf4j/bridge/SLF4JBridgeHandler.java (added)
+++ openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/slf4j/bridge/SLF4JBridgeHandler.java Tue Oct 25 21:27:10 2016
@@ -0,0 +1,7 @@
+package org.slf4j.bridge;
+
+// dep of org.jbake.app.Oven but we don't want the bridge there
+public class SLF4JBridgeHandler {
+    public static void removeHandlersForRootLogger(){}
+    public static void install() {}
+}

Propchange: openwebbeans/microwave/trunk/microwave-doc/src/main/java/org/slf4j/bridge/SLF4JBridgeHandler.java
------------------------------------------------------------------------------
    svn:executable = *

Added: openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/css/styles.css
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/css/styles.css?rev=1766603&view=auto
==============================================================================
--- openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/css/styles.css (added)
+++ openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/css/styles.css Tue Oct 25 21:27:10 2016
@@ -0,0 +1,1268 @@
+/*   
+ * Template Name: PrettyDocs - Responsive Website Template for documentations
+ * Version: 1.0
+ * Author: Xiaoying Riley
+ * License: Creative Commons Attribution 3.0 License - https://creativecommons.org/licenses/by/3.0/
+ * Twitter: @3rdwave_themes
+ * Website: http://themes.3rdwavemedia.com/
+*/
+/* Theme default */
+/* ======= Base ======= */
+body {
+  font-family: 'Open Sans', arial, sans-serif;
+  color: #494d55;
+  font-size: 14px;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+html,
+body {
+  height: 100%;
+}
+.page-wrapper {
+  min-height: 100%;
+  /* equal to footer height */
+  margin-bottom: -50px;
+}
+.page-wrapper:after {
+  content: "";
+  display: block;
+  height: 50px;
+}
+.footer {
+  height: 50px;
+}
+p {
+  line-height: 1.5;
+}
+a {
+  color: #3aa7aa;
+  -webkit-transition: all 0.4s ease-in-out;
+  -moz-transition: all 0.4s ease-in-out;
+  -ms-transition: all 0.4s ease-in-out;
+  -o-transition: all 0.4s ease-in-out;
+}
+a:hover {
+  text-decoration: underline;
+  color: #339597;
+}
+a:focus {
+  text-decoration: none;
+}
+code {
+  background: #222;
+  color: #fff;
+  font-size: 14px;
+  font-weight: bold;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  padding: 2px 8px;
+  padding-top: 4px;
+  display: inline-block;
+}
+.btn,
+a.btn {
+  -webkit-transition: all 0.4s ease-in-out;
+  -moz-transition: all 0.4s ease-in-out;
+  -ms-transition: all 0.4s ease-in-out;
+  -o-transition: all 0.4s ease-in-out;
+  font-weight: 600;
+  font-size: 14px;
+  line-height: 1.5;
+}
+.btn .fa,
+a.btn .fa {
+  margin-right: 5px;
+}
+.btn-primary,
+a.btn-primary {
+  background: #40babd;
+  border: 1px solid #40babd;
+  color: #fff !important;
+}
+.btn-primary:hover,
+a.btn-primary:hover,
+.btn-primary:focus,
+a.btn-primary:focus,
+.btn-primary:active,
+a.btn-primary:active,
+.btn-primary.active,
+a.btn-primary.active,
+.btn-primary.hover,
+a.btn-primary.hover {
+  background: #3aa7aa;
+  color: #fff !important;
+  border: 1px solid #3aa7aa;
+}
+.btn-green,
+a.btn-green {
+  background: #75c181;
+  border: 1px solid #75c181;
+  color: #fff !important;
+}
+.btn-green:hover,
+a.btn-green:hover,
+.btn-green:focus,
+a.btn-green:focus,
+.btn-green:active,
+a.btn-green:active,
+.btn-green.active,
+a.btn-green.active,
+.btn-green.hover,
+a.btn-green.hover {
+  background: #63b971;
+  color: #fff !important;
+  border: 1px solid #63b971;
+}
+.body-green .btn-green,
+.body-green a.btn-green {
+  color: #fff !important;
+}
+.body-green .btn-green:hover,
+.body-green a.btn-green:hover,
+.body-green .btn-green:focus,
+.body-green a.btn-green:focus,
+.body-green .btn-green:active,
+.body-green a.btn-green:active,
+.body-green .btn-green.active,
+.body-green a.btn-green.active,
+.body-green .btn-green.hover,
+.body-green a.btn-green.hover {
+  color: #fff !important;
+}
+.btn-blue,
+a.btn-blue {
+  background: #58bbee;
+  border: 1px solid #58bbee;
+  color: #fff !important;
+}
+.btn-blue:hover,
+a.btn-blue:hover,
+.btn-blue:focus,
+a.btn-blue:focus,
+.btn-blue:active,
+a.btn-blue:active,
+.btn-blue.active,
+a.btn-blue.active,
+.btn-blue.hover,
+a.btn-blue.hover {
+  background: #41b2ec;
+  color: #fff !important;
+  border: 1px solid #41b2ec;
+}
+.btn-orange,
+a.btn-orange {
+  background: #F88C30;
+  border: 1px solid #F88C30;
+  color: #fff !important;
+}
+.btn-orange:hover,
+a.btn-orange:hover,
+.btn-orange:focus,
+a.btn-orange:focus,
+.btn-orange:active,
+a.btn-orange:active,
+.btn-orange.active,
+a.btn-orange.active,
+.btn-orange.hover,
+a.btn-orange.hover {
+  background: #f77e17;
+  color: #fff !important;
+  border: 1px solid #f77e17;
+}
+.btn-red,
+a.btn-red {
+  background: #f77b6b;
+  border: 1px solid #f77b6b;
+  color: #fff !important;
+}
+.btn-red:hover,
+a.btn-red:hover,
+.btn-red:focus,
+a.btn-red:focus,
+.btn-red:active,
+a.btn-red:active,
+.btn-red.active,
+a.btn-red.active,
+.btn-red.hover,
+a.btn-red.hover {
+  background: #f66553;
+  color: #fff !important;
+  border: 1px solid #f66553;
+}
+.btn-pink,
+a.btn-pink {
+  background: #EA5395;
+  border: 1px solid #EA5395;
+  color: #fff !important;
+}
+.btn-pink:hover,
+a.btn-pink:hover,
+.btn-pink:focus,
+a.btn-pink:focus,
+.btn-pink:active,
+a.btn-pink:active,
+.btn-pink.active,
+a.btn-pink.active,
+.btn-pink.hover,
+a.btn-pink.hover {
+  background: #e73c87;
+  color: #fff !important;
+  border: 1px solid #e73c87;
+}
+.btn-purple,
+a.btn-purple {
+  background: #8A40A7;
+  border: 1px solid #8A40A7;
+  color: #fff !important;
+}
+.btn-purple:hover,
+a.btn-purple:hover,
+.btn-purple:focus,
+a.btn-purple:focus,
+.btn-purple:active,
+a.btn-purple:active,
+.btn-purple.active,
+a.btn-purple.active,
+.btn-purple.hover,
+a.btn-purple.hover {
+  background: #7b3995;
+  color: #fff !important;
+  border: 1px solid #7b3995;
+}
+.btn-cta {
+  padding: 7px 15px;
+}
+.form-control {
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+  height: 40px;
+  border-color: #f0f0f0;
+}
+.form-control::-webkit-input-placeholder {
+  /* WebKit browsers */
+  color: #afb3bb;
+}
+.form-control:-moz-placeholder {
+  /* Mozilla Firefox 4 to 18 */
+  color: #afb3bb;
+}
+.form-control::-moz-placeholder {
+  /* Mozilla Firefox 19+ */
+  color: #afb3bb;
+}
+.form-control:-ms-input-placeholder {
+  /* Internet Explorer 10+ */
+  color: #afb3bb;
+}
+.form-control:focus {
+  border-color: #e3e3e3;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+input[type="text"],
+input[type="email"],
+input[type="password"],
+input[type="submit"],
+input[type="button"],
+textarea,
+select {
+  appearance: none;
+  /* for mobile safari */
+  -webkit-appearance: none;
+}
+#topcontrol {
+  background: #40babd;
+  color: #fff;
+  text-align: center;
+  display: inline-block;
+  width: 35px;
+  height: 35px;
+  border: none;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+  -webkit-transition: all 0.4s ease-in-out;
+  -moz-transition: all 0.4s ease-in-out;
+  -ms-transition: all 0.4s ease-in-out;
+  -o-transition: all 0.4s ease-in-out;
+  z-index: 30;
+}
+#topcontrol:hover {
+  background: #52c2c4;
+}
+#topcontrol .fa {
+  position: relative;
+  top: 3px;
+  font-size: 25px;
+}
+.video-container iframe {
+  max-width: 100%;
+}
+/* ====== Header ====== */
+.header {
+  background: #494d55;
+  color: rgba(255, 255, 255, 0.85);
+  border-top: 5px solid #40babd;
+  padding: 30px 0;
+}
+.header a {
+  color: #fff;
+}
+.branding {
+  text-transform: uppercase;
+  margin-bottom: 10px;
+}
+.branding .logo {
+  font-size: 28px;
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.branding .logo a {
+  text-decoration: none;
+}
+.branding .text-highlight {
+  color: #40babd;
+}
+.body-green .branding .text-highlight {
+  color: #75c181;
+}
+.body-blue .branding .text-highlight {
+  color: #58bbee;
+}
+.body-orange .branding .text-highlight {
+  color: #F88C30;
+}
+.body-red .branding .text-highlight {
+  color: #f77b6b;
+}
+.body-pink .branding .text-highlight {
+  color: #EA5395;
+}
+.body-purple .branding .text-highlight {
+  color: #8A40A7;
+}
+.branding .text-bold {
+  font-weight: 800;
+  color: #fff;
+}
+.branding .icon {
+  font-size: 24px;
+  color: #40babd;
+}
+.body-green .branding .icon {
+  color: #75c181;
+}
+.body-blue .branding .icon {
+  color: #58bbee;
+}
+.body-orange .branding .icon {
+  color: #F88C30;
+}
+.body-red .branding .icon {
+  color: #f77b6b;
+}
+.body-pink .branding .icon {
+  color: #EA5395;
+}
+.body-purple .branding .icon {
+  color: #8A40A7;
+}
+.breadcrumb {
+  background: none;
+  margin-bottom: 0;
+  padding: 0;
+}
+.breadcrumb li {
+  color: rgba(255, 255, 255, 0.5);
+}
+.breadcrumb li.active {
+  color: rgba(255, 255, 255, 0.5);
+}
+.breadcrumb li a {
+  color: rgba(255, 255, 255, 0.5);
+}
+.breadcrumb li a:hover {
+  color: #fff;
+}
+.breadcrumb > li + li:before {
+  color: rgba(0, 0, 0, 0.4);
+}
+/* ====== Footer ====== */
+.footer {
+  background: #26282c;
+  color: rgba(255, 255, 255, 0.6);
+  padding: 15px 0;
+}
+.footer a {
+  color: #40babd;
+}
+.footer .fa-heart {
+  color: #EA5395;
+}
+/* ======= Doc Styling ======= */
+.doc-wrapper {
+  padding: 45px 0;
+  background: #f9f9fb;
+}
+.doc-body {
+  position: relative;
+  min-height: 200px;
+}
+.doc-header {
+  margin-bottom: 30px;
+}
+.doc-header .doc-title {
+  color: #40babd;
+  margin-top: 0;
+  font-size: 36px;
+}
+.body-green .doc-header .doc-title {
+  color: #75c181;
+}
+.body-blue .doc-header .doc-title {
+  color: #58bbee;
+}
+.body-orange .doc-header .doc-title {
+  color: #F88C30;
+}
+.body-red .doc-header .doc-title {
+  color: #f77b6b;
+}
+.body-pink .doc-header .doc-title {
+  color: #EA5395;
+}
+.body-purple .doc-header .doc-title {
+  color: #8A40A7;
+}
+.doc-header .icon {
+  font-size: 30px;
+}
+.doc-header .meta {
+  color: #a2a6af;
+}
+.doc-content {
+  margin-left: 230px;
+}
+.doc-section {
+  padding-top: 15px;
+  padding-bottom: 15px;
+}
+.doc-section .section-title {
+  font-size: 26px;
+  margin-top: 0;
+  margin-bottom: 0;
+  font-weight: bold;
+  padding-bottom: 10px;
+  border-bottom: 1px solid #d7d7d7;
+}
+.doc-section h1 {
+  font-size: 24px;
+  font-weight: bold;
+}
+.doc-section h2 {
+  font-size: 22px;
+  font-weight: bold;
+}
+.doc-section h3 {
+  font-size: 20px;
+  font-weight: bold;
+}
+.doc-section h4 {
+  font-size: 18px;
+  font-weight: bold;
+}
+.doc-section h5 {
+  font-size: 16px;
+  font-weight: bold;
+}
+.doc-section h6 {
+  font-size: 14px;
+  font-weight: bold;
+}
+.section-block {
+  padding-top: 15px;
+  padding-bottom: 15px;
+}
+.section-block .block-title {
+  margin-top: 0;
+}
+.section-block .list > li {
+  margin-bottom: 10px;
+}
+.section-block .list ul > li {
+  margin-top: 5px;
+}
+.question {
+  font-weight: 400 !important;
+  color: #3aa7aa;
+}
+.question .body-green {
+  color: #63b971;
+}
+.body-blue .question {
+  color: #41b2ec;
+}
+.body-orange .question {
+  color: #f77e17;
+}
+.body-pink .question {
+  color: #e73c87;
+}
+.body-purple .question {
+  color: #7b3995;
+}
+.question .fa {
+  -webkit-opacity: 0.6;
+  -moz-opacity: 0.6;
+  opacity: 0.6;
+}
+.question .label {
+  font-size: 11px;
+  vertical-align: middle;
+}
+.answer {
+  color: #616670;
+}
+.code-block {
+  margin-top: 30px;
+  margin-bottom: 30px;
+}
+.callout-block {
+  padding: 30px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+  position: relative;
+  margin-bottom: 30px;
+}
+.callout-block a {
+  color: rgba(0, 0, 0, 0.55) !important;
+}
+.callout-block a:hover {
+  color: rgba(0, 0, 0, 0.65) !important;
+}
+.callout-block .icon-holder {
+  font-size: 30px;
+  position: absolute;
+  left: 30px;
+  top: 30px;
+  color: rgba(0, 0, 0, 0.25);
+}
+.callout-block .content {
+  margin-left: 60px;
+}
+.callout-block .content p:last-child {
+  margin-bottom: 0;
+}
+.callout-block .callout-title {
+  margin-top: 0;
+  margin-bottom: 5px;
+  color: rgba(0, 0, 0, 0.65);
+}
+.callout-info {
+  background: #58bbee;
+  color: #fff;
+}
+.callout-success {
+  background: #75c181;
+  color: #fff;
+}
+.callout-warning {
+  background: #F88C30;
+  color: #fff;
+}
+.callout-danger {
+  background: #f77b6b;
+  color: #fff;
+}
+.table > thead > tr > th {
+  border-bottom-color: #8bd6d8;
+}
+.body-green .table > thead > tr > th {
+  border-bottom-color: #bbe1c1;
+}
+.body-blue .table > thead > tr > th {
+  border-bottom-color: #b5e1f7;
+}
+.body-orange .table > thead > tr > th {
+  border-bottom-color: #fbc393;
+}
+.body-pink .table > thead > tr > th {
+  border-bottom-color: #f5aecd;
+}
+.body-purple .table > thead > tr > th {
+  border-bottom-color: #b87fce;
+}
+.table-bordered > thead > tr > th {
+  border-bottom-color: inherit;
+}
+.table-striped > tbody > tr:nth-of-type(odd) {
+  background-color: #f5f5f5;
+}
+.screenshot-holder {
+  margin-top: 15px;
+  margin-bottom: 15px;
+  position: relative;
+  text-align: center;
+}
+.screenshot-holder img {
+  border: 1px solid #f0f0f0;
+}
+.screenshot-holder .mask {
+  display: block;
+  visibility: hidden;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  background: rgba(0, 0, 0, 0.25);
+  cursor: pointer;
+  text-decoration: none;
+}
+.screenshot-holder .mask .icon {
+  color: #fff;
+  font-size: 42px;
+  display: block;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 50%;
+  margin-top: -21px;
+}
+.screenshot-holder:hover .mask {
+  visibility: visible;
+}
+.jumbotron h1 {
+  font-size: 28px;
+  margin-top: 0;
+  margin-bottom: 30px;
+}
+.author-profile {
+  margin-top: 30px;
+}
+.author-profile img {
+  width: 100px;
+  height: 100px;
+}
+.speech-bubble {
+  background: #fff;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+  padding: 30px;
+  margin-top: 20px;
+  margin-bottom: 30px;
+  position: relative;
+}
+.speech-bubble .speech-title {
+  font-size: 16px;
+}
+.jumbotron .speech-bubble p {
+  font-size: 14px;
+  font-weight: normal;
+  color: #616670;
+}
+.speech-bubble:before {
+  content: "";
+  display: inline-block;
+  position: absolute;
+  left: 50%;
+  top: -10px;
+  margin-left: -10px;
+  width: 0;
+  height: 0;
+  border-left: 10px solid transparent;
+  border-right: 10px solid transparent;
+  border-bottom: 10px solid #fff;
+}
+.card {
+  text-align: center;
+  border: 1px solid #e3e3e3;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+  margin-bottom: 30px;
+  position: relative;
+}
+.card .card-block {
+  padding: 15px;
+}
+.card .mask {
+  display: block;
+  visibility: hidden;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  background: rgba(0, 0, 0, 0.25);
+  cursor: pointer;
+  text-decoration: none;
+}
+.card .mask .icon {
+  color: #fff;
+  font-size: 42px;
+  margin-top: 25%;
+}
+.card:hover .mask {
+  visibility: visible;
+}
+/* Color Schemes */
+.body-green .header {
+  border-color: #75c181;
+}
+.body-green a {
+  color: #75c181;
+}
+.body-green a:hover {
+  color: #52b161;
+}
+.body-blue .header {
+  border-color: #58bbee;
+}
+.body-blue a {
+  color: #58bbee;
+}
+.body-blue a:hover {
+  color: #2aa8e9;
+}
+.body-orange .header {
+  border-color: #F88C30;
+}
+.body-orange a {
+  color: #F88C30;
+}
+.body-orange a:hover {
+  color: #ed7108;
+}
+.body-pink .header {
+  border-color: #EA5395;
+}
+.body-pink a {
+  color: #EA5395;
+}
+.body-pink a:hover {
+  color: #e42679;
+}
+.body-purple .header {
+  border-color: #8A40A7;
+}
+.body-purple a {
+  color: #8A40A7;
+}
+.body-purple a:hover {
+  color: #6c3282;
+}
+.body-red .header {
+  border-color: #f77b6b;
+}
+.body-red a {
+  color: #f77b6b;
+}
+.body-red a:hover {
+  color: #f4503b;
+}
+/* Sidebar */
+.doc-sidebar {
+  width: 200px;
+}
+.doc-menu {
+  list-style: none;
+  padding-left: 0;
+}
+.doc-menu > li {
+  margin-bottom: 5px;
+}
+.doc-menu > li > a {
+  display: block;
+  padding: 5px 15px;
+  border-left: 4px solid transparent;
+  color: #616670;
+}
+.doc-menu > li > a:hover,
+.doc-menu > li > a:focus {
+  color: #40babd;
+  text-decoration: none;
+  background: none;
+}
+.body-green .doc-menu > li > a:hover,
+.body-green .doc-menu > li > a:focus {
+  color: #75c181;
+}
+.body-blue .doc-menu > li > a:hover,
+.body-blue .doc-menu > li > a:focus {
+  color: #58bbee;
+}
+.body-orange .doc-menu > li > a:hover,
+.body-orange .doc-menu > li > a:focus {
+  color: #F88C30;
+}
+.body-red .doc-menu > li > a:hover,
+.body-red .doc-menu > li > a:focus {
+  color: #f77b6b;
+}
+.body-pink .doc-menu > li > a:hover,
+.body-pink .doc-menu > li > a:focus {
+  color: #EA5395;
+}
+.body-purple .doc-menu > li > a:hover,
+.body-purple .doc-menu > li > a:focus {
+  color: #8A40A7;
+}
+.doc-menu > li.active > a {
+  background: none;
+  border-left: 4px solid #40babd;
+  color: #40babd;
+  font-weight: 600;
+}
+.body-green .doc-menu > li.active > a {
+  color: #75c181;
+  border-color: #75c181;
+}
+.body-blue .doc-menu > li.active > a {
+  color: #58bbee;
+  border-color: #58bbee;
+}
+.body-orange .doc-menu > li.active > a {
+  color: #F88C30;
+  border-color: #F88C30;
+}
+.body-red .doc-menu > li.active > a {
+  color: #f77b6b;
+  border-color: #f77b6b;
+}
+.body-pink .doc-menu > li.active > a {
+  color: #EA5395;
+  border-color: #EA5395;
+}
+.body-purple .doc-menu > li.active > a {
+  color: #8A40A7;
+  border-color: #8A40A7;
+}
+.doc-sub-menu {
+  list-style: none;
+  padding-left: 0;
+}
+.doc-sub-menu > li {
+  margin-bottom: 10px;
+  font-size: 12px;
+}
+.doc-sub-menu > li:first-child {
+  padding-top: 5px;
+}
+.doc-sub-menu > li > a {
+  display: block;
+  color: #616670;
+  padding: 0;
+  padding-left: 34px;
+  background: none;
+}
+.doc-sub-menu > li > a:hover {
+  color: #40babd;
+  text-decoration: none;
+  background: none;
+}
+.body-green .doc-sub-menu > li > a:hover {
+  color: #75c181;
+}
+.body-blue .doc-sub-menu > li > a:hover {
+  color: #58bbee;
+}
+.body-orange .doc-sub-menu > li > a:hover {
+  color: #F88C30;
+}
+.body-red .doc-sub-menu > li > a:hover {
+  color: #f77b6b;
+}
+.body-pink .doc-sub-menu > li > a:hover {
+  color: #EA5395;
+}
+.body-purple .doc-sub-menu > li > a:hover {
+  color: #8A40A7;
+}
+.doc-sub-menu > li > a:focus {
+  background: none;
+}
+.doc-sub-menu > li.active > a {
+  background: none;
+  color: #40babd;
+}
+.body-green .doc-sub-menu > li.active > a {
+  color: #75c181;
+}
+.body-blue .doc-sub-menu > li.active > a {
+  color: #58bbee;
+}
+.body-orange .doc-sub-menu > li.active > a {
+  color: #F88C30;
+}
+.body-red .doc-sub-menu > li.active > a {
+  color: #f77b6b;
+}
+.body-pink .doc-sub-menu > li.active > a {
+  color: #EA5395;
+}
+.body-purple .doc-sub-menu > li.active > a {
+  color: #8A40A7;
+}
+.affix-top {
+  position: absolute;
+  top: 15px;
+}
+.affix {
+  top: 15px;
+}
+.affix,
+.affix-bottom {
+  width: 230px;
+}
+.affix-bottom {
+  position: absolute;
+}
+/* ===== Promo block ===== */
+.promo-block {
+  background: #3aa7aa;
+}
+.body-green .promo-block {
+  background: #63b971;
+}
+.body-blue .promo-block {
+  background: #41b2ec;
+}
+.body-orange .promo-block {
+  background: #f77e17;
+}
+.body-pink .promo-block {
+  background: #e73c87;
+}
+.body-purple .promo-block {
+  background: #7b3995;
+}
+.promo-block a {
+  color: rgba(0, 0, 0, 0.5);
+}
+.promo-block a:hover {
+  color: rgba(0, 0, 0, 0.6);
+}
+.promo-block .promo-block-inner {
+  padding: 45px;
+  color: #fff;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+}
+.promo-block .promo-title {
+  font-size: 20px;
+  font-weight: 800;
+  margin-top: 0;
+  margin-bottom: 45px;
+}
+.promo-block .promo-title .fa {
+  color: rgba(0, 0, 0, 0.5);
+}
+.promo-block .figure-holder-inner {
+  background: #fff;
+  margin-bottom: 30px;
+  position: relative;
+  text-align: center;
+}
+.promo-block .figure-holder-inner img {
+  border: 5px solid #fff;
+}
+.promo-block .figure-holder-inner .mask {
+  display: block;
+  visibility: hidden;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  background: rgba(255, 255, 255, 0.65);
+  cursor: pointer;
+  text-decoration: none;
+}
+.promo-block .figure-holder-inner .mask .icon {
+  color: #fff;
+  font-size: 42px;
+  display: block;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 50%;
+  margin-top: -21px;
+}
+.promo-block .figure-holder-inner .mask .icon.pink {
+  color: #EA5395;
+}
+.promo-block .figure-holder-inner:hover .mask {
+  visibility: visible;
+}
+.promo-block .content-holder-inner {
+  padding-left: 15px;
+  padding-right: 15px;
+}
+.promo-block .content-title {
+  font-size: 16px;
+  font-weight: 600;
+  margin-top: 0;
+}
+.promo-block .highlight {
+  color: rgba(0, 0, 0, 0.4);
+}
+.promo-block .btn-cta {
+  background: rgba(0, 0, 0, 0.35);
+  border: none;
+  color: #fff !important;
+  margin-bottom: 15px;
+}
+.promo-block .btn-cta:hover {
+  background: rgba(0, 0, 0, 0.5);
+  border: none;
+  color: #fff !important;
+}
+/* Extra small devices (phones, less than 768px) */
+@media (max-width: 767px) {
+  .doc-content {
+    margin-left: 0;
+  }
+  .jumbotron {
+    padding: 30px 15px;
+  }
+  .jumbotron h1 {
+    font-size: 24px;
+    margin-bottom: 15px;
+  }
+  .jumbotron p {
+    font-size: 18px;
+  }
+  .promo-block .promo-block-inner {
+    padding: 30px 15px;
+  }
+  .promo-block .content-holder-inner {
+    padding: 0;
+  }
+  .promo-block .promo-title {
+    margin-bottom: 30px;
+  }
+}
+/* Small devices (tablets, 768px and up) */
+/* Medium devices (desktops, 992px and up) */
+/* Large devices (large desktops, 1200px and up) */
+/* ======= Landing Page ======= */
+.landing-page .header {
+  background: #494d55;
+  color: rgba(255, 255, 255, 0.85);
+  padding: 60px 0;
+}
+.landing-page .header a {
+  color: #fff;
+}
+.landing-page .branding {
+  text-transform: uppercase;
+  margin-bottom: 20px;
+}
+.landing-page .branding .logo {
+  font-size: 38px;
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.landing-page .branding .text-bold {
+  font-weight: 800;
+  color: #fff;
+}
+.landing-page .branding .icon {
+  font-size: 32px;
+  color: #40babd;
+}
+.landing-page .tagline {
+  font-weight: 600;
+  font-size: 20px;
+}
+.landing-page .tagline p {
+  margin-bottom: 5px;
+}
+.landing-page .tagline .text-highlight {
+  color: #266f71;
+}
+.landing-page .fa-heart {
+  color: #EA5395;
+}
+.landing-page .cta-container {
+  margin-top: 30px;
+}
+.landing-page .social-container {
+  margin-top: 30px;
+}
+.landing-page .social-container .twitter-tweet {
+  display: inline-block;
+  margin-right: 5px;
+  position: relative;
+  top: 5px;
+}
+.landing-page .social-container .fab-like {
+  display: inline-block;
+}
+.cards-section {
+  padding: 60px 0;
+  background: #f9f9fb;
+}
+.cards-section .title {
+  margin-top: 0;
+  margin-bottom: 15px;
+  font-size: 24px;
+  font-weight: 600;
+}
+.cards-section .intro {
+  margin: 0 auto;
+  max-width: 800px;
+  margin-bottom: 60px;
+  color: #616670;
+}
+.cards-section .cards-wrapper {
+  max-width: 860px;
+  margin-left: auto;
+  margin-right: auto;
+}
+.cards-section .item {
+  margin-bottom: 30px;
+}
+.cards-section .item .icon-holder {
+  margin-bottom: 15px;
+}
+.cards-section .item .icon {
+  font-size: 36px;
+}
+.cards-section .item .title {
+  font-size: 16px;
+  font-weight: 600;
+}
+.cards-section .item .intro {
+  margin-bottom: 15px;
+}
+.cards-section .item-inner {
+  padding: 45px 30px;
+  background: #fff;
+  position: relative;
+  border: 1px solid #f0f0f0;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+}
+.cards-section .item-inner .link {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 0;
+  left: 0;
+  z-index: 1;
+  background-image: url("../images/empty.gif");
+  /* for IE8 */
+}
+.cards-section .item-inner:hover {
+  background: #f5f5f5;
+}
+.cards-section .item-primary .item-inner {
+  border-top: 3px solid #40babd;
+}
+.cards-section .item-primary .item-inner:hover .title {
+  color: #2d8284;
+}
+.cards-section .item-primary .icon {
+  color: #40babd;
+}
+.cards-section .item-green .item-inner {
+  border-top: 3px solid #75c181;
+}
+.cards-section .item-green .item-inner:hover .title {
+  color: #48a156;
+}
+.cards-section .item-green .icon {
+  color: #75c181;
+}
+.cards-section .item-blue .item-inner {
+  border-top: 3px solid #58bbee;
+}
+.cards-section .item-blue .item-inner:hover .title {
+  color: #179de2;
+}
+.cards-section .item-blue .icon {
+  color: #58bbee;
+}
+.cards-section .item-orange .item-inner {
+  border-top: 3px solid #F88C30;
+}
+.cards-section .item-orange .item-inner:hover .title {
+  color: #d46607;
+}
+.cards-section .item-orange .icon {
+  color: #F88C30;
+}
+.cards-section .item-red .item-inner {
+  border-top: 3px solid #f77b6b;
+}
+.cards-section .item-red .item-inner:hover .title {
+  color: #f33a22;
+}
+.cards-section .item-red .icon {
+  color: #f77b6b;
+}
+.cards-section .item-pink .item-inner {
+  border-top: 3px solid #EA5395;
+}
+.cards-section .item-pink .item-inner:hover .title {
+  color: #d61a6c;
+}
+.cards-section .item-pink .icon {
+  color: #EA5395;
+}
+.cards-section .item-purple .item-inner {
+  border-top: 3px solid #8A40A7;
+}
+.cards-section .item-purple .item-inner:hover .title {
+  color: #5c2b70;
+}
+.cards-section .item-purple .icon {
+  color: #8A40A7;
+}
+/* Extra small devices (phones, less than 768px) */
+@media (max-width: 767px) {
+  .cards-section .item-inner {
+    padding: 30px 15px;
+  }
+}
+/* Small devices (tablets, 768px and up) */
+/* Medium devices (desktops, 992px and up) */
+/* Large devices (large desktops, 1200px and up) */

Added: openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/images/empty.gif
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/images/empty.gif?rev=1766603&view=auto
==============================================================================
Binary file - no diff available.

Propchange: openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/images/empty.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/js/main.js
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/js/main.js?rev=1766603&view=auto
==============================================================================
--- openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/js/main.js (added)
+++ openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/js/main.js Tue Oct 25 21:27:10 2016
@@ -0,0 +1,49 @@
+$(document).ready(function() {
+	
+	/* ===== Affix Sidebar ===== */
+	/* Ref: http://getbootstrap.com/javascript/#affix-examples */
+
+    	
+	$('#doc-menu').affix({
+        offset: {
+            top: ($('#header').outerHeight(true) + $('#doc-header').outerHeight(true)) + 45,
+            bottom: ($('#footer').outerHeight(true) + $('#promo-block').outerHeight(true)) + 75
+        }
+    });
+    
+    /* Hack related to: https://github.com/twbs/bootstrap/issues/10236 */
+    $(window).on('load resize', function() {
+        $(window).trigger('scroll'); 
+    });
+
+    /* Activate scrollspy menu */
+    $('body').scrollspy({target: '#doc-nav', offset: 100});
+
+    /*
+    // Smooth scrolling
+	$('a.scrollto').on('click', function(e){
+        //store hash
+        var target = this.hash;    
+        e.preventDefault();
+		$('body').scrollTo(target, 800, {offset: 0, 'axis':'y'});
+		
+	});
+	*/
+	
+    
+    /* ======= jQuery Responsive equal heights plugin ======= */
+    /* Ref: https://github.com/liabru/jquery-match-height */
+    
+     $('#cards-wrapper .item-inner').matchHeight();
+     $('#showcase .card').matchHeight();
+     
+    /* Bootstrap lightbox */
+    /* Ref: http://ashleydw.github.io/lightbox/ */
+
+    $(document).delegate('*[data-toggle="lightbox"]', 'click', function(e) {
+        e.preventDefault();
+        $(this).ekkoLightbox();
+    });    
+
+
+});
\ No newline at end of file

Added: openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css?rev=1766603&view=auto
==============================================================================
--- openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css (added)
+++ openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css Tue Oct 25 21:27:10 2016
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap v3.3.6 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

[... 4 lines stripped ...]
Propchange: openwebbeans/microwave/trunk/microwave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css
------------------------------------------------------------------------------
    svn:executable = *