in src/main/java/org/apache/nifi/components/resource/StandardResourceReferenceFactory.java [55:115]
public ResourceReference createResourceReference(final String value, final ResourceDefinition resourceDefinition) {
if (value == null) {
return null;
}
final String trimmed = value.trim();
if (trimmed.isEmpty()) {
return null;
}
if (resourceDefinition == null) {
return null;
}
final Set<ResourceType> allowedResourceTypes = resourceDefinition.getResourceTypes();
if (allowedResourceTypes.contains(ResourceType.URL)) {
try {
if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) {
return new URLResourceReference(URI.create(trimmed).toURL());
}
if (trimmed.startsWith("file:")) {
final URL url = URI.create(trimmed).toURL();
final String filename = url.getFile();
final File file = new File(filename);
return new FileResourceReference(file);
}
} catch (MalformedURLException e) {
throw new IllegalArgumentException("Invalid URL: " + trimmed);
}
}
final boolean fileAllowed = allowedResourceTypes.contains(ResourceType.FILE) || allowedResourceTypes.contains(ResourceType.DIRECTORY);
final boolean textAllowed = allowedResourceTypes.contains(ResourceType.TEXT);
if (fileAllowed && textAllowed) {
// We have to make a determination whether this is a file or text. Eventually, it will be best if the user tells us explicitly.
// For now, we will make a determination based on a couple of simple rules.
final File file = new File(trimmed);
if (file.isAbsolute() || file.exists()) {
return new FileResourceReference(file);
}
if (trimmed.startsWith("./") || trimmed.startsWith(".\\")) {
return new FileResourceReference(file);
}
return new Utf8TextResource(value); // Use explicit value, not trimmed value, as the white space may be important for textual content.
}
if (fileAllowed) {
final File file = new File(trimmed);
return new FileResourceReference(file);
}
if (textAllowed) {
return new Utf8TextResource(value);
}
return null;
}