NIFI-3799 Add Input Requirement Info to Docs

Added input requirement info for processor documentation

This closes #1756.

Signed-off-by: James Wing <jvwing@gmail.com>
This commit is contained in:
Pierre Villard 2017-05-05 15:05:02 +02:00 committed by James Wing
parent 08b66b5b6a
commit fb7d6d1150
3 changed files with 42 additions and 0 deletions

View File

@ -18,6 +18,7 @@ package org.apache.nifi.documentation.html;
import org.apache.nifi.annotation.behavior.DynamicProperties; import org.apache.nifi.annotation.behavior.DynamicProperties;
import org.apache.nifi.annotation.behavior.DynamicProperty; import org.apache.nifi.annotation.behavior.DynamicProperty;
import org.apache.nifi.annotation.behavior.InputRequirement;
import org.apache.nifi.annotation.behavior.Restricted; import org.apache.nifi.annotation.behavior.Restricted;
import org.apache.nifi.annotation.behavior.Stateful; import org.apache.nifi.annotation.behavior.Stateful;
import org.apache.nifi.annotation.documentation.CapabilityDescription; import org.apache.nifi.annotation.documentation.CapabilityDescription;
@ -146,6 +147,7 @@ public class HtmlDocumentationWriter implements DocumentationWriter {
writeAdditionalBodyInfo(configurableComponent, xmlStreamWriter); writeAdditionalBodyInfo(configurableComponent, xmlStreamWriter);
writeStatefulInfo(configurableComponent, xmlStreamWriter); writeStatefulInfo(configurableComponent, xmlStreamWriter);
writeRestrictedInfo(configurableComponent, xmlStreamWriter); writeRestrictedInfo(configurableComponent, xmlStreamWriter);
writeInputRequirementInfo(configurableComponent, xmlStreamWriter);
writeSeeAlso(configurableComponent, xmlStreamWriter); writeSeeAlso(configurableComponent, xmlStreamWriter);
xmlStreamWriter.writeEndElement(); xmlStreamWriter.writeEndElement();
} }
@ -167,6 +169,37 @@ public class HtmlDocumentationWriter implements DocumentationWriter {
xmlStreamWriter.writeEndElement(); xmlStreamWriter.writeEndElement();
} }
/**
* Add in the documentation information regarding the component whether it accepts an
* incoming relationship or not.
*
* @param configurableComponent the component to describe
* @param xmlStreamWriter the stream writer to use
* @throws XMLStreamException thrown if there was a problem writing the XML
*/
private void writeInputRequirementInfo(ConfigurableComponent configurableComponent, XMLStreamWriter xmlStreamWriter)
throws XMLStreamException {
final InputRequirement inputRequirement = configurableComponent.getClass().getAnnotation(InputRequirement.class);
if(inputRequirement != null) {
writeSimpleElement(xmlStreamWriter, "h3", "Input requirement: ");
switch (inputRequirement.value()) {
case INPUT_FORBIDDEN:
xmlStreamWriter.writeCharacters("This component does not allow an incoming relationship.");
break;
case INPUT_ALLOWED:
xmlStreamWriter.writeCharacters("This component allows an incoming relationship.");
break;
case INPUT_REQUIRED:
xmlStreamWriter.writeCharacters("This component requires an incoming relationship.");
break;
default:
xmlStreamWriter.writeCharacters("This component does not have input requirement.");
break;
}
}
}
/** /**
* Write the description of the Stateful annotation if provided in this component. * Write the description of the Stateful annotation if provided in this component.
* *

View File

@ -18,11 +18,13 @@ package org.apache.nifi.documentation.example;
import org.apache.nifi.annotation.behavior.DynamicProperty; import org.apache.nifi.annotation.behavior.DynamicProperty;
import org.apache.nifi.annotation.behavior.DynamicRelationship; import org.apache.nifi.annotation.behavior.DynamicRelationship;
import org.apache.nifi.annotation.behavior.InputRequirement;
import org.apache.nifi.annotation.behavior.ReadsAttribute; import org.apache.nifi.annotation.behavior.ReadsAttribute;
import org.apache.nifi.annotation.behavior.Restricted; import org.apache.nifi.annotation.behavior.Restricted;
import org.apache.nifi.annotation.behavior.Stateful; import org.apache.nifi.annotation.behavior.Stateful;
import org.apache.nifi.annotation.behavior.WritesAttribute; import org.apache.nifi.annotation.behavior.WritesAttribute;
import org.apache.nifi.annotation.behavior.WritesAttributes; import org.apache.nifi.annotation.behavior.WritesAttributes;
import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
import org.apache.nifi.annotation.documentation.CapabilityDescription; import org.apache.nifi.annotation.documentation.CapabilityDescription;
import org.apache.nifi.annotation.documentation.SeeAlso; import org.apache.nifi.annotation.documentation.SeeAlso;
import org.apache.nifi.annotation.documentation.Tags; import org.apache.nifi.annotation.documentation.Tags;
@ -56,6 +58,7 @@ import java.util.Set;
@DynamicRelationship(name = "name from dynamic property", description = "all files that match the properties XPath") @DynamicRelationship(name = "name from dynamic property", description = "all files that match the properties XPath")
@Stateful(scopes = {Scope.CLUSTER, Scope.LOCAL}, description = "state management description") @Stateful(scopes = {Scope.CLUSTER, Scope.LOCAL}, description = "state management description")
@Restricted("processor restriction description") @Restricted("processor restriction description")
@InputRequirement(Requirement.INPUT_FORBIDDEN)
public class FullyDocumentedProcessor extends AbstractProcessor { public class FullyDocumentedProcessor extends AbstractProcessor {
public static final PropertyDescriptor DIRECTORY = new PropertyDescriptor.Builder().name("Input Directory") public static final PropertyDescriptor DIRECTORY = new PropertyDescriptor.Builder().name("Input Directory")

View File

@ -81,6 +81,9 @@ public class ProcessorDocumentationWriterTest {
assertNotContains(results, "No tags provided."); assertNotContains(results, "No tags provided.");
assertNotContains(results, "Additional Details..."); assertNotContains(results, "Additional Details...");
// input requirement
assertContains(results, "This component does not allow an incoming relationship.");
// verify the right OnRemoved and OnShutdown methods were called // verify the right OnRemoved and OnShutdown methods were called
Assert.assertEquals(0, processor.getOnRemovedArgs()); Assert.assertEquals(0, processor.getOnRemovedArgs());
Assert.assertEquals(0, processor.getOnRemovedNoArgs()); Assert.assertEquals(0, processor.getOnRemovedNoArgs());
@ -122,6 +125,9 @@ public class ProcessorDocumentationWriterTest {
// state management // state management
assertContains(results, "This component is not restricted."); assertContains(results, "This component is not restricted.");
// input requirement
assertNotContains(results, "Input requirement:");
} }
@Test @Test