diff --git a/nifi-api/src/main/java/org/apache/nifi/components/PropertyValue.java b/nifi-api/src/main/java/org/apache/nifi/components/PropertyValue.java index 4e291e997e..53892622b2 100644 --- a/nifi-api/src/main/java/org/apache/nifi/components/PropertyValue.java +++ b/nifi-api/src/main/java/org/apache/nifi/components/PropertyValue.java @@ -122,7 +122,7 @@ public interface PropertyValue { ResourceReference asResource(); /** - * @return a ResourceReferences for the configured property value. If no property value is set, a ResourceRferences will be returned that references no resources. + * @return a ResourceReferences for the configured property value. If no property value is set, a ResourceReferences will be returned that references no resources. * I.e., this method will never return null. */ ResourceReferences asResources(); diff --git a/nifi-api/src/main/java/org/apache/nifi/components/resource/StandardResourceReferenceFactory.java b/nifi-api/src/main/java/org/apache/nifi/components/resource/StandardResourceReferenceFactory.java index acc85e5ef4..538496182d 100644 --- a/nifi-api/src/main/java/org/apache/nifi/components/resource/StandardResourceReferenceFactory.java +++ b/nifi-api/src/main/java/org/apache/nifi/components/resource/StandardResourceReferenceFactory.java @@ -27,18 +27,20 @@ import java.util.Set; public class StandardResourceReferenceFactory implements ResourceReferenceFactory { + private static final ResourceReferences EMPTY_RESOURCE_REFERENCES = new StandardResourceReferences(Collections.emptyList()); + public ResourceReferences createResourceReferences(final String value, final ResourceDefinition resourceDefinition) { if (value == null) { - return new StandardResourceReferences(Collections.emptyList()); + return EMPTY_RESOURCE_REFERENCES; } final String trimmed = value.trim(); if (trimmed.isEmpty()) { - return null; + return EMPTY_RESOURCE_REFERENCES; } if (resourceDefinition == null) { - return null; + return EMPTY_RESOURCE_REFERENCES; } final List references; diff --git a/nifi-api/src/main/java/org/apache/nifi/components/resource/StandardResourceReferences.java b/nifi-api/src/main/java/org/apache/nifi/components/resource/StandardResourceReferences.java index 0b240beed9..11ce05777a 100644 --- a/nifi-api/src/main/java/org/apache/nifi/components/resource/StandardResourceReferences.java +++ b/nifi-api/src/main/java/org/apache/nifi/components/resource/StandardResourceReferences.java @@ -25,10 +25,10 @@ import java.util.List; import java.util.Objects; public class StandardResourceReferences implements ResourceReferences { - public List resourceReferences; + public final List resourceReferences; public StandardResourceReferences(final List resourceReferences) { - this.resourceReferences = Objects.requireNonNull(resourceReferences); + this.resourceReferences = new ArrayList<>(Objects.requireNonNull(resourceReferences)); } @Override diff --git a/nifi-api/src/test/java/org/apache/nifi/components/resource/TestStandardResourceReferenceFactory.java b/nifi-api/src/test/java/org/apache/nifi/components/resource/TestStandardResourceReferenceFactory.java new file mode 100644 index 0000000000..35a274f7ff --- /dev/null +++ b/nifi-api/src/test/java/org/apache/nifi/components/resource/TestStandardResourceReferenceFactory.java @@ -0,0 +1,93 @@ +/* + * 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.components.resource; + +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class TestStandardResourceReferenceFactory { + + private final StandardResourceReferenceFactory subject = new StandardResourceReferenceFactory(); + + @Test + public void testCreateResourceReferences() { + String value = "/dir1/test1.jar,/dir2/test2.jar"; + ResourceDefinition resourceDefinition = createResourceDefinition(); + + ResourceReferences resourceReferences = subject.createResourceReferences(value, resourceDefinition); + + assertNotNull(resourceReferences); + + List resourceReferencesList = resourceReferences.asList(); + assertNotNull(resourceReferencesList); + assertEquals(2, resourceReferencesList.size()); + + assertResourceReference(resourceReferencesList.get(0), "/dir1/test1.jar"); + assertResourceReference(resourceReferencesList.get(1), "/dir2/test2.jar"); + } + + @Test + public void testCreateResourceReferencesWhenValueIsNull() { + String value = null; + ResourceDefinition resourceDefinition = createResourceDefinition(); + + ResourceReferences resourceReferences = subject.createResourceReferences(value, resourceDefinition); + + assertEmptyResourceReferences(resourceReferences); + } + + @Test + public void testCreateResourceReferencesWhenValueIsEmpty() { + String value = ""; + ResourceDefinition resourceDefinition = createResourceDefinition(); + + ResourceReferences resourceReferences = subject.createResourceReferences(value, resourceDefinition); + + assertEmptyResourceReferences(resourceReferences); + } + @Test + public void testCreateResourceReferencesWhenResourceDefinitionIsNull() { + String value = "/dir1/test1.jar"; + ResourceDefinition resourceDefinition = null; + + ResourceReferences resourceReferences = subject.createResourceReferences(value, resourceDefinition); + + assertEmptyResourceReferences(resourceReferences); + } + + private StandardResourceDefinition createResourceDefinition() { + return new StandardResourceDefinition(ResourceCardinality.SINGLE, Collections.singleton(ResourceType.FILE)); + } + + private void assertResourceReference(ResourceReference resourceReference, String location) { + assertEquals(location, resourceReference.getLocation()); + assertEquals(ResourceType.FILE, resourceReference.getResourceType()); + } + + private void assertEmptyResourceReferences(ResourceReferences resourceReferences) { + assertNotNull(resourceReferences); + assertNotNull(resourceReferences.asList()); + assertTrue(resourceReferences.asList().isEmpty()); + } +}