Skip to content

Commit a50a385

Browse files
authored
NIFI-15360 Add support for Parameter Tags (#36)
Signed-off-by: David Handermann <exceptionfactory@apache.org>
1 parent ee7b135 commit a50a385

File tree

3 files changed

+143
-2
lines changed

3 files changed

+143
-2
lines changed

src/main/java/org/apache/nifi/parameter/Parameter.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class Parameter {
2929
private final String parameterContextId;
3030
private final boolean provided;
3131
private final List<Asset> referencedAssets;
32+
private final List<ParameterTag> tags;
3233

3334
private Parameter(final Builder builder) {
3435
this.descriptor = new ParameterDescriptor.Builder()
@@ -39,6 +40,7 @@ private Parameter(final Builder builder) {
3940

4041
this.parameterContextId = builder.parameterContextId;
4142
this.provided = builder.provided;
43+
this.tags = builder.tags;
4244

4345
this.referencedAssets = builder.referencedAssets;
4446
if (this.referencedAssets == null || this.referencedAssets.isEmpty()) {
@@ -67,6 +69,13 @@ public String getParameterContextId() {
6769
return parameterContextId;
6870
}
6971

72+
/**
73+
* @return The list of tags associated with this parameter, never null
74+
*/
75+
public List<ParameterTag> getTags() {
76+
return tags;
77+
}
78+
7079
@Override
7180
public boolean equals(final Object o) {
7281
if (this == o) {
@@ -81,12 +90,13 @@ public boolean equals(final Object o) {
8190
return Objects.equals(descriptor, parameter.descriptor)
8291
&& Objects.equals(value, parameter.value)
8392
&& Objects.equals(parameterContextId, parameter.parameterContextId)
84-
&& Objects.equals(referencedAssets, parameter.referencedAssets);
93+
&& Objects.equals(referencedAssets, parameter.referencedAssets)
94+
&& Objects.equals(tags, parameter.tags);
8595
}
8696

8797
@Override
8898
public int hashCode() {
89-
return Objects.hash(descriptor, value);
99+
return Objects.hash(descriptor, value, tags);
90100
}
91101

92102
/**
@@ -105,12 +115,14 @@ public static class Builder {
105115
private String parameterContextId;
106116
private boolean provided;
107117
private List<Asset> referencedAssets = List.of();
118+
private List<ParameterTag> tags = List.of();
108119

109120
public Builder fromParameter(final Parameter parameter) {
110121
descriptor(parameter.getDescriptor());
111122
this.parameterContextId = parameter.getParameterContextId();
112123
this.provided = parameter.isProvided();
113124
this.referencedAssets = parameter.getReferencedAssets() == null ? List.of() : parameter.getReferencedAssets();
125+
this.tags = parameter.getTags() == null ? List.of() : parameter.getTags();
114126
if (this.referencedAssets.isEmpty()) {
115127
this.value = parameter.getValue();
116128
}
@@ -165,6 +177,11 @@ public Builder referencedAssets(final List<Asset> referencedAssets) {
165177
return this;
166178
}
167179

180+
public Builder tags(final List<ParameterTag> tags) {
181+
this.tags = tags == null ? List.of() : tags;
182+
return this;
183+
}
184+
168185
public Parameter build() {
169186
if (name == null) {
170187
throw new IllegalStateException("Name or Descriptor is required");
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package org.apache.nifi.parameter;
18+
19+
import java.util.Objects;
20+
21+
/**
22+
* Represents a tag associated with a parameter, consisting of a key-value pair.
23+
* Tags can be used to store metadata about parameters, such as information
24+
* retrieved from external parameter providers that support tagging.
25+
*/
26+
public class ParameterTag {
27+
private final String key;
28+
private final String value;
29+
30+
public ParameterTag(final String key, final String value) {
31+
this.key = Objects.requireNonNull(key, "Tag key is required");
32+
this.value = value;
33+
}
34+
35+
/**
36+
* @return The key of the tag
37+
*/
38+
public String getKey() {
39+
return key;
40+
}
41+
42+
/**
43+
* @return The value of the tag, may be null
44+
*/
45+
public String getValue() {
46+
return value;
47+
}
48+
49+
@Override
50+
public boolean equals(final Object o) {
51+
if (this == o) {
52+
return true;
53+
}
54+
if (o == null || getClass() != o.getClass()) {
55+
return false;
56+
}
57+
final ParameterTag that = (ParameterTag) o;
58+
return Objects.equals(key, that.key) && Objects.equals(value, that.value);
59+
}
60+
61+
@Override
62+
public int hashCode() {
63+
return Objects.hash(key, value);
64+
}
65+
66+
@Override
67+
public String toString() {
68+
return "ParameterTag[key=" + key + ", value=" + value + "]";
69+
}
70+
}
71+

src/test/java/org/apache/nifi/parameter/TestParameter.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,59 @@ public void testCreateParameterFromOtherThenOverrideWithDifferentValue() {
175175
assertEquals(0, parameter.getReferencedAssets().size());
176176
}
177177

178+
@Test
179+
public void testCreateParameterWithTags() {
180+
final List<ParameterTag> tags = List.of(
181+
new ParameterTag("environment", "production"),
182+
new ParameterTag("sensitive", "false")
183+
);
184+
185+
final Parameter parameter = new Parameter.Builder()
186+
.name("A")
187+
.value("value")
188+
.tags(tags)
189+
.build();
190+
191+
assertEquals("A", parameter.getDescriptor().getName());
192+
assertEquals("value", parameter.getValue());
193+
assertNotNull(parameter.getTags());
194+
assertEquals(2, parameter.getTags().size());
195+
assertEquals("environment", parameter.getTags().get(0).getKey());
196+
assertEquals("production", parameter.getTags().get(0).getValue());
197+
assertEquals("sensitive", parameter.getTags().get(1).getKey());
198+
assertEquals("false", parameter.getTags().get(1).getValue());
199+
}
200+
201+
@Test
202+
public void testCreateParameterWithoutTags() {
203+
final Parameter parameter = new Parameter.Builder()
204+
.name("A")
205+
.value("value")
206+
.build();
207+
208+
assertNotNull(parameter.getTags());
209+
assertTrue(parameter.getTags().isEmpty());
210+
}
211+
212+
@Test
213+
public void testCreateParameterFromOtherWithTags() {
214+
final List<ParameterTag> tags = List.of(new ParameterTag("key", "value"));
215+
216+
final Parameter original = new Parameter.Builder()
217+
.name("A")
218+
.value("value")
219+
.tags(tags)
220+
.build();
221+
222+
final Parameter parameter = new Parameter.Builder()
223+
.fromParameter(original)
224+
.build();
225+
226+
assertEquals(1, parameter.getTags().size());
227+
assertEquals("key", parameter.getTags().getFirst().getKey());
228+
assertEquals("value", parameter.getTags().getFirst().getValue());
229+
}
230+
178231
private static class MockAsset implements Asset {
179232
private final String identifier;
180233
private final String parameterContextIdentifier;

0 commit comments

Comments
 (0)