NIFI-280 This closes #19 Updated poms for versions after merge.  Minor doc 
removals.  Awesome PR!


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/e9d31f5d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/e9d31f5d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/e9d31f5d

Branch: refs/heads/NIFI-353
Commit: e9d31f5d994e5d6d89edf8465942167647959abc
Parents: cadfc67
Author: joewitt <[email protected]>
Authored: Tue Mar 17 23:42:22 2015 -0400
Committer: joewitt <[email protected]>
Committed: Tue Mar 17 23:42:22 2015 -0400

----------------------------------------------------------------------
 nifi/nifi-assembly/NOTICE                       |   5 +
 .../nifi-framework/nifi-documentation/pom.xml   |  92 +--
 .../ConfigurableComponentInitializer.java       |  16 +-
 .../apache/nifi/documentation/DocGenerator.java | 261 ++++---
 .../nifi/documentation/DocumentationWriter.java |   6 +-
 .../html/HtmlDocumentationWriter.java           | 718 +++++++++----------
 .../html/HtmlProcessorDocumentationWriter.java  |  46 +-
 .../init/ControllerServiceInitializer.java      |  12 +-
 .../init/ProcessorInitializer.java              |  12 +-
 .../init/ReportingTaskingInitializer.java       |  12 +-
 ...kControllerServiceInitializationContext.java |  18 +-
 .../mock/MockControllerServiceLookup.java       |  42 +-
 .../MockProcessorInitializationContext.java     |  26 +-
 .../MockReportingInitializationContext.java     |  60 +-
 .../documentation/example/NakedProcessor.java   |  17 +-
 .../nifi-framework/pom.xml                      |   2 +-
 .../nifi-framework-bundle/pom.xml               |   2 +-
 .../processors/standard/DistributeLoad.java     |   2 +-
 .../processors/standard/HandleHttpRequest.java  |   7 +-
 .../additionalDetails.html                      |  42 +-
 .../additionalDetails.html                      |  58 ++
 .../index.html                                  | 155 ----
 .../additionalDetails.html                      | 222 +++---
 .../index.html                                  | 100 ---
 .../additionalDetails.html                      | 127 ++++
 .../index.html                                  | 255 -------
 .../additionalDetails.html                      |  57 ++
 .../index.html                                  | 112 ---
 .../additionalDetails.html                      |  88 +--
 .../additionalDetails.html                      |   2 +-
 .../additionalDetails.html                      |   2 +-
 .../additionalDetails.html                      |   2 +-
 .../additionalDetails.html                      |  24 +-
 .../additionalDetails.html                      |   4 +-
 .../additionalDetails.html                      |   2 +-
 .../additionalDetails.html                      |   2 +-
 .../additionalDetails.html                      |   2 +-
 .../additionalDetails.html                      |   2 +-
 .../index.html                                  |  85 ---
 39 files changed, 1067 insertions(+), 1632 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-assembly/NOTICE
----------------------------------------------------------------------
diff --git a/nifi/nifi-assembly/NOTICE b/nifi/nifi-assembly/NOTICE
index 4ead623..8d7db8d 100644
--- a/nifi/nifi-assembly/NOTICE
+++ b/nifi/nifi-assembly/NOTICE
@@ -181,6 +181,11 @@ The following binary components are provided under the 
Apache Software License v
       Apache log4j
       Copyright 2007 The Apache Software Foundation
 
+  (ASLv2) Apache Tika
+    The following NOTICE information applies:
+      Apache Tika Core
+      Copyright 2007-2015 The Apache Software Foundation
+
   (ASLv2) Apache Commons Configuration
     The following NOTICE information applies:
       Apache Commons Configuration

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/pom.xml
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/pom.xml
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/pom.xml
index f35c8cd..e522d30 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/pom.xml
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/pom.xml
@@ -1,49 +1,49 @@
 <?xml version="1.0"?>
 <project
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";
-       xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-       <!-- 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. -->
-       <modelVersion>4.0.0</modelVersion>
-       <parent>
-               <groupId>org.apache.nifi</groupId>
-               <artifactId>nifi-framework</artifactId>
-               <version>0.0.2-incubating-SNAPSHOT</version>
-       </parent>
-       <artifactId>nifi-documentation</artifactId>
-       <dependencies>
-               <dependency>
-                       <groupId>org.apache.nifi</groupId>
-                       <artifactId>nifi-nar-utils</artifactId>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.nifi</groupId>
-                       <artifactId>nifi-api</artifactId>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.nifi</groupId>
-                       <artifactId>nifi-properties</artifactId>
-               </dependency>
-               <dependency>
-                       <groupId>commons-io</groupId>
-                       <artifactId>commons-io</artifactId>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.commons</groupId>
-                       <artifactId>commons-lang3</artifactId>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.nifi</groupId>
-                       <artifactId>nifi-processor-utils</artifactId>
-                       <scope>test</scope>
-               </dependency>
-       </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";
+    xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+    <!-- 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. -->
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.nifi</groupId>
+        <artifactId>nifi-framework</artifactId>
+        <version>0.1.0-incubating-SNAPSHOT</version>
+    </parent>
+    <artifactId>nifi-documentation</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-nar-utils</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-properties</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-processor-utils</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/ConfigurableComponentInitializer.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/ConfigurableComponentInitializer.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/ConfigurableComponentInitializer.java
index 164d212..bd07ab5 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/ConfigurableComponentInitializer.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/ConfigurableComponentInitializer.java
@@ -27,12 +27,12 @@ import org.apache.nifi.reporting.InitializationException;
  */
 public interface ConfigurableComponentInitializer {
 
-       /**
-        * Initializes a configurable component to the point that you can call
-        * getPropertyDescriptors() on it
-        * 
-        * @param component the component to initialize
-        * @throws InitializationException if the component could not be 
initialized
-        */
-       void initialize(ConfigurableComponent component) throws 
InitializationException;
+    /**
+     * Initializes a configurable component to the point that you can call
+     * getPropertyDescriptors() on it
+     *
+     * @param component the component to initialize
+     * @throws InitializationException if the component could not be 
initialized
+     */
+    void initialize(ConfigurableComponent component) throws 
InitializationException;
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/DocGenerator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/DocGenerator.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/DocGenerator.java
index 157d95e..8a53f00 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/DocGenerator.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/DocGenerator.java
@@ -43,140 +43,137 @@ import org.slf4j.LoggerFactory;
 /**
  * Uses the ExtensionManager to get a list of Processor, ControllerService, and
  * Reporting Task classes that were loaded and generate documentation for them.
- * 
+ *
  *
  */
 public class DocGenerator {
 
-       private static final Logger logger = 
LoggerFactory.getLogger(DocGenerator.class);
-
-       /**
-        * Generates documentation into the work/docs dir specified by
-        * NiFiProperties.
-        * 
-        * @param properties
-        */
-       public static void generate(final NiFiProperties properties) {
-               @SuppressWarnings("rawtypes")
-               final Set<Class> extensionClasses = new HashSet<>();
-               
extensionClasses.addAll(ExtensionManager.getExtensions(Processor.class));
-               
extensionClasses.addAll(ExtensionManager.getExtensions(ControllerService.class));
-               
extensionClasses.addAll(ExtensionManager.getExtensions(ReportingTask.class));
-
-               final File explodedNiFiDocsDir = 
properties.getComponentDocumentationWorkingDirectory();
-
-               logger.debug("Generating documentation for: " + 
extensionClasses.size() + " components in: "
-                               + explodedNiFiDocsDir);
-
-               for (final Class<?> extensionClass : extensionClasses) {
-                       if 
(ConfigurableComponent.class.isAssignableFrom(extensionClass)) {
-                               final Class<? extends ConfigurableComponent> 
componentClass = extensionClass
-                                               
.asSubclass(ConfigurableComponent.class);
-                               try {
-                                       logger.debug("Documenting: " + 
componentClass);
-                                       document(explodedNiFiDocsDir, 
componentClass);
-                               } catch (Exception e) {
-                                       logger.warn("Unable to document: " + 
componentClass);
-                               }
-                       }
-               }
-       }
-
-       /**
-        * Generates the documentation for a particular configurable comopnent. 
Will
-        * check to see if an "additionalDetails.html" file exists and will link
-        * that from the generated documentation.
-        * 
-        * @param docsDir
-        *            the work\docs\components dir to stick component 
documentation
-        *            in
-        * @param componentClass
-        *            the class to document
-        * @throws InstantiationException
-        * @throws IllegalAccessException
-        * @throws IOException
-        * @throws InitializationException
-        */
-       private static void document(final File docsDir, final Class<? extends 
ConfigurableComponent> componentClass)
-                       throws InstantiationException, IllegalAccessException, 
IOException, InitializationException {
-
-               final ConfigurableComponent component = 
componentClass.newInstance();
-               final ConfigurableComponentInitializer initializer = 
getComponentInitializer(componentClass);
-               initializer.initialize(component);
-
-               final DocumentationWriter writer = 
getDocumentWriter(componentClass);
-
-               final File directory = new File(docsDir, 
componentClass.getCanonicalName());
-               directory.mkdirs();
-
-               final File baseDocumenationFile = new File(directory, 
"index.html");
-               if (baseDocumenationFile.exists()) {
-                       logger.warn(baseDocumenationFile + " already exists, 
overwriting!");
-               }
-
-               try (final OutputStream output = new BufferedOutputStream(new 
FileOutputStream(baseDocumenationFile))) {
-                       writer.write(component, output, 
hasAdditionalInfo(directory));
-               }
-       }
-
-       /**
-        * Returns the DocumentationWriter for the type of component. Currently
-        * Processor, ControllerService, and ReportingTask are supported.
-        * 
-        * @param componentClass
-        *            the class that requires a DocumentationWriter
-        * @return a DocumentationWriter capable of generating documentation for
-        *         that specific type of class
-        */
-       private static DocumentationWriter getDocumentWriter(final Class<? 
extends ConfigurableComponent> componentClass) {
-               if (Processor.class.isAssignableFrom(componentClass)) {
-                       return new HtmlProcessorDocumentationWriter();
-               } else if 
(ControllerService.class.isAssignableFrom(componentClass)) {
-                       return new HtmlDocumentationWriter();
-               } else if 
(ReportingTask.class.isAssignableFrom(componentClass)) {
-                       return new HtmlDocumentationWriter();
-               }
-
-               return null;
-       }
-
-       /**
-        * Returns a ConfigurableComponentInitializer for the type of component.
-        * Currently Processor, ControllerService and ReportingTask are 
supported.
-        * 
-        * @param componentClass
-        *            the class that requires a ConfigurableComponentInitializer
-        * @return a ConfigurableComponentInitializer capable of initializing 
that
-        *         specific type of class
-        */
-       private static ConfigurableComponentInitializer getComponentInitializer(
-                       final Class<? extends ConfigurableComponent> 
componentClass) {
-               if (Processor.class.isAssignableFrom(componentClass)) {
-                       return new ProcessorInitializer();
-               } else if 
(ControllerService.class.isAssignableFrom(componentClass)) {
-                       return new ControllerServiceInitializer();
-               } else if 
(ReportingTask.class.isAssignableFrom(componentClass)) {
-                       return new ReportingTaskingInitializer();
-               }
-
-               return null;
-       }
-
-       /**
-        * Checks to see if a directory to write to has an 
additionalDetails.html in
-        * it already.
-        * 
-        * @param directory
-        * @return true if additionalDetails.html exists, false otherwise.
-        */
-       private static boolean hasAdditionalInfo(File directory) {
-               return directory.list(new FilenameFilter() {
-
-                       @Override
-                       public boolean accept(File dir, String name) {
-                               return 
name.equalsIgnoreCase(HtmlDocumentationWriter.ADDITIONAL_DETAILS_HTML);
-                       }
-
-               }).length > 0;
-       }
+    private static final Logger logger = 
LoggerFactory.getLogger(DocGenerator.class);
+
+    /**
+     * Generates documentation into the work/docs dir specified by
+     * NiFiProperties.
+     *
+     * @param properties
+     */
+    public static void generate(final NiFiProperties properties) {
+        @SuppressWarnings("rawtypes")
+        final Set<Class> extensionClasses = new HashSet<>();
+        
extensionClasses.addAll(ExtensionManager.getExtensions(Processor.class));
+        
extensionClasses.addAll(ExtensionManager.getExtensions(ControllerService.class));
+        
extensionClasses.addAll(ExtensionManager.getExtensions(ReportingTask.class));
+
+        final File explodedNiFiDocsDir = 
properties.getComponentDocumentationWorkingDirectory();
+
+        logger.debug("Generating documentation for: " + 
extensionClasses.size() + " components in: "
+                + explodedNiFiDocsDir);
+
+        for (final Class<?> extensionClass : extensionClasses) {
+            if (ConfigurableComponent.class.isAssignableFrom(extensionClass)) {
+                final Class<? extends ConfigurableComponent> componentClass = 
extensionClass
+                        .asSubclass(ConfigurableComponent.class);
+                try {
+                    logger.debug("Documenting: " + componentClass);
+                    document(explodedNiFiDocsDir, componentClass);
+                } catch (Exception e) {
+                    logger.warn("Unable to document: " + componentClass);
+                }
+            }
+        }
+    }
+
+    /**
+     * Generates the documentation for a particular configurable comopnent. 
Will
+     * check to see if an "additionalDetails.html" file exists and will link
+     * that from the generated documentation.
+     *
+     * @param docsDir the work\docs\components dir to stick component
+     * documentation in
+     * @param componentClass the class to document
+     * @throws InstantiationException
+     * @throws IllegalAccessException
+     * @throws IOException
+     * @throws InitializationException
+     */
+    private static void document(final File docsDir, final Class<? extends 
ConfigurableComponent> componentClass)
+            throws InstantiationException, IllegalAccessException, 
IOException, InitializationException {
+
+        final ConfigurableComponent component = componentClass.newInstance();
+        final ConfigurableComponentInitializer initializer = 
getComponentInitializer(componentClass);
+        initializer.initialize(component);
+
+        final DocumentationWriter writer = getDocumentWriter(componentClass);
+
+        final File directory = new File(docsDir, 
componentClass.getCanonicalName());
+        directory.mkdirs();
+
+        final File baseDocumenationFile = new File(directory, "index.html");
+        if (baseDocumenationFile.exists()) {
+            logger.warn(baseDocumenationFile + " already exists, 
overwriting!");
+        }
+
+        try (final OutputStream output = new BufferedOutputStream(new 
FileOutputStream(baseDocumenationFile))) {
+            writer.write(component, output, hasAdditionalInfo(directory));
+        }
+    }
+
+    /**
+     * Returns the DocumentationWriter for the type of component. Currently
+     * Processor, ControllerService, and ReportingTask are supported.
+     *
+     * @param componentClass the class that requires a DocumentationWriter
+     * @return a DocumentationWriter capable of generating documentation for
+     * that specific type of class
+     */
+    private static DocumentationWriter getDocumentWriter(final Class<? extends 
ConfigurableComponent> componentClass) {
+        if (Processor.class.isAssignableFrom(componentClass)) {
+            return new HtmlProcessorDocumentationWriter();
+        } else if (ControllerService.class.isAssignableFrom(componentClass)) {
+            return new HtmlDocumentationWriter();
+        } else if (ReportingTask.class.isAssignableFrom(componentClass)) {
+            return new HtmlDocumentationWriter();
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns a ConfigurableComponentInitializer for the type of component.
+     * Currently Processor, ControllerService and ReportingTask are supported.
+     *
+     * @param componentClass the class that requires a
+     * ConfigurableComponentInitializer
+     * @return a ConfigurableComponentInitializer capable of initializing that
+     * specific type of class
+     */
+    private static ConfigurableComponentInitializer getComponentInitializer(
+            final Class<? extends ConfigurableComponent> componentClass) {
+        if (Processor.class.isAssignableFrom(componentClass)) {
+            return new ProcessorInitializer();
+        } else if (ControllerService.class.isAssignableFrom(componentClass)) {
+            return new ControllerServiceInitializer();
+        } else if (ReportingTask.class.isAssignableFrom(componentClass)) {
+            return new ReportingTaskingInitializer();
+        }
+
+        return null;
+    }
+
+    /**
+     * Checks to see if a directory to write to has an additionalDetails.html 
in
+     * it already.
+     *
+     * @param directory
+     * @return true if additionalDetails.html exists, false otherwise.
+     */
+    private static boolean hasAdditionalInfo(File directory) {
+        return directory.list(new FilenameFilter() {
+
+            @Override
+            public boolean accept(File dir, String name) {
+                return 
name.equalsIgnoreCase(HtmlDocumentationWriter.ADDITIONAL_DETAILS_HTML);
+            }
+
+        }).length > 0;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/DocumentationWriter.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/DocumentationWriter.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/DocumentationWriter.java
index 5a3c5d8..d178636 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/DocumentationWriter.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/DocumentationWriter.java
@@ -23,11 +23,11 @@ import org.apache.nifi.components.ConfigurableComponent;
 
 /**
  * Generates documentation for an instance of a ConfigurableComponent
- * 
+ *
  *
  */
 public interface DocumentationWriter {
 
-       void write(ConfigurableComponent configurableComponent, OutputStream 
streamToWriteTo,
-                       boolean includesAdditionalDocumentation) throws 
IOException;
+    void write(ConfigurableComponent configurableComponent, OutputStream 
streamToWriteTo,
+            boolean includesAdditionalDocumentation) throws IOException;
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlDocumentationWriter.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlDocumentationWriter.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlDocumentationWriter.java
index c192759..b547934 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlDocumentationWriter.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlDocumentationWriter.java
@@ -38,380 +38,354 @@ import org.apache.nifi.documentation.DocumentationWriter;
  * Generates HTML documentation for a ConfigurableComponent. This class is used
  * to generate documentation for ControllerService and ReportingTask because
  * they have no additional information.
- * 
+ *
  *
  */
 public class HtmlDocumentationWriter implements DocumentationWriter {
 
-       /**
-        * The filename where additional user specified information may be 
stored.
-        */
-       public static final String ADDITIONAL_DETAILS_HTML = 
"additionalDetails.html";
-
-       @Override
-       public void write(final ConfigurableComponent configurableComponent, 
final OutputStream streamToWriteTo,
-                       final boolean includesAdditionalDocumentation) throws 
IOException {
-
-               try {
-                       XMLStreamWriter xmlStreamWriter = 
XMLOutputFactory.newInstance().createXMLStreamWriter(
-                                       streamToWriteTo, "UTF-8");
-                       xmlStreamWriter.writeDTD("<!DOCTYPE html>");
-                       xmlStreamWriter.writeStartElement("html");
-                       xmlStreamWriter.writeAttribute("lang", "en");
-                       writeHead(configurableComponent, xmlStreamWriter);
-                       writeBody(configurableComponent, xmlStreamWriter, 
includesAdditionalDocumentation);
-                       xmlStreamWriter.writeEndElement();
-                       xmlStreamWriter.close();
-               } catch (XMLStreamException | FactoryConfigurationError e) {
-                       throw new IOException("Unable to create 
XMLOutputStream", e);
-               }
-       }
-
-       /**
-        * Writes the head portion of the HTML documentation.
-        * 
-        * @param configurableComponent
-        *            the component to describe
-        * @param xmlStreamWriter
-        *            the stream to write to
-        * @throws XMLStreamException
-        *             thrown if there was a problem writing to the stream
-        */
-       protected void writeHead(final ConfigurableComponent 
configurableComponent,
-                       final XMLStreamWriter xmlStreamWriter) throws 
XMLStreamException {
-               xmlStreamWriter.writeStartElement("head");
-               xmlStreamWriter.writeStartElement("meta");
-               xmlStreamWriter.writeAttribute("charset", "utf-8");
-               xmlStreamWriter.writeEndElement();
-               writeSimpleElement(xmlStreamWriter, "title", 
getTitle(configurableComponent));
-
-               xmlStreamWriter.writeStartElement("link");
-               xmlStreamWriter.writeAttribute("rel", "stylesheet");
-               xmlStreamWriter.writeAttribute("href", 
"../../css/component-usage.css");
-               xmlStreamWriter.writeAttribute("type", "text/css");
-               xmlStreamWriter.writeEndElement();
-
-               xmlStreamWriter.writeEndElement();
-       }
-
-       /**
-        * Gets the class name of the component.
-        * 
-        * @param configurableComponent
-        *            the component to describe
-        * @return the class name of the component
-        */
-       protected String getTitle(final ConfigurableComponent 
configurableComponent) {
-               return configurableComponent.getClass().getSimpleName();
-       }
-
-       /**
-        * Writes the body section of the documentation, this consists of the
-        * component description, the tags, and the PropertyDescriptors.
-        * 
-        * @param configurableComponent
-        *            the component to describe
-        * @param xmlStreamWriter
-        *            the stream writer
-        * @param hasAdditionalDetails
-        *            whether there are additional details present or not
-        * @throws XMLStreamException
-        *             thrown if there was a problem writing to the XML stream
-        */
-       private final void writeBody(final ConfigurableComponent 
configurableComponent,
-                       final XMLStreamWriter xmlStreamWriter, final boolean 
hasAdditionalDetails)
-                       throws XMLStreamException {
-               xmlStreamWriter.writeStartElement("body");
-               writeDescription(configurableComponent, xmlStreamWriter, 
hasAdditionalDetails);
-               writeTags(configurableComponent, xmlStreamWriter);
-               writeProperties(configurableComponent, xmlStreamWriter);
-               writeAdditionalBodyInfo(configurableComponent, xmlStreamWriter);
-               xmlStreamWriter.writeEndElement();
-       }
-
-       /**
-        * This method may be overridden by sub classes to write additional
-        * information to the body of the documentation.
-        * 
-        * @param configurableComponent
-        *            the component to describe
-        * @param xmlStreamWriter
-        *            the stream writer
-        * @throws XMLStreamException
-        *             thrown if there was a problem writing to the XML stream
-        */
-       protected void writeAdditionalBodyInfo(final ConfigurableComponent 
configurableComponent,
-                       final XMLStreamWriter xmlStreamWriter) throws 
XMLStreamException {
-       }
-
-       /**
-        * Writes the tags attached to a ConfigurableComponent.
-        * 
-        * @param configurableComponent
-        * @param xmlStreamWriter
-        * @throws XMLStreamException
-        */
-       private void writeTags(final ConfigurableComponent 
configurableComponent,
-                       final XMLStreamWriter xmlStreamWriter) throws 
XMLStreamException {
-               final Tags tags = 
configurableComponent.getClass().getAnnotation(Tags.class);
-               xmlStreamWriter.writeStartElement("h3");
-               xmlStreamWriter.writeCharacters("Tags: ");
-               xmlStreamWriter.writeEndElement();
-               xmlStreamWriter.writeStartElement("p");
-               if (tags != null) {
-                       final String tagString = StringUtils.join(tags.value(), 
", ");
-                       xmlStreamWriter.writeCharacters(tagString);
-               } else {
-                       xmlStreamWriter.writeCharacters("None.");
-               }
-               xmlStreamWriter.writeEndElement();
-
-       }
-
-       /**
-        * Writes a description of the configurable component.
-        * 
-        * @param configurableComponent
-        *            the component to describe
-        * @param xmlStreamWriter
-        *            the stream writer
-        * @param hasAdditionalDetails
-        *            whether there are additional details available as
-        *            'additionalDetails.html'
-        * @throws XMLStreamException
-        *             thrown if there was a problem writing to the XML stream
-        */
-       protected void writeDescription(final ConfigurableComponent 
configurableComponent,
-                       final XMLStreamWriter xmlStreamWriter, final boolean 
hasAdditionalDetails)
-                       throws XMLStreamException {
-               writeSimpleElement(xmlStreamWriter, "h2", "Description: ");
-               writeSimpleElement(xmlStreamWriter, "p", 
getDescription(configurableComponent));
-               if (hasAdditionalDetails) {
-                       xmlStreamWriter.writeStartElement("p");
-
-                       writeLink(xmlStreamWriter, "Additional Details...", 
ADDITIONAL_DETAILS_HTML);
-
-                       xmlStreamWriter.writeEndElement();
-               }
-       }
-
-       /**
-        * Gets a description of the ConfigurableComponent using the
-        * CapabilityDescription annotation.
-        * 
-        * @param configurableComponent
-        *            the component to describe
-        * @return a description of the configurableComponent
-        */
-       protected String getDescription(final ConfigurableComponent 
configurableComponent) {
-               final CapabilityDescription capabilityDescription = 
configurableComponent.getClass().getAnnotation(
-                               CapabilityDescription.class);
-
-               final String description;
-               if (capabilityDescription != null) {
-                       description = capabilityDescription.value();
-               } else {
-                       description = "No description provided.";
-               }
-
-               return description;
-       }
-
-       /**
-        * Writes the PropertyDescriptors out as a table.
-        * 
-        * @param configurableComponent
-        *            the component to describe
-        * @param xmlStreamWriter
-        *            the stream writer
-        * @throws XMLStreamException
-        *             thrown if there was a problem writing to the XML Stream
-        */
-       protected void writeProperties(final ConfigurableComponent 
configurableComponent,
-                       final XMLStreamWriter xmlStreamWriter) throws 
XMLStreamException {
-               writeSimpleElement(xmlStreamWriter, "h3", "Properties: ");
-               xmlStreamWriter.writeStartElement("p");
-               xmlStreamWriter.writeCharacters("In the list below, the names 
of required properties appear in ");
-               writeSimpleElement(xmlStreamWriter, "strong", "bold");
-               xmlStreamWriter.writeCharacters(". Any "
-                               + "other properties (not in bold) are 
considered optional. The table also "
-                               + "indicates any default values, whether a 
property supports the ");
-               writeLink(xmlStreamWriter, "NiFi Expression Language",
-                               "../../html/expression-language-guide.html");
-               xmlStreamWriter.writeCharacters(", and whether a property is 
considered "
-                               + "\"sensitive\", meaning that its value will 
be encrypted. Before entering a "
-                               + "value in a sensitive property, ensure that 
the ");
-               writeSimpleElement(xmlStreamWriter, "strong", 
"nifi.properties");
-               xmlStreamWriter.writeCharacters(" file has " + "an entry for 
the property ");
-               writeSimpleElement(xmlStreamWriter, "strong", 
"nifi.sensitive.props.key");
-               xmlStreamWriter.writeCharacters(".");
-               xmlStreamWriter.writeEndElement();
-
-
-               List<PropertyDescriptor> properties = 
configurableComponent.getPropertyDescriptors();
-               if (properties.size() > 0) {
-                       xmlStreamWriter.writeStartElement("table");
-
-                       // write the header row
-                       xmlStreamWriter.writeStartElement("tr");
-                       writeSimpleElement(xmlStreamWriter, "th", "Name");
-                       writeSimpleElement(xmlStreamWriter, "th", "Default 
Value");
-                       writeSimpleElement(xmlStreamWriter, "th", "Valid 
Values");
-                       writeSimpleElement(xmlStreamWriter, "th", 
"Description");
-                       xmlStreamWriter.writeEndElement();
-
-                       // write the individual properties
-                       for (PropertyDescriptor property : properties) {
-                               xmlStreamWriter.writeStartElement("tr");
-                               xmlStreamWriter.writeStartElement("td");
-                               if (property.isRequired()) {
-                                       writeSimpleElement(xmlStreamWriter, 
"strong", property.getDisplayName());
-                               } else {
-                                       
xmlStreamWriter.writeCharacters(property.getDisplayName());
-                               }
-
-                               xmlStreamWriter.writeEndElement();
-                               writeSimpleElement(xmlStreamWriter, "td", 
property.getDefaultValue());
-                               xmlStreamWriter.writeStartElement("td");
-                               writeValidValues(xmlStreamWriter, property);
-                               xmlStreamWriter.writeEndElement();
-                               xmlStreamWriter.writeStartElement("td");
-                               if (property.getDescription() != null && 
property.getDescription().trim().length() > 0) {
-                                       
xmlStreamWriter.writeCharacters(property.getDescription());
-                               } else {
-                                       xmlStreamWriter.writeCharacters("No 
Description Provided.");
-                               }
-
-                               if (property.isSensitive()) {
-                                       xmlStreamWriter.writeEmptyElement("br");
-                                       writeSimpleElement(xmlStreamWriter, 
"strong", "Sensitive Property: true");
-                               }
-
-                               if (property.isExpressionLanguageSupported()) {
-                                       xmlStreamWriter.writeEmptyElement("br");
-                                       writeSimpleElement(xmlStreamWriter, 
"strong", "Supports Expression Language: true");
-                               }
-                               xmlStreamWriter.writeEndElement();
-
-                               xmlStreamWriter.writeEndElement();
-                       }
-
-                       // TODO support dynamic properties...
-                       xmlStreamWriter.writeEndElement();
-
-               } else {
-                       writeSimpleElement(xmlStreamWriter, "p", "This 
component has no required or optional properties.");
-               }
-       }
-
-       private void writeValidValueDescription(XMLStreamWriter 
xmlStreamWriter, String description)
-                       throws XMLStreamException {
-               xmlStreamWriter.writeCharacters(" ");
-               xmlStreamWriter.writeStartElement("img");
-               xmlStreamWriter.writeAttribute("src", 
"../../html/images/iconInfo.png");
-               xmlStreamWriter.writeAttribute("alt", description);
-               xmlStreamWriter.writeAttribute("title", description);
-               xmlStreamWriter.writeEndElement();
-
-       }
-
-       /**
-        * Interrogates a PropertyDescriptor to get a list of AllowableValues, 
if
-        * there are none, nothing is written to the stream.
-        * 
-        * @param xmlStreamWriter
-        *            the stream writer to use
-        * @param property
-        *            the property to describe
-        * @throws XMLStreamException
-        *             thrown if there was a problem writing to the XML Stream
-        */
-       protected void writeValidValues(XMLStreamWriter xmlStreamWriter, 
PropertyDescriptor property)
-                       throws XMLStreamException {
-               if (property.getAllowableValues() != null && 
property.getAllowableValues().size() > 0) {
-                       xmlStreamWriter.writeStartElement("ul");
-                       for (AllowableValue value : 
property.getAllowableValues()) {
-                               xmlStreamWriter.writeStartElement("li");
-                               
xmlStreamWriter.writeCharacters(value.getDisplayName());
-
-                               if (value.getDescription() != null) {
-                                       
writeValidValueDescription(xmlStreamWriter, value.getDescription());
-                               }
-                               xmlStreamWriter.writeEndElement();
-
-                       }
-                       xmlStreamWriter.writeEndElement();
-               } else if (property.getControllerServiceDefinition() != null) {
-                       Class<? extends ControllerService> 
controllerServiceClass = property.getControllerServiceDefinition();
-                       writeSimpleElement(xmlStreamWriter, "strong", 
"Controller Service: ");
-                       xmlStreamWriter.writeEmptyElement("br");
-                       
xmlStreamWriter.writeCharacters(controllerServiceClass.getSimpleName());
-               }
-       }
-
-       /**
-        * Writes a begin element, then text, then end element for the element 
of a
-        * users choosing. Example: &lt;p&gt;text&lt;/p&gt;
-        * 
-        * @param writer
-        *            the stream writer to use
-        * @param elementName
-        *            the name of the element
-        * @param characters
-        *            the characters to insert into the element
-        * @param strong
-        *            whether the characters should be strong or not.
-        * @throws XMLStreamException
-        *             thrown if there was a problem writing to the stream.
-        */
-       protected final static void writeSimpleElement(final XMLStreamWriter 
writer, final String elementName,
-                       final String characters, boolean strong) throws 
XMLStreamException {
-               writer.writeStartElement(elementName);
-               if (strong) {
-                       writer.writeStartElement("strong");
-               }
-               writer.writeCharacters(characters);
-               if (strong) {
-                       writer.writeEndElement();
-               }
-               writer.writeEndElement();
-       }
-
-       /**
-        * Writes a begin element, then text, then end element for the element 
of a
-        * users choosing. Example: &lt;p&gt;text&lt;/p&gt;
-        * 
-        * @param writer
-        *            the stream writer to use
-        * @param elementName
-        *            the name of the element
-        * @param characters
-        *            the characters to insert into the element
-        * @throws XMLStreamException
-        *             thrown if there was a problem writing to the stream
-        */
-       protected final static void writeSimpleElement(final XMLStreamWriter 
writer, final String elementName,
-                       final String characters) throws XMLStreamException {
-               writeSimpleElement(writer, elementName, characters, false);
-       }
-
-       /**
-        * A helper method to write a link
-        * 
-        * @param xmlStreamWriter
-        *            the stream to write to
-        * @param text
-        *            the text of the link
-        * @param location
-        *            the location of the link
-        * @throws XMLStreamException
-        *             thrown if there was a problem writing to the stream
-        */
-       protected void writeLink(final XMLStreamWriter xmlStreamWriter, final 
String text, final String location)
-                       throws XMLStreamException {
-               xmlStreamWriter.writeStartElement("a");
-               xmlStreamWriter.writeAttribute("href", location);
-               xmlStreamWriter.writeCharacters(text);
-               xmlStreamWriter.writeEndElement();
-       }
+    /**
+     * The filename where additional user specified information may be stored.
+     */
+    public static final String ADDITIONAL_DETAILS_HTML = 
"additionalDetails.html";
+
+    @Override
+    public void write(final ConfigurableComponent configurableComponent, final 
OutputStream streamToWriteTo,
+            final boolean includesAdditionalDocumentation) throws IOException {
+
+        try {
+            XMLStreamWriter xmlStreamWriter = 
XMLOutputFactory.newInstance().createXMLStreamWriter(
+                    streamToWriteTo, "UTF-8");
+            xmlStreamWriter.writeDTD("<!DOCTYPE html>");
+            xmlStreamWriter.writeStartElement("html");
+            xmlStreamWriter.writeAttribute("lang", "en");
+            writeHead(configurableComponent, xmlStreamWriter);
+            writeBody(configurableComponent, xmlStreamWriter, 
includesAdditionalDocumentation);
+            xmlStreamWriter.writeEndElement();
+            xmlStreamWriter.close();
+        } catch (XMLStreamException | FactoryConfigurationError e) {
+            throw new IOException("Unable to create XMLOutputStream", e);
+        }
+    }
+
+    /**
+     * Writes the head portion of the HTML documentation.
+     *
+     * @param configurableComponent the component to describe
+     * @param xmlStreamWriter the stream to write to
+     * @throws XMLStreamException thrown if there was a problem writing to the
+     * stream
+     */
+    protected void writeHead(final ConfigurableComponent configurableComponent,
+            final XMLStreamWriter xmlStreamWriter) throws XMLStreamException {
+        xmlStreamWriter.writeStartElement("head");
+        xmlStreamWriter.writeStartElement("meta");
+        xmlStreamWriter.writeAttribute("charset", "utf-8");
+        xmlStreamWriter.writeEndElement();
+        writeSimpleElement(xmlStreamWriter, "title", 
getTitle(configurableComponent));
+
+        xmlStreamWriter.writeStartElement("link");
+        xmlStreamWriter.writeAttribute("rel", "stylesheet");
+        xmlStreamWriter.writeAttribute("href", 
"../../css/component-usage.css");
+        xmlStreamWriter.writeAttribute("type", "text/css");
+        xmlStreamWriter.writeEndElement();
+
+        xmlStreamWriter.writeEndElement();
+    }
+
+    /**
+     * Gets the class name of the component.
+     *
+     * @param configurableComponent the component to describe
+     * @return the class name of the component
+     */
+    protected String getTitle(final ConfigurableComponent 
configurableComponent) {
+        return configurableComponent.getClass().getSimpleName();
+    }
+
+    /**
+     * Writes the body section of the documentation, this consists of the
+     * component description, the tags, and the PropertyDescriptors.
+     *
+     * @param configurableComponent the component to describe
+     * @param xmlStreamWriter the stream writer
+     * @param hasAdditionalDetails whether there are additional details present
+     * or not
+     * @throws XMLStreamException thrown if there was a problem writing to the
+     * XML stream
+     */
+    private void writeBody(final ConfigurableComponent configurableComponent,
+            final XMLStreamWriter xmlStreamWriter, final boolean 
hasAdditionalDetails)
+            throws XMLStreamException {
+        xmlStreamWriter.writeStartElement("body");
+        writeDescription(configurableComponent, xmlStreamWriter, 
hasAdditionalDetails);
+        writeTags(configurableComponent, xmlStreamWriter);
+        writeProperties(configurableComponent, xmlStreamWriter);
+        writeAdditionalBodyInfo(configurableComponent, xmlStreamWriter);
+        xmlStreamWriter.writeEndElement();
+    }
+
+    /**
+     * This method may be overridden by sub classes to write additional
+     * information to the body of the documentation.
+     *
+     * @param configurableComponent the component to describe
+     * @param xmlStreamWriter the stream writer
+     * @throws XMLStreamException thrown if there was a problem writing to the
+     * XML stream
+     */
+    protected void writeAdditionalBodyInfo(final ConfigurableComponent 
configurableComponent,
+            final XMLStreamWriter xmlStreamWriter) throws XMLStreamException {
+    }
+
+    /**
+     * Writes the tags attached to a ConfigurableComponent.
+     *
+     * @param configurableComponent
+     * @param xmlStreamWriter
+     * @throws XMLStreamException
+     */
+    private void writeTags(final ConfigurableComponent configurableComponent,
+            final XMLStreamWriter xmlStreamWriter) throws XMLStreamException {
+        final Tags tags = 
configurableComponent.getClass().getAnnotation(Tags.class);
+        xmlStreamWriter.writeStartElement("h3");
+        xmlStreamWriter.writeCharacters("Tags: ");
+        xmlStreamWriter.writeEndElement();
+        xmlStreamWriter.writeStartElement("p");
+        if (tags != null) {
+            final String tagString = StringUtils.join(tags.value(), ", ");
+            xmlStreamWriter.writeCharacters(tagString);
+        } else {
+            xmlStreamWriter.writeCharacters("None.");
+        }
+        xmlStreamWriter.writeEndElement();
+
+    }
+
+    /**
+     * Writes a description of the configurable component.
+     *
+     * @param configurableComponent the component to describe
+     * @param xmlStreamWriter the stream writer
+     * @param hasAdditionalDetails whether there are additional details
+     * available as 'additionalDetails.html'
+     * @throws XMLStreamException thrown if there was a problem writing to the
+     * XML stream
+     */
+    protected void writeDescription(final ConfigurableComponent 
configurableComponent,
+            final XMLStreamWriter xmlStreamWriter, final boolean 
hasAdditionalDetails)
+            throws XMLStreamException {
+        writeSimpleElement(xmlStreamWriter, "h2", "Description: ");
+        writeSimpleElement(xmlStreamWriter, "p", 
getDescription(configurableComponent));
+        if (hasAdditionalDetails) {
+            xmlStreamWriter.writeStartElement("p");
+
+            writeLink(xmlStreamWriter, "Additional Details...", 
ADDITIONAL_DETAILS_HTML);
+
+            xmlStreamWriter.writeEndElement();
+        }
+    }
+
+    /**
+     * Gets a description of the ConfigurableComponent using the
+     * CapabilityDescription annotation.
+     *
+     * @param configurableComponent the component to describe
+     * @return a description of the configurableComponent
+     */
+    protected String getDescription(final ConfigurableComponent 
configurableComponent) {
+        final CapabilityDescription capabilityDescription = 
configurableComponent.getClass().getAnnotation(
+                CapabilityDescription.class);
+
+        final String description;
+        if (capabilityDescription != null) {
+            description = capabilityDescription.value();
+        } else {
+            description = "No description provided.";
+        }
+
+        return description;
+    }
+
+    /**
+     * Writes the PropertyDescriptors out as a table.
+     *
+     * @param configurableComponent the component to describe
+     * @param xmlStreamWriter the stream writer
+     * @throws XMLStreamException thrown if there was a problem writing to the
+     * XML Stream
+     */
+    protected void writeProperties(final ConfigurableComponent 
configurableComponent,
+            final XMLStreamWriter xmlStreamWriter) throws XMLStreamException {
+        writeSimpleElement(xmlStreamWriter, "h3", "Properties: ");
+        xmlStreamWriter.writeStartElement("p");
+        xmlStreamWriter.writeCharacters("In the list below, the names of 
required properties appear in ");
+        writeSimpleElement(xmlStreamWriter, "strong", "bold");
+        xmlStreamWriter.writeCharacters(". Any "
+                + "other properties (not in bold) are considered optional. The 
table also "
+                + "indicates any default values, whether a property supports 
the ");
+        writeLink(xmlStreamWriter, "NiFi Expression Language",
+                "../../html/expression-language-guide.html");
+        xmlStreamWriter.writeCharacters(", and whether a property is 
considered "
+                + "\"sensitive\", meaning that its value will be encrypted. 
Before entering a "
+                + "value in a sensitive property, ensure that the ");
+        writeSimpleElement(xmlStreamWriter, "strong", "nifi.properties");
+        xmlStreamWriter.writeCharacters(" file has " + "an entry for the 
property ");
+        writeSimpleElement(xmlStreamWriter, "strong", 
"nifi.sensitive.props.key");
+        xmlStreamWriter.writeCharacters(".");
+        xmlStreamWriter.writeEndElement();
+
+        List<PropertyDescriptor> properties = 
configurableComponent.getPropertyDescriptors();
+        if (properties.size() > 0) {
+            xmlStreamWriter.writeStartElement("table");
+
+            // write the header row
+            xmlStreamWriter.writeStartElement("tr");
+            writeSimpleElement(xmlStreamWriter, "th", "Name");
+            writeSimpleElement(xmlStreamWriter, "th", "Default Value");
+            writeSimpleElement(xmlStreamWriter, "th", "Valid Values");
+            writeSimpleElement(xmlStreamWriter, "th", "Description");
+            xmlStreamWriter.writeEndElement();
+
+            // write the individual properties
+            for (PropertyDescriptor property : properties) {
+                xmlStreamWriter.writeStartElement("tr");
+                xmlStreamWriter.writeStartElement("td");
+                if (property.isRequired()) {
+                    writeSimpleElement(xmlStreamWriter, "strong", 
property.getDisplayName());
+                } else {
+                    xmlStreamWriter.writeCharacters(property.getDisplayName());
+                }
+
+                xmlStreamWriter.writeEndElement();
+                writeSimpleElement(xmlStreamWriter, "td", 
property.getDefaultValue());
+                xmlStreamWriter.writeStartElement("td");
+                writeValidValues(xmlStreamWriter, property);
+                xmlStreamWriter.writeEndElement();
+                xmlStreamWriter.writeStartElement("td");
+                if (property.getDescription() != null && 
property.getDescription().trim().length() > 0) {
+                    xmlStreamWriter.writeCharacters(property.getDescription());
+                } else {
+                    xmlStreamWriter.writeCharacters("No Description 
Provided.");
+                }
+
+                if (property.isSensitive()) {
+                    xmlStreamWriter.writeEmptyElement("br");
+                    writeSimpleElement(xmlStreamWriter, "strong", "Sensitive 
Property: true");
+                }
+
+                if (property.isExpressionLanguageSupported()) {
+                    xmlStreamWriter.writeEmptyElement("br");
+                    writeSimpleElement(xmlStreamWriter, "strong", "Supports 
Expression Language: true");
+                }
+                xmlStreamWriter.writeEndElement();
+
+                xmlStreamWriter.writeEndElement();
+            }
+
+            // TODO support dynamic properties...
+            xmlStreamWriter.writeEndElement();
+
+        } else {
+            writeSimpleElement(xmlStreamWriter, "p", "This component has no 
required or optional properties.");
+        }
+    }
+
+    private void writeValidValueDescription(XMLStreamWriter xmlStreamWriter, 
String description)
+            throws XMLStreamException {
+        xmlStreamWriter.writeCharacters(" ");
+        xmlStreamWriter.writeStartElement("img");
+        xmlStreamWriter.writeAttribute("src", 
"../../html/images/iconInfo.png");
+        xmlStreamWriter.writeAttribute("alt", description);
+        xmlStreamWriter.writeAttribute("title", description);
+        xmlStreamWriter.writeEndElement();
+
+    }
+
+    /**
+     * Interrogates a PropertyDescriptor to get a list of AllowableValues, if
+     * there are none, nothing is written to the stream.
+     *
+     * @param xmlStreamWriter the stream writer to use
+     * @param property the property to describe
+     * @throws XMLStreamException thrown if there was a problem writing to the
+     * XML Stream
+     */
+    protected void writeValidValues(XMLStreamWriter xmlStreamWriter, 
PropertyDescriptor property)
+            throws XMLStreamException {
+        if (property.getAllowableValues() != null && 
property.getAllowableValues().size() > 0) {
+            xmlStreamWriter.writeStartElement("ul");
+            for (AllowableValue value : property.getAllowableValues()) {
+                xmlStreamWriter.writeStartElement("li");
+                xmlStreamWriter.writeCharacters(value.getDisplayName());
+
+                if (value.getDescription() != null) {
+                    writeValidValueDescription(xmlStreamWriter, 
value.getDescription());
+                }
+                xmlStreamWriter.writeEndElement();
+
+            }
+            xmlStreamWriter.writeEndElement();
+        } else if (property.getControllerServiceDefinition() != null) {
+            Class<? extends ControllerService> controllerServiceClass = 
property.getControllerServiceDefinition();
+            writeSimpleElement(xmlStreamWriter, "strong", "Controller Service: 
");
+            xmlStreamWriter.writeEmptyElement("br");
+            
xmlStreamWriter.writeCharacters(controllerServiceClass.getSimpleName());
+        }
+    }
+
+    /**
+     * Writes a begin element, then text, then end element for the element of a
+     * users choosing. Example: &lt;p&gt;text&lt;/p&gt;
+     *
+     * @param writer the stream writer to use
+     * @param elementName the name of the element
+     * @param characters the characters to insert into the element
+     * @param strong whether the characters should be strong or not.
+     * @throws XMLStreamException thrown if there was a problem writing to the
+     * stream.
+     */
+    protected final static void writeSimpleElement(final XMLStreamWriter 
writer, final String elementName,
+            final String characters, boolean strong) throws XMLStreamException 
{
+        writer.writeStartElement(elementName);
+        if (strong) {
+            writer.writeStartElement("strong");
+        }
+        writer.writeCharacters(characters);
+        if (strong) {
+            writer.writeEndElement();
+        }
+        writer.writeEndElement();
+    }
+
+    /**
+     * Writes a begin element, then text, then end element for the element of a
+     * users choosing. Example: &lt;p&gt;text&lt;/p&gt;
+     *
+     * @param writer the stream writer to use
+     * @param elementName the name of the element
+     * @param characters the characters to insert into the element
+     * @throws XMLStreamException thrown if there was a problem writing to the
+     * stream
+     */
+    protected final static void writeSimpleElement(final XMLStreamWriter 
writer, final String elementName,
+            final String characters) throws XMLStreamException {
+        writeSimpleElement(writer, elementName, characters, false);
+    }
+
+    /**
+     * A helper method to write a link
+     *
+     * @param xmlStreamWriter the stream to write to
+     * @param text the text of the link
+     * @param location the location of the link
+     * @throws XMLStreamException thrown if there was a problem writing to the
+     * stream
+     */
+    protected void writeLink(final XMLStreamWriter xmlStreamWriter, final 
String text, final String location)
+            throws XMLStreamException {
+        xmlStreamWriter.writeStartElement("a");
+        xmlStreamWriter.writeAttribute("href", location);
+        xmlStreamWriter.writeCharacters(text);
+        xmlStreamWriter.writeEndElement();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlProcessorDocumentationWriter.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlProcessorDocumentationWriter.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlProcessorDocumentationWriter.java
index 4cf6ba8..412ebf6 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlProcessorDocumentationWriter.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlProcessorDocumentationWriter.java
@@ -26,33 +26,33 @@ import org.apache.nifi.processor.Relationship;
 /**
  * Writes documentation specific for a Processor. This includes everything for 
a
  * ConfigurableComponent as well as Relationship information.
- * 
+ *
  *
  */
 public class HtmlProcessorDocumentationWriter extends HtmlDocumentationWriter {
 
-       @Override
-       protected void writeAdditionalBodyInfo(final ConfigurableComponent 
configurableComponent,
-                       final XMLStreamWriter xmlStreamWriter) throws 
XMLStreamException {
-               final Processor processor = (Processor) configurableComponent;
-               writeSimpleElement(xmlStreamWriter, "h3", "Relationships: ");
+    @Override
+    protected void writeAdditionalBodyInfo(final ConfigurableComponent 
configurableComponent,
+            final XMLStreamWriter xmlStreamWriter) throws XMLStreamException {
+        final Processor processor = (Processor) configurableComponent;
+        writeSimpleElement(xmlStreamWriter, "h3", "Relationships: ");
 
-               if (processor.getRelationships().size() > 0) {
-                       xmlStreamWriter.writeStartElement("table");
-                       xmlStreamWriter.writeStartElement("tr");
-                       writeSimpleElement(xmlStreamWriter, "th", "Name");
-                       writeSimpleElement(xmlStreamWriter, "th", 
"Description");
-                       xmlStreamWriter.writeEndElement();
+        if (processor.getRelationships().size() > 0) {
+            xmlStreamWriter.writeStartElement("table");
+            xmlStreamWriter.writeStartElement("tr");
+            writeSimpleElement(xmlStreamWriter, "th", "Name");
+            writeSimpleElement(xmlStreamWriter, "th", "Description");
+            xmlStreamWriter.writeEndElement();
 
-                       for (Relationship relationship : 
processor.getRelationships()) {
-                               xmlStreamWriter.writeStartElement("tr");
-                               writeSimpleElement(xmlStreamWriter, "td", 
relationship.getName());
-                               writeSimpleElement(xmlStreamWriter, "td", 
relationship.getDescription());
-                               xmlStreamWriter.writeEndElement();
-                       }
-                       xmlStreamWriter.writeEndElement();
-               } else {
-                       xmlStreamWriter.writeCharacters("This processor has no 
relationships.");
-               }
-       }
+            for (Relationship relationship : processor.getRelationships()) {
+                xmlStreamWriter.writeStartElement("tr");
+                writeSimpleElement(xmlStreamWriter, "td", 
relationship.getName());
+                writeSimpleElement(xmlStreamWriter, "td", 
relationship.getDescription());
+                xmlStreamWriter.writeEndElement();
+            }
+            xmlStreamWriter.writeEndElement();
+        } else {
+            xmlStreamWriter.writeCharacters("This processor has no 
relationships.");
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ControllerServiceInitializer.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ControllerServiceInitializer.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ControllerServiceInitializer.java
index 123a39c..3c66485 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ControllerServiceInitializer.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ControllerServiceInitializer.java
@@ -25,14 +25,14 @@ import org.apache.nifi.reporting.InitializationException;
 /**
  * Initializes a ControllerService using a
  * MockControllerServiceInitializationContext
- * 
+ *
  *
  */
 public class ControllerServiceInitializer implements 
ConfigurableComponentInitializer {
 
-       @Override
-       public void initialize(ConfigurableComponent component) throws 
InitializationException {
-               ControllerService controllerService = (ControllerService) 
component;
-               controllerService.initialize(new 
MockControllerServiceInitializationContext());
-       }
+    @Override
+    public void initialize(ConfigurableComponent component) throws 
InitializationException {
+        ControllerService controllerService = (ControllerService) component;
+        controllerService.initialize(new 
MockControllerServiceInitializationContext());
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ProcessorInitializer.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ProcessorInitializer.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ProcessorInitializer.java
index a33f7b9..07e9c3a 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ProcessorInitializer.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ProcessorInitializer.java
@@ -23,15 +23,15 @@ import org.apache.nifi.processor.Processor;
 
 /**
  * Initializes a Procesor using a MockProcessorInitializationContext
- * 
+ *
  *
  */
 public class ProcessorInitializer implements ConfigurableComponentInitializer {
 
-       @Override
-       public void initialize(ConfigurableComponent component) {
-               Processor processor = (Processor) component;
-               processor.initialize(new MockProcessorInitializationContext());
-       }
+    @Override
+    public void initialize(ConfigurableComponent component) {
+        Processor processor = (Processor) component;
+        processor.initialize(new MockProcessorInitializationContext());
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ReportingTaskingInitializer.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ReportingTaskingInitializer.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ReportingTaskingInitializer.java
index ff915cf..6fcfca9 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ReportingTaskingInitializer.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/init/ReportingTaskingInitializer.java
@@ -24,14 +24,14 @@ import org.apache.nifi.reporting.ReportingTask;
 
 /**
  * Initializes a ReportingTask using a MockReportingInitializationContext;
- * 
+ *
  *
  */
 public class ReportingTaskingInitializer implements 
ConfigurableComponentInitializer {
 
-       @Override
-       public void initialize(ConfigurableComponent component) throws 
InitializationException {
-               ReportingTask reportingTask = (ReportingTask) component;
-               reportingTask.initialize(new 
MockReportingInitializationContext());
-       }
+    @Override
+    public void initialize(ConfigurableComponent component) throws 
InitializationException {
+        ReportingTask reportingTask = (ReportingTask) component;
+        reportingTask.initialize(new MockReportingInitializationContext());
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockControllerServiceInitializationContext.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockControllerServiceInitializationContext.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockControllerServiceInitializationContext.java
index 6153a8e..fcd3ea3 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockControllerServiceInitializationContext.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockControllerServiceInitializationContext.java
@@ -22,19 +22,19 @@ import org.apache.nifi.controller.ControllerServiceLookup;
 /**
  * A Mock ControllerServiceInitializationContext so that ControllerServices can
  * be initialized for the purpose of generating documentation.
- * 
+ *
  *
  */
 public class MockControllerServiceInitializationContext implements 
ControllerServiceInitializationContext {
 
-       @Override
-       public String getIdentifier() {
-               return "";
-       }
+    @Override
+    public String getIdentifier() {
+        return "";
+    }
 
-       @Override
-       public ControllerServiceLookup getControllerServiceLookup() {
-               return new MockControllerServiceLookup();
-       }
+    @Override
+    public ControllerServiceLookup getControllerServiceLookup() {
+        return new MockControllerServiceLookup();
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockControllerServiceLookup.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockControllerServiceLookup.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockControllerServiceLookup.java
index 88d0911..f11bc68 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockControllerServiceLookup.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockControllerServiceLookup.java
@@ -26,30 +26,30 @@ import org.apache.nifi.controller.ControllerServiceLookup;
  * A Mock ControllerServiceLookup that can be used so that
  * ConfigurableComponents can be initialized for the purpose of generating
  * documentation
- * 
+ *
  *
  */
 public class MockControllerServiceLookup implements ControllerServiceLookup {
 
-       @Override
-       public ControllerService getControllerService(String serviceIdentifier) 
{
-               return null;
-       }
-
-       @Override
-       public boolean isControllerServiceEnabled(String serviceIdentifier) {
-               return false;
-       }
-
-       @Override
-       public boolean isControllerServiceEnabled(ControllerService service) {
-               return false;
-       }
-
-       @Override
-       public Set<String> getControllerServiceIdentifiers(Class<? extends 
ControllerService> serviceType)
-                       throws IllegalArgumentException {
-               return Collections.emptySet();
-       }
+    @Override
+    public ControllerService getControllerService(String serviceIdentifier) {
+        return null;
+    }
+
+    @Override
+    public boolean isControllerServiceEnabled(String serviceIdentifier) {
+        return false;
+    }
+
+    @Override
+    public boolean isControllerServiceEnabled(ControllerService service) {
+        return false;
+    }
+
+    @Override
+    public Set<String> getControllerServiceIdentifiers(Class<? extends 
ControllerService> serviceType)
+            throws IllegalArgumentException {
+        return Collections.emptySet();
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockProcessorInitializationContext.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockProcessorInitializationContext.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockProcessorInitializationContext.java
index 48ffecb..d77d7dd 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockProcessorInitializationContext.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockProcessorInitializationContext.java
@@ -23,23 +23,23 @@ import 
org.apache.nifi.processor.ProcessorInitializationContext;
 /**
  * A Mock ProcessorInitializationContext that can be used so that Processors 
can
  * be initialized for the purpose of generating documentation.
- * 
+ *
  *
  */
 public class MockProcessorInitializationContext implements 
ProcessorInitializationContext {
 
-       @Override
-       public String getIdentifier() {
-               return "";
-       }
+    @Override
+    public String getIdentifier() {
+        return "";
+    }
 
-       @Override
-       public ProcessorLog getLogger() {
-               return null;
-       }
+    @Override
+    public ProcessorLog getLogger() {
+        return null;
+    }
 
-       @Override
-       public ControllerServiceLookup getControllerServiceLookup() {
-               return new MockControllerServiceLookup();
-       }
+    @Override
+    public ControllerServiceLookup getControllerServiceLookup() {
+        return new MockControllerServiceLookup();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockReportingInitializationContext.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockReportingInitializationContext.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockReportingInitializationContext.java
index 9782077..910ce5a 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockReportingInitializationContext.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/mock/MockReportingInitializationContext.java
@@ -25,39 +25,39 @@ import org.apache.nifi.scheduling.SchedulingStrategy;
 /**
  * A Mock ReportingInitializationContext that can be used to initialize a
  * ReportingTask for the purposes of documentation generation.
- * 
+ *
  * @author Alligator
  *
  */
 public class MockReportingInitializationContext implements 
ReportingInitializationContext {
 
-       @Override
-       public String getIdentifier() {
-               return "";
-       }
-
-       @Override
-       public String getName() {
-               return "";
-       }
-
-       @Override
-       public long getSchedulingPeriod(TimeUnit timeUnit) {
-               return 0;
-       }
-
-       @Override
-       public ControllerServiceLookup getControllerServiceLookup() {
-               return new MockControllerServiceLookup();
-       }
-
-       @Override
-       public String getSchedulingPeriod() {
-               return "";
-       }
-
-       @Override
-       public SchedulingStrategy getSchedulingStrategy() {
-               return SchedulingStrategy.TIMER_DRIVEN;
-       }
+    @Override
+    public String getIdentifier() {
+        return "";
+    }
+
+    @Override
+    public String getName() {
+        return "";
+    }
+
+    @Override
+    public long getSchedulingPeriod(TimeUnit timeUnit) {
+        return 0;
+    }
+
+    @Override
+    public ControllerServiceLookup getControllerServiceLookup() {
+        return new MockControllerServiceLookup();
+    }
+
+    @Override
+    public String getSchedulingPeriod() {
+        return "";
+    }
+
+    @Override
+    public SchedulingStrategy getSchedulingStrategy() {
+        return SchedulingStrategy.TIMER_DRIVEN;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/NakedProcessor.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/NakedProcessor.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/NakedProcessor.java
index 6fce1e1..ee7f315 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/NakedProcessor.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/NakedProcessor.java
@@ -1,3 +1,19 @@
+/*
+ * 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.nifi.documentation.example;
 
 import org.apache.nifi.processor.AbstractProcessor;
@@ -9,7 +25,6 @@ public class NakedProcessor extends AbstractProcessor {
 
        @Override
        public void onTrigger(ProcessContext arg0, ProcessSession arg1) throws 
ProcessException {
-               // TODO Auto-generated method stub
                
        }
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/pom.xml 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/pom.xml
index b0ed5c1..c0b4ab9 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/pom.xml
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/pom.xml
@@ -39,7 +39,7 @@
         <module>nifi-administration</module>
         <module>nifi-web</module>
         <module>nifi-resources</module>
-               <module>nifi-documentation</module>
+        <module>nifi-documentation</module>
     </modules>
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-framework-bundle/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/pom.xml 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/pom.xml
index 4c07d75..074821a 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/pom.xml
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/pom.xml
@@ -111,7 +111,7 @@
             <dependency>
                 <groupId>org.apache.nifi</groupId>
                 <artifactId>nifi-documentation</artifactId>
-                <version>0.0.2-incubating-SNAPSHOT</version>
+                <version>0.1.0-incubating-SNAPSHOT</version>
             </dependency>
         </dependencies>
     </dependencyManagement>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/DistributeLoad.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/DistributeLoad.java
 
b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/DistributeLoad.java
index 8fb8ad4..c78251c 100644
--- 
a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/DistributeLoad.java
+++ 
b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/DistributeLoad.java
@@ -151,7 +151,7 @@ public class DistributeLoad extends AbstractProcessor {
     }
 
     private static Relationship createRelationship(final int num) {
-        return new Relationship.Builder().name(String.valueOf(num)).build();
+        return new 
Relationship.Builder().name(String.valueOf(num)).description("Where to route 
flowfiles for this relationship index").build();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/HandleHttpRequest.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/HandleHttpRequest.java
 
b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/HandleHttpRequest.java
index 575bf95..4386100 100644
--- 
a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/HandleHttpRequest.java
+++ 
b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/HandleHttpRequest.java
@@ -79,9 +79,9 @@ public class HandleHttpRequest extends AbstractProcessor {
     private static final Pattern URL_QUERY_PARAM_DELIMITER = 
Pattern.compile("&");
     
     // Allowable values for client auth
-    public static final AllowableValue CLIENT_NONE = new AllowableValue("No 
Authentication", "Processor will not authenticate clients. Anyone can 
communicate with this Processor anonymously");
-    public static final AllowableValue CLIENT_WANT = new AllowableValue("Want 
Authentication", "Processor will try to verify the client but if unable to 
verify will allow the client to communicate anonymously");
-    public static final AllowableValue CLIENT_NEED = new AllowableValue("Need 
Authentication", "Processor will reject communications from any client unless 
the client provides a certificate that is trusted by the TrustStore specified 
in the SSL Context Service");
+    public static final AllowableValue CLIENT_NONE = new AllowableValue("No 
Authentication", "No Authentication", "Processor will not authenticate clients. 
Anyone can communicate with this Processor anonymously");
+    public static final AllowableValue CLIENT_WANT = new AllowableValue("Want 
Authentication", "Want Authentication", "Processor will try to verify the 
client but if unable to verify will allow the client to communicate 
anonymously");
+    public static final AllowableValue CLIENT_NEED = new AllowableValue("Need 
Authentication", "Need Authentication", "Processor will reject communications 
from any client unless the client provides a certificate that is trusted by the 
TrustStore specified in the SSL Context Service");
     
     
     public static final PropertyDescriptor PORT = new 
PropertyDescriptor.Builder()
@@ -208,6 +208,7 @@ public class HandleHttpRequest extends AbstractProcessor {
         descriptors.add(ALLOW_HEAD);
         descriptors.add(ALLOW_OPTIONS);
         descriptors.add(ADDITIONAL_METHODS);
+        descriptors.add(CLIENT_AUTH);
 
         return descriptors;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.DistributeLoad/additionalDetails.html
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.DistributeLoad/additionalDetails.html
 
b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.DistributeLoad/additionalDetails.html
index 0c16e4f..f593bed 100644
--- 
a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.DistributeLoad/additionalDetails.html
+++ 
b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.DistributeLoad/additionalDetails.html
@@ -22,39 +22,19 @@
     </head>
 
     <body>
-        <h2>Description:</h2>
-        <p>This processor distributes FlowFiles to downstream
-            processors based on a distribution strategy. The user may select 
the strategy "round robin", the
-            strategy "next available", or "load distribution service". If 
using the round robin
-            strategy, the default is to assign each destination (i.e., 
relationship) a weighting of 1
-            (evenly distributed). However, the user may add optional 
properties to change this weighting. When 
-            adding a property, the name must be a positive integer between 1 
and the number of relationships (inclusive).
-            For example, if Number of Relationships has a value of 8 and a 
property is added with the name 5
-            and the value 10, then relationship 5 (among the 8) will receive 10
-            FlowFiles in each iteration instead of 1. All other relationships 
will receive 1 FlowFile in each iteration.
-        </p>
-        <strong>Properties:</strong>
-    <p>In the list below, the names of required properties appear
-        in bold. Any other properties (not in bold) are considered optional.
-        If a property has a default value, it is indicated. If a property
-        supports the use of the NiFi Expression Language (or simply,
-        "expression language"), that is also indicated.</p>
+        <strong>Relationships</strong>
+        <ul>
+            <li>1
+                <ul>
+                    <li>By default, there is one relationship, named 1. The 
number
+                        of relationships is determined by the value of the 
&lt;Number of
+                        Relationships&gt; property.</li>
+                </ul>
+            </li>
+        </ul>
 
-    <p>
-        <strong>Relationships:</strong>
-    </p>
-    <ul>
-        <li>1
-            <ul>
-                <li>By default, there is one relationship, named 1. The number
-                    of relationships is determined by the value of the 
&lt;Number of
-                    Relationships&gt; property.</li>
-            </ul>
-        </li>
-    </ul>
 
 
 
-
-</body>
+    </body>
 </html>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e9d31f5d/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.EvaluateJsonPath/additionalDetails.html
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.EvaluateJsonPath/additionalDetails.html
 
b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.EvaluateJsonPath/additionalDetails.html
new file mode 100644
index 0000000..c1d80aa
--- /dev/null
+++ 
b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.EvaluateJsonPath/additionalDetails.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html lang="en">
+    <!--
+      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.
+    -->
+    <head>
+        <meta charset="utf-8"/>
+        <title>EvaluateJsonPath</title>
+        <link rel="stylesheet" href="../../css/component-usage.css" 
type="text/css"/>
+    </head>
+
+    <body>
+        <!-- Processor Documentation 
================================================== -->
+        <p>
+            <strong>Note:</strong> The underlying JsonPath library loads the 
entirety of the streamed content into and performs
+            result evaluations in memory. Accordingly, it is important to 
consider the anticipated profile of content being
+            evaluated by this processor and the hardware supporting it 
especially when working against large JSON documents.
+        </p>
+
+        <p>
+            <strong>Modifies Attributes:</strong>
+        </p>
+
+        <p>
+            This processor adds user-defined attributes if the 
&lt;Destination&gt; property is set to
+            <code>flowfile-attribute</code>.
+        </p>
+
+
+        <p>
+            <strong>Properties</strong>
+        </p>
+        <ul>
+            <li>
+                user-defined properties
+                <ul>
+                    <li>The name of the attribute to put the JsonPath result 
into if
+                        flowfile-attribute is used as the value for the 
Destination
+                        property; if using flowfile-content as the value for 
the
+                        Destination property, this value is ignored.
+                    </li>
+                    <li>Supports expression language: false</li>
+                </ul>
+            </li>
+        </ul>
+    </body>
+</html>

Reply via email to