You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2015/03/19 02:24:10 UTC

[22/27] incubator-nifi git commit: NIFI-280 This closes #19 Updated poms for versions after merge. Minor doc removals. Awesome PR!

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 <jo...@apache.org>
Authored: Tue Mar 17 23:42:22 2015 -0400
Committer: joewitt <jo...@apache.org>
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>