From ae7ac3d5d9bc68512a708c232c57da7d538c7b79 Mon Sep 17 00:00:00 2001 From: Oskar Jerzyk Date: Wed, 20 May 2020 11:05:09 +0200 Subject: [PATCH] #117 labels for nodes implemented --- .../default/docs/asciidoc/dataobjects.adoc | 3 ++ .../factory/generic/GraphNodeOptions.java | 29 ++++++++++++++++--- .../factory/generic/GraphNodeOptionsTest.java | 14 +++++++++ .../test/resources/conf/taskWithLabels.conf | 15 ++++++++++ 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 task/factory/default/src/test/resources/conf/taskWithLabels.conf diff --git a/task/factory/default/docs/asciidoc/dataobjects.adoc b/task/factory/default/docs/asciidoc/dataobjects.adoc index cbdf9686..fc49f15a 100644 --- a/task/factory/default/docs/asciidoc/dataobjects.adoc +++ b/task/factory/default/docs/asciidoc/dataobjects.adoc @@ -89,6 +89,9 @@ Sets a node factory name to ActionNodeFactory.NAME and configures t |[[actions]]`@actions`|`Array of link:dataobjects.html#GraphNodeOptions[GraphNodeOptions]`|+++ Sets a node factory name to SubtasksNodeFactory.NAME and configures subgraphs. +++ +|[[label]]`@label`|`String`|+++ +Sets human readable graph node label ++++ |[[node]]`@node`|`link:dataobjects.html#NodeOptions[NodeOptions]`|+++ Node options define a node factory and its configuration. +++ diff --git a/task/factory/default/src/main/java/io/knotx/fragments/task/factory/generic/GraphNodeOptions.java b/task/factory/default/src/main/java/io/knotx/fragments/task/factory/generic/GraphNodeOptions.java index 25c31193..53dbaea8 100644 --- a/task/factory/default/src/main/java/io/knotx/fragments/task/factory/generic/GraphNodeOptions.java +++ b/task/factory/default/src/main/java/io/knotx/fragments/task/factory/generic/GraphNodeOptions.java @@ -15,6 +15,7 @@ */ package io.knotx.fragments.task.factory.generic; +import com.google.common.base.Objects; import io.knotx.fragments.task.factory.generic.node.NodeOptions; import io.knotx.fragments.task.factory.generic.node.action.ActionNodeConfig; import io.knotx.fragments.task.factory.generic.node.action.ActionNodeFactory; @@ -25,7 +26,6 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; /** @@ -35,6 +35,7 @@ public class GraphNodeOptions { private NodeOptions node; + private String label; private Map onTransitions; public GraphNodeOptions(NodeOptions nodeOptions, Map transitions) { @@ -88,6 +89,24 @@ public GraphNodeOptions setNode(NodeOptions node) { return this; } + /** + * @return graph node label + */ + public String getLabel() { + return label; + } + + /** + * Sets human readable graph node label + * + * @param label graph node label + * @return reference to this, so the API can be used fluently + */ + public GraphNodeOptions setLabel(String label) { + this.label = label; + return this; + } + /** * It specifies the next graph node for the given transition. If no graph edge is defined, then an * empty value is returned. @@ -164,19 +183,21 @@ public boolean equals(Object o) { return false; } GraphNodeOptions that = (GraphNodeOptions) o; - return Objects.equals(node, that.node) && - Objects.equals(onTransitions, that.onTransitions); + return Objects.equal(node, that.node) && + Objects.equal(label, that.label) && + Objects.equal(onTransitions, that.onTransitions); } @Override public int hashCode() { - return Objects.hash(node, onTransitions); + return Objects.hashCode(node, label, onTransitions); } @Override public String toString() { return "GraphNodeOptions{" + "node=" + node + + ", label='" + label + '\'' + ", onTransitions=" + onTransitions + '}'; } diff --git a/task/factory/default/src/test/java/io/knotx/fragments/task/factory/generic/GraphNodeOptionsTest.java b/task/factory/default/src/test/java/io/knotx/fragments/task/factory/generic/GraphNodeOptionsTest.java index c63b93cf..ba045513 100644 --- a/task/factory/default/src/test/java/io/knotx/fragments/task/factory/generic/GraphNodeOptionsTest.java +++ b/task/factory/default/src/test/java/io/knotx/fragments/task/factory/generic/GraphNodeOptionsTest.java @@ -87,6 +87,20 @@ void expectTransitionSuccessWithNodeBThenNodeC(Vertx vertx) throws Throwable { }, vertx); } + @Test + @DisplayName("Expect nodes with properly configured labels") + void expectTaskWithProperlyConfiguredLabels(Vertx vertx) throws Throwable { + verify("conf/taskWithLabels.conf", config -> { + GraphNodeOptions graphNodeOptions = new GraphNodeOptions(config); + assertEquals("a-label", graphNodeOptions.getLabel()); + Optional nodeB = graphNodeOptions.get(SUCCESS_TRANSITION); + assertTrue(nodeB.isPresent()); + assertEquals("b-label", nodeB.get().getLabel()); + Optional nodec = nodeB.get().get(SUCCESS_TRANSITION); + assertTrue(nodec.isPresent()); + assertEquals("c-label", nodec.get().getLabel()); + }, vertx); + } private Consumer validateActionNode() { return config -> { diff --git a/task/factory/default/src/test/resources/conf/taskWithLabels.conf b/task/factory/default/src/test/resources/conf/taskWithLabels.conf new file mode 100644 index 00000000..eb308111 --- /dev/null +++ b/task/factory/default/src/test/resources/conf/taskWithLabels.conf @@ -0,0 +1,15 @@ +# node & transitions +action = a +label = a-label +onTransitions { + _success { + action = b + label = b-label + onTransitions { + _success { + action = c + label = c-label + } + } + } +} \ No newline at end of file