NIFI-309 supporting DynamicRelationships
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/cce69a2f Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/cce69a2f Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/cce69a2f Branch: refs/heads/develop Commit: cce69a2f947cd66d16fcb154692f9d411dd4c815 Parents: bae2b40 Author: danbress <[email protected]> Authored: Wed Mar 18 13:59:13 2015 -0400 Committer: danbress <[email protected]> Committed: Fri Mar 20 09:49:32 2015 -0400 ---------------------------------------------------------------------- .../documentation/DynamicRelationships.java | 40 +++++++++++++++++ .../html/HtmlProcessorDocumentationWriter.java | 46 +++++++++++++++++++- .../example/FullyDocumentedProcessor.java | 2 + 3 files changed, 86 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/cce69a2f/nifi/nifi-api/src/main/java/org/apache/nifi/annotation/documentation/DynamicRelationships.java ---------------------------------------------------------------------- diff --git a/nifi/nifi-api/src/main/java/org/apache/nifi/annotation/documentation/DynamicRelationships.java b/nifi/nifi-api/src/main/java/org/apache/nifi/annotation/documentation/DynamicRelationships.java new file mode 100644 index 0000000..0047cb1 --- /dev/null +++ b/nifi/nifi-api/src/main/java/org/apache/nifi/annotation/documentation/DynamicRelationships.java @@ -0,0 +1,40 @@ +package org.apache.nifi.annotation.documentation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.processor.Processor; +import org.apache.nifi.processor.Relationship; + +/** + * Annotation to indicate that a {@link Processor} supports dynamic + * relationship. A dynamic {@link Relationship} is one where the relationship is + * generated based on a user defined {@link PropertyDescriptor} + * + * @author + * + */ +@Documented +@Target({ ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface DynamicRelationships { + /** + * Describes the name(s) of the dynamic relationship(s) + * + * @return a description of the name(s) of the dynamic relationship(s) + */ + public String name(); + + /** + * Describes the data that should be routed to the dynamic relationship(s) + * + * @return a description the data that should be routed to the dynamic relationship(s) + */ + public String description(); +} http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/cce69a2f/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 af218d8..6eed4dc 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 @@ -23,6 +23,7 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import org.apache.commons.lang3.StringUtils; +import org.apache.nifi.annotation.documentation.DynamicRelationships; import org.apache.nifi.annotation.documentation.ReadsAttribute; import org.apache.nifi.annotation.documentation.ReadsAttributes; import org.apache.nifi.annotation.documentation.WritesAttribute; @@ -42,8 +43,9 @@ public class HtmlProcessorDocumentationWriter extends HtmlDocumentationWriter { @Override protected void writeAdditionalBodyInfo(final ConfigurableComponent configurableComponent, final XMLStreamWriter xmlStreamWriter) throws XMLStreamException { - final Processor processor = (Processor) configurableComponent; + final Processor processor = (Processor) configurableComponent; writeRelationships(processor, xmlStreamWriter); + writeDynamicRelationships(processor, xmlStreamWriter); writeAttributeInfo(processor, xmlStreamWriter); } @@ -199,7 +201,7 @@ public class HtmlProcessorDocumentationWriter extends HtmlDocumentationWriter { */ private void writeRelationships(final Processor processor, final XMLStreamWriter xmlStreamWriter) throws XMLStreamException { - + writeSimpleElement(xmlStreamWriter, "h3", "Relationships: "); if (processor.getRelationships().size() > 0) { @@ -220,4 +222,44 @@ public class HtmlProcessorDocumentationWriter extends HtmlDocumentationWriter { xmlStreamWriter.writeCharacters("This processor has no relationships."); } } + + /** + * Writes dynamic relationship information + * + * @param processor + * @param xmlStreamWriter + * @throws XMLStreamException + */ + private void writeDynamicRelationships(final Processor processor, final XMLStreamWriter xmlStreamWriter) throws XMLStreamException { + + List<DynamicRelationships> dynamicRelationships = getDynamicRelationships(processor); + + if (dynamicRelationships.size() > 0) { + writeSimpleElement(xmlStreamWriter, "h3", "Dynamic Relationships: "); + xmlStreamWriter.writeStartElement("table"); + xmlStreamWriter.writeStartElement("tr"); + writeSimpleElement(xmlStreamWriter, "th", "Name"); + writeSimpleElement(xmlStreamWriter, "th", "Description"); + xmlStreamWriter.writeEndElement(); + + for (DynamicRelationships dynamicRelationship : dynamicRelationships) { + xmlStreamWriter.writeStartElement("tr"); + writeSimpleElement(xmlStreamWriter, "td", dynamicRelationship.name()); + writeSimpleElement(xmlStreamWriter, "td", dynamicRelationship.description()); + xmlStreamWriter.writeEndElement(); + } + xmlStreamWriter.writeEndElement(); + } + } + + private List<DynamicRelationships> getDynamicRelationships(Processor processor) { + List<DynamicRelationships> results = new ArrayList<>(); + + DynamicRelationships dynamicRelationships = processor.getClass().getAnnotation(DynamicRelationships.class); + if (dynamicRelationships != null) { + results.add(dynamicRelationships); + } + + return results; + } } http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/cce69a2f/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedProcessor.java ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedProcessor.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedProcessor.java index 1814f51..782d305 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedProcessor.java +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedProcessor.java @@ -24,6 +24,7 @@ import java.util.Set; import org.apache.nifi.annotation.behavior.DynamicProperty; import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.DynamicRelationships; import org.apache.nifi.annotation.documentation.ReadsAttribute; import org.apache.nifi.annotation.documentation.SeeAlso; import org.apache.nifi.annotation.documentation.Tags; @@ -45,6 +46,7 @@ import org.apache.nifi.processor.util.StandardValidators; @ReadsAttribute(attribute = "incoming", description="this specifies the format of the thing") @SeeAlso(value={FullyDocumentedControllerService.class, FullyDocumentedReportingTask.class}, classNames={"org.apache.nifi.processor.ExampleProcessor"}) @DynamicProperty(name="the relationship to route to", supportsExpressionLanguage=true, description="some XPath") +@DynamicRelationships(name="name from dynamic property", description="all files that match the properties XPath") public class FullyDocumentedProcessor extends AbstractProcessor { public static final PropertyDescriptor DIRECTORY = new PropertyDescriptor.Builder().name("Input Directory")
