Repository: nifi
Updated Branches:
  refs/heads/0.x 90c749d73 -> 2cdb1c190


http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/processor/TestStandardPropertyValue.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/processor/TestStandardPropertyValue.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/processor/TestStandardPropertyValue.java
index cebedaf..4dfac22 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/processor/TestStandardPropertyValue.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/processor/TestStandardPropertyValue.java
@@ -29,15 +29,19 @@ import org.apache.nifi.controller.ControllerService;
 import org.apache.nifi.controller.ControllerServiceLookup;
 import org.apache.nifi.controller.repository.StandardFlowFileRecord;
 import org.apache.nifi.flowfile.FlowFile;
+import org.apache.nifi.registry.VariableRegistry;
+import org.apache.nifi.registry.VariableRegistryUtils;
 import org.junit.Test;
 
+
 public class TestStandardPropertyValue {
 
     private final ControllerServiceLookup lookup = new 
TestControllerServiceLookup();
+    private final VariableRegistry variableRegistry = 
VariableRegistryUtils.createVariableRegistry();
 
     @Test
     public void testSubstituteAttributesWithOneMatchingArg() {
-        final PropertyValue value = new StandardPropertyValue("Hello, 
${audience}!", lookup);
+        final PropertyValue value = new StandardPropertyValue("Hello, 
${audience}!", lookup, variableRegistry);
         final Map<String, String> attributes = new HashMap<>();
         attributes.put("audience", "World");
         assertEquals("Hello, World!", 
value.evaluateAttributeExpressions(createFlowFile(attributes)).getValue());
@@ -45,7 +49,7 @@ public class TestStandardPropertyValue {
 
     @Test
     public void testMissingEndBraceEvaluatesToStringLiteral() {
-        final PropertyValue value = new StandardPropertyValue("Hello, 
${audience!", lookup);
+        final PropertyValue value = new StandardPropertyValue("Hello, 
${audience!", lookup, variableRegistry);
         final Map<String, String> attributes = new HashMap<>();
         attributes.put("audience", "World");
         assertEquals("Hello, ${audience!", 
value.evaluateAttributeExpressions(createFlowFile(attributes)).getValue());
@@ -53,7 +57,7 @@ public class TestStandardPropertyValue {
 
     @Test
     public void testEscaped() {
-        final PropertyValue value = new StandardPropertyValue("Hello, 
$${audience}!", lookup);
+        final PropertyValue value = new StandardPropertyValue("Hello, 
$${audience}!", lookup, variableRegistry);
         final Map<String, String> attributes = new HashMap<>();
         attributes.put("audience", "World");
         assertEquals("Hello, ${audience}!", 
value.evaluateAttributeExpressions(createFlowFile(attributes)).getValue());
@@ -61,7 +65,7 @@ public class TestStandardPropertyValue {
 
     @Test
     public void testSubstituteAttributesWithMultipleMatchingArgs() {
-        final PropertyValue value = new StandardPropertyValue("Hello, 
${audience}${comma}${question}!", lookup);
+        final PropertyValue value = new StandardPropertyValue("Hello, 
${audience}${comma}${question}!", lookup, variableRegistry);
         final Map<String, String> attributes = new HashMap<>();
         attributes.put("audience", "World");
         attributes.put("comma", ",");
@@ -71,14 +75,14 @@ public class TestStandardPropertyValue {
 
     @Test
     public void testSubstituteAttributesWithNoMatch() {
-        final PropertyValue value = new StandardPropertyValue("Hello, 
${audience}${comma}${question:replaceNull('')}!", lookup);
+        final PropertyValue value = new StandardPropertyValue("Hello, 
${audience}${comma}${question:replaceNull('')}!", lookup, variableRegistry);
         final Map<String, String> attributes = new HashMap<>();
         assertEquals("Hello, !", 
value.evaluateAttributeExpressions(createFlowFile(attributes)).getValue());
     }
 
     @Test
     public void testSubstituteAttributesRecursively() {
-        final PropertyValue value = new StandardPropertyValue("Hello, 
${'${a}${b}'}!", lookup);
+        final PropertyValue value = new StandardPropertyValue("Hello, 
${'${a}${b}'}!", lookup, variableRegistry);
         final Map<String, String> attributes = new HashMap<>();
         attributes.put("a", "b");
         attributes.put("b", "World");
@@ -88,7 +92,7 @@ public class TestStandardPropertyValue {
 
     @Test
     public void testGetValueAsIntegerAfterSubstitute() {
-        final PropertyValue value = new StandardPropertyValue("1${value}", 
lookup);
+        final PropertyValue value = new StandardPropertyValue("1${value}", 
lookup, variableRegistry);
         final Map<String, String> attributes = new HashMap<>();
         attributes.put("value", "39");
         assertEquals(139, 
value.evaluateAttributeExpressions(createFlowFile(attributes)).asInteger().intValue());
@@ -96,7 +100,7 @@ public class TestStandardPropertyValue {
 
     @Test(expected = NumberFormatException.class)
     public void testGetValueAsIntegerAfterSubstitutingWithNonInteger() {
-        final PropertyValue value = new StandardPropertyValue("1${value}", 
lookup);
+        final PropertyValue value = new StandardPropertyValue("1${value}", 
lookup, variableRegistry);
         final Map<String, String> attributes = new HashMap<>();
         attributes.put("value", "Yes");
         final PropertyValue substituted = 
value.evaluateAttributeExpressions(createFlowFile(attributes));
@@ -105,7 +109,7 @@ public class TestStandardPropertyValue {
 
     @Test
     public void testFileSize() {
-        final PropertyValue value = new StandardPropertyValue("${fileSize}", 
lookup);
+        final PropertyValue value = new StandardPropertyValue("${fileSize}", 
lookup, variableRegistry);
         final FlowFile flowFile = new 
StandardFlowFileRecord.Builder().size(1024 * 1024L).build();
         final long val = 
value.evaluateAttributeExpressions(flowFile).asLong().longValue();
         assertEquals(1024 * 1024L, val);
@@ -115,7 +119,7 @@ public class TestStandardPropertyValue {
     public void testFlowFileEntryYear() {
         final Calendar now = Calendar.getInstance();
         final int year = now.get(Calendar.YEAR);
-        final PropertyValue value = new 
StandardPropertyValue("${entryDate:toNumber():toDate():format('yyyy')}", 
lookup);
+        final PropertyValue value = new 
StandardPropertyValue("${entryDate:toNumber():toDate():format('yyyy')}", 
lookup, variableRegistry);
         final FlowFile flowFile = new 
StandardFlowFileRecord.Builder().entryDate(now.getTimeInMillis()).build();
         final int val = 
value.evaluateAttributeExpressions(flowFile).asInteger().intValue();
         assertEquals(year, val);
@@ -125,7 +129,7 @@ public class TestStandardPropertyValue {
     public void testSystemProperty() {
         System.setProperty("Prop1", "Foo");
         System.setProperty("Prop2", "Bar");
-        final PropertyValue value = new 
StandardPropertyValue("${Prop1}${Prop2}${abc}", lookup);
+        final PropertyValue value = new 
StandardPropertyValue("${Prop1}${Prop2}${abc}", lookup, 
VariableRegistryUtils.createVariableRegistry());
         final Map<String, String> attributes = new HashMap<>();
         attributes.put("abc", "Baz");
         final FlowFile flowFile = createFlowFile(attributes);
@@ -171,5 +175,6 @@ public class TestStandardPropertyValue {
         public boolean isControllerServiceEnabling(String serviceIdentifier) {
             return false;
         }
+
     }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/nifi.properties
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/nifi.properties
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/nifi.properties
index 24d2295..7b64982 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/nifi.properties
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/nifi.properties
@@ -185,4 +185,8 @@ 
nifi.cluster.manager.safemode.duration=${nifi.cluster.manager.safemode.duration}
 nifi.kerberos.krb5.file=${nifi.kerberos.krb5.file}
 nifi.kerberos.service.principal=${nifi.kerberos.service.principal}
 nifi.kerberos.keytab.location=${nifi.kerberos.keytab.location}
-nifi.kerberos.authentication.expiration=${nifi.kerberos.authentication.expiration}
\ No newline at end of file
+nifi.kerberos.authentication.expiration=${nifi.kerberos.authentication.expiration}
+
+# external properties files for variable registry
+# supports a comma delimited list of file locations
+nifi.variable.registry.properties=
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiWebConfigurationContext.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiWebConfigurationContext.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiWebConfigurationContext.java
index 9076063..d1d0796 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiWebConfigurationContext.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiWebConfigurationContext.java
@@ -30,6 +30,9 @@ import org.apache.nifi.cluster.manager.impl.WebClusterManager;
 import org.apache.nifi.controller.ControllerService;
 import org.apache.nifi.controller.ControllerServiceLookup;
 import org.apache.nifi.controller.reporting.ReportingTaskProvider;
+import org.apache.nifi.registry.VariableRegistry;
+import org.apache.nifi.registry.VariableRegistryFactory;
+import org.apache.nifi.registry.VariableRegistryUtils;
 import org.apache.nifi.user.NiFiUser;
 import org.apache.nifi.util.NiFiProperties;
 import org.apache.nifi.web.api.dto.ControllerServiceDTO;
@@ -54,6 +57,8 @@ import 
org.springframework.security.core.context.SecurityContextHolder;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
+
+import java.io.IOException;
 import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
@@ -244,6 +249,17 @@ public class StandardNiFiWebConfigurationContext 
implements NiFiWebConfiguration
         return componentFacade;
     }
 
+    @Override
+    public VariableRegistry getVariableRegistry() {
+        VariableRegistry variableRegistry = 
VariableRegistryUtils.createVariableRegistry();
+        try {
+            
variableRegistry.addRegistry(VariableRegistryFactory.getPropertiesInstance(properties.getVariableRegistryPropertiesPaths()));
+        }catch(IOException ioe){
+            logger.error("Exception occurred loading custom properties",ioe);
+        }
+        return variableRegistry;
+    }
+
     /**
      * Facade over accessing different types of NiFi components.
      */
@@ -848,5 +864,4 @@ public class StandardNiFiWebConfigurationContext implements 
NiFiWebConfiguration
     public void setReportingTaskProvider(ReportingTaskProvider 
reportingTaskProvider) {
         this.reportingTaskProvider = reportingTaskProvider;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/StandardSearchContext.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/StandardSearchContext.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/StandardSearchContext.java
index f673075..1ef12ee 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/StandardSearchContext.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/StandardSearchContext.java
@@ -53,7 +53,7 @@ public class StandardSearchContext implements SearchContext {
     @Override
     public PropertyValue getProperty(PropertyDescriptor property) {
         final String configuredValue = processorNode.getProperty(property);
-        return new StandardPropertyValue(configuredValue == null ? 
property.getDefaultValue() : configuredValue, controllerServiceLookup, null);
+        return new StandardPropertyValue(configuredValue == null ? 
property.getDefaultValue() : configuredValue, controllerServiceLookup,null);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/test/java/org/apache/nifi/processors/script/TestInvokeGroovy.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/test/java/org/apache/nifi/processors/script/TestInvokeGroovy.java
 
b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/test/java/org/apache/nifi/processors/script/TestInvokeGroovy.java
index 2dc700d..e57ad8a 100644
--- 
a/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/test/java/org/apache/nifi/processors/script/TestInvokeGroovy.java
+++ 
b/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/test/java/org/apache/nifi/processors/script/TestInvokeGroovy.java
@@ -18,6 +18,8 @@ package org.apache.nifi.processors.script;
 
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.processor.Relationship;
+import org.apache.nifi.registry.VariableRegistry;
+import org.apache.nifi.registry.VariableRegistryUtils;
 import org.apache.nifi.util.MockFlowFile;
 import org.apache.nifi.util.MockProcessContext;
 import org.apache.nifi.util.MockProcessorInitializationContext;
@@ -37,9 +39,12 @@ import static org.junit.Assert.assertTrue;
 
 public class TestInvokeGroovy extends BaseScriptTest {
 
+    private VariableRegistry variableRegistry;
+
     @Before
     public void setup() throws Exception {
         super.setupInvokeScriptProcessor();
+        variableRegistry = VariableRegistryUtils.createVariableRegistry();
     }
 
     /**
@@ -72,7 +77,7 @@ public class TestInvokeGroovy extends BaseScriptTest {
     @Test
     public void testScriptDefinedAttribute() throws Exception {
         InvokeScriptedProcessor processor = new InvokeScriptedProcessor();
-        MockProcessContext context = new MockProcessContext(processor);
+        MockProcessContext context = new MockProcessContext(processor, 
variableRegistry);
         MockProcessorInitializationContext initContext = new 
MockProcessorInitializationContext(processor, context);
 
         processor.initialize(initContext);
@@ -81,7 +86,7 @@ public class TestInvokeGroovy extends BaseScriptTest {
         context.setProperty(InvokeScriptedProcessor.SCRIPT_FILE, 
"target/test/resources/groovy/test_reader.groovy");
         context.setProperty(InvokeScriptedProcessor.MODULES, 
"target/test/resources/groovy");
         // State Manger is unused, and a null reference is specified
-        processor.customValidate(new MockValidationContext(context, null));
+        processor.customValidate(new MockValidationContext(context, null, 
variableRegistry));
         processor.setup(context);
 
         List<PropertyDescriptor> descriptors = 
processor.getSupportedPropertyDescriptors();
@@ -106,7 +111,7 @@ public class TestInvokeGroovy extends BaseScriptTest {
     @Test
     public void testScriptDefinedRelationship() throws Exception {
         InvokeScriptedProcessor processor = new InvokeScriptedProcessor();
-        MockProcessContext context = new MockProcessContext(processor);
+        MockProcessContext context = new MockProcessContext(processor, 
variableRegistry);
         MockProcessorInitializationContext initContext = new 
MockProcessorInitializationContext(processor, context);
 
         processor.initialize(initContext);
@@ -114,7 +119,7 @@ public class TestInvokeGroovy extends BaseScriptTest {
         context.setProperty(InvokeScriptedProcessor.SCRIPT_ENGINE, "Groovy");
         context.setProperty(InvokeScriptedProcessor.SCRIPT_FILE, 
"target/test/resources/groovy/test_reader.groovy");
         // State Manger is unused, and a null reference is specified
-        processor.customValidate(new MockValidationContext(context, null));
+        processor.customValidate(new MockValidationContext(context, null, 
variableRegistry));
         processor.setup(context);
 
         Set<Relationship> relationships = processor.getRelationships();

http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-site-to-site-reporting-bundle/nifi-site-to-site-reporting-task/src/test/java/org/apache/nifi/reporting/TestSiteToSiteProvenanceReportingTask.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-site-to-site-reporting-bundle/nifi-site-to-site-reporting-task/src/test/java/org/apache/nifi/reporting/TestSiteToSiteProvenanceReportingTask.java
 
b/nifi-nar-bundles/nifi-site-to-site-reporting-bundle/nifi-site-to-site-reporting-task/src/test/java/org/apache/nifi/reporting/TestSiteToSiteProvenanceReportingTask.java
index 265bdd0..12a5e4c 100644
--- 
a/nifi-nar-bundles/nifi-site-to-site-reporting-bundle/nifi-site-to-site-reporting-task/src/test/java/org/apache/nifi/reporting/TestSiteToSiteProvenanceReportingTask.java
+++ 
b/nifi-nar-bundles/nifi-site-to-site-reporting-bundle/nifi-site-to-site-reporting-task/src/test/java/org/apache/nifi/reporting/TestSiteToSiteProvenanceReportingTask.java
@@ -39,6 +39,7 @@ import org.apache.nifi.provenance.ProvenanceEventRecord;
 import org.apache.nifi.provenance.ProvenanceEventRepository;
 import org.apache.nifi.provenance.ProvenanceEventType;
 import org.apache.nifi.provenance.StandardProvenanceEventRecord;
+import org.apache.nifi.registry.VariableRegistryUtils;
 import org.apache.nifi.remote.Transaction;
 import org.apache.nifi.remote.TransferDirection;
 import org.apache.nifi.remote.client.SiteToSiteClient;
@@ -126,7 +127,7 @@ public class TestSiteToSiteProvenanceReportingTask {
             @Override
             public PropertyValue answer(final InvocationOnMock invocation) 
throws Throwable {
                 final PropertyDescriptor descriptor = 
invocation.getArgumentAt(0, PropertyDescriptor.class);
-                return new MockPropertyValue(properties.get(descriptor), null);
+                return new MockPropertyValue(properties.get(descriptor), null, 
VariableRegistryUtils.createVariableRegistry());
             }
         }).when(context).getProperty(Mockito.any(PropertyDescriptor.class));
 
@@ -181,4 +182,6 @@ public class TestSiteToSiteProvenanceReportingTask {
         mockFlowFile.putAttributes(attributes);
         return mockFlowFile;
     }
+
+
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestRouteOnAttribute.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestRouteOnAttribute.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestRouteOnAttribute.java
index 66dc854..7c6435d 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestRouteOnAttribute.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestRouteOnAttribute.java
@@ -26,6 +26,8 @@ import java.util.Map;
 
 import org.apache.nifi.components.ValidationResult;
 import org.apache.nifi.processor.Relationship;
+import org.apache.nifi.registry.VariableRegistry;
+import org.apache.nifi.registry.VariableRegistryUtils;
 import org.apache.nifi.state.MockStateManager;
 import org.apache.nifi.util.MockFlowFile;
 import org.apache.nifi.util.MockProcessContext;
@@ -36,10 +38,12 @@ import org.junit.Test;
 
 public class TestRouteOnAttribute {
 
+    private VariableRegistry variableRegistry = 
VariableRegistryUtils.createVariableRegistry();
+
     @Test
     public void testInvalidOnMisconfiguredProperty() {
         final RouteOnAttribute proc = new RouteOnAttribute();
-        final MockProcessContext ctx = new MockProcessContext(proc, new 
MockStateManager(proc));
+        final MockProcessContext ctx = new MockProcessContext(proc, new 
MockStateManager(proc), variableRegistry);
         final ValidationResult validationResult = ctx.setProperty("RouteA", 
"${a:equals('b')"); // Missing closing brace
         assertFalse(validationResult.isValid());
     }
@@ -47,7 +51,7 @@ public class TestRouteOnAttribute {
     @Test
     public void testInvalidOnNonBooleanProperty() {
         final RouteOnAttribute proc = new RouteOnAttribute();
-        final MockProcessContext ctx = new MockProcessContext(proc, new 
MockStateManager(proc));
+        final MockProcessContext ctx = new MockProcessContext(proc, new 
MockStateManager(proc), variableRegistry);
         final ValidationResult validationResult = ctx.setProperty("RouteA", 
"${a:length()"); // Should be boolean
         assertFalse(validationResult.isValid());
     }

http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-standard-services/nifi-distributed-cache-services-bundle/nifi-distributed-cache-server/src/test/java/org/apache/nifi/distributed/cache/server/TestServerAndClient.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-standard-services/nifi-distributed-cache-services-bundle/nifi-distributed-cache-server/src/test/java/org/apache/nifi/distributed/cache/server/TestServerAndClient.java
 
b/nifi-nar-bundles/nifi-standard-services/nifi-distributed-cache-services-bundle/nifi-distributed-cache-server/src/test/java/org/apache/nifi/distributed/cache/server/TestServerAndClient.java
index 82e4a99..ccd1dd5 100644
--- 
a/nifi-nar-bundles/nifi-standard-services/nifi-distributed-cache-services-bundle/nifi-distributed-cache-server/src/test/java/org/apache/nifi/distributed/cache/server/TestServerAndClient.java
+++ 
b/nifi-nar-bundles/nifi-standard-services/nifi-distributed-cache-services-bundle/nifi-distributed-cache-server/src/test/java/org/apache/nifi/distributed/cache/server/TestServerAndClient.java
@@ -41,6 +41,8 @@ import 
org.apache.nifi.distributed.cache.client.exception.DeserializationExcepti
 import org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer;
 import org.apache.nifi.processor.Processor;
 import org.apache.nifi.processor.util.StandardValidators;
+import org.apache.nifi.registry.VariableRegistry;
+import org.apache.nifi.registry.VariableRegistryUtils;
 import org.apache.nifi.reporting.InitializationException;
 import org.apache.nifi.util.MockConfigurationContext;
 import org.apache.nifi.util.MockControllerServiceInitializationContext;
@@ -55,6 +57,7 @@ import org.slf4j.LoggerFactory;
 public class TestServerAndClient {
 
     private static Logger LOGGER;
+    private static VariableRegistry variableRegistry = 
VariableRegistryUtils.createVariableRegistry();
 
     static {
         System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "info");
@@ -329,7 +332,7 @@ public class TestServerAndClient {
         clientProperties.put(DistributedMapCacheClientService.HOSTNAME, 
"localhost");
         clientProperties.put(DistributedMapCacheClientService.PORT, 
String.valueOf(server.getPort()));
         
clientProperties.put(DistributedMapCacheClientService.COMMUNICATIONS_TIMEOUT, 
"360 secs");
-        MockConfigurationContext clientContext = new 
MockConfigurationContext(clientProperties, 
clientInitContext.getControllerServiceLookup());
+        MockConfigurationContext clientContext = new 
MockConfigurationContext(clientProperties, 
clientInitContext.getControllerServiceLookup(), variableRegistry);
         client.cacheConfig(clientContext);
         final Serializer<String> valueSerializer = new StringSerializer();
         final Serializer<String> keySerializer = new StringSerializer();
@@ -375,7 +378,7 @@ public class TestServerAndClient {
         client2.initialize(clientInitContext2);
 
         MockConfigurationContext clientContext2 = new 
MockConfigurationContext(clientProperties,
-            clientInitContext2.getControllerServiceLookup());
+            clientInitContext2.getControllerServiceLookup(), variableRegistry);
         client2.cacheConfig(clientContext2);
         assertFalse(client2.putIfAbsent("testKey", "test", keySerializer, 
valueSerializer));
         assertTrue(client2.containsKey("testKey", keySerializer));
@@ -408,7 +411,7 @@ public class TestServerAndClient {
         server.initialize(serverInitContext);
 
         final Map<PropertyDescriptor, String> serverProperties = new 
HashMap<>();
-        final MockConfigurationContext serverContext = new 
MockConfigurationContext(serverProperties, 
serverInitContext.getControllerServiceLookup());
+        final MockConfigurationContext serverContext = new 
MockConfigurationContext(serverProperties, 
serverInitContext.getControllerServiceLookup(), variableRegistry);
         server.startServer(serverContext);
 
         DistributedMapCacheClientService client = new 
DistributedMapCacheClientService();
@@ -418,7 +421,7 @@ public class TestServerAndClient {
         final Map<PropertyDescriptor, String> clientProperties = new 
HashMap<>();
         clientProperties.put(DistributedMapCacheClientService.HOSTNAME, 
"localhost");
         
clientProperties.put(DistributedMapCacheClientService.COMMUNICATIONS_TIMEOUT, 
"360 secs");
-        MockConfigurationContext clientContext = new 
MockConfigurationContext(clientProperties, 
clientInitContext.getControllerServiceLookup());
+        MockConfigurationContext clientContext = new 
MockConfigurationContext(clientProperties, 
clientInitContext.getControllerServiceLookup(), variableRegistry);
         client.cacheConfig(clientContext);
         final Serializer<String> valueSerializer = new StringSerializer();
         final Serializer<String> keySerializer = new StringSerializer();
@@ -465,7 +468,7 @@ public class TestServerAndClient {
         final Map<PropertyDescriptor, String> clientProperties = new 
HashMap<>();
         clientProperties.put(DistributedSetCacheClientService.HOSTNAME, 
"localhost");
         clientProperties.put(DistributedSetCacheClientService.PORT, 
String.valueOf(port));
-        final MockConfigurationContext clientContext = new 
MockConfigurationContext(clientProperties, 
clientInitContext.getControllerServiceLookup());
+        final MockConfigurationContext clientContext = new 
MockConfigurationContext(clientProperties, 
clientInitContext.getControllerServiceLookup(), variableRegistry);
         client.onConfigured(clientContext);
 
         return client;

http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/test/java/org/apache/nifi/update/attributes/TestUpdateAttribute.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/test/java/org/apache/nifi/update/attributes/TestUpdateAttribute.java
 
b/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/test/java/org/apache/nifi/update/attributes/TestUpdateAttribute.java
index 90b51bd..d73b308 100644
--- 
a/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/test/java/org/apache/nifi/update/attributes/TestUpdateAttribute.java
+++ 
b/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/test/java/org/apache/nifi/update/attributes/TestUpdateAttribute.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.update.attributes;
 
+
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collection;
@@ -32,6 +33,7 @@ import org.apache.nifi.util.MockFlowFile;
 import org.apache.nifi.util.TestRunner;
 import org.apache.nifi.util.TestRunners;
 
+
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -43,6 +45,7 @@ public class TestUpdateAttribute {
 
     final static private String TEST_CONTENT = "THIS IS TEST CONTENT";
 
+
     private Map<String, String> getMap(String... keyValues) {
         final Map<String, String> map = new HashMap<>();
         if (keyValues != null) {

http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/UpdateAttributeModelFactory.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/UpdateAttributeModelFactory.java
 
b/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/UpdateAttributeModelFactory.java
index 0182d61..6102e82 100644
--- 
a/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/UpdateAttributeModelFactory.java
+++ 
b/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/UpdateAttributeModelFactory.java
@@ -23,6 +23,7 @@ import org.apache.nifi.attribute.expression.language.Query;
 import 
org.apache.nifi.attribute.expression.language.StandardExpressionLanguageCompiler;
 import 
org.apache.nifi.attribute.expression.language.exception.AttributeExpressionLanguageParsingException;
 import org.apache.nifi.expression.AttributeExpression.ResultType;
+import org.apache.nifi.registry.VariableRegistry;
 import org.apache.nifi.update.attributes.dto.ActionDTO;
 import org.apache.nifi.update.attributes.dto.ConditionDTO;
 import org.apache.nifi.update.attributes.dto.RuleDTO;
@@ -32,6 +33,12 @@ import org.apache.nifi.update.attributes.dto.RuleDTO;
  */
 public class UpdateAttributeModelFactory {
 
+    private final VariableRegistry variableRegistry;
+
+    public UpdateAttributeModelFactory(VariableRegistry variableRegistry) {
+        this.variableRegistry = variableRegistry;
+    }
+
     public Rule createRule(final RuleDTO dto) {
         if (dto == null) {
             throw new IllegalArgumentException("Rule must be specified.");
@@ -72,7 +79,7 @@ public class UpdateAttributeModelFactory {
         }
 
         // validate the condition's expression
-        final StandardExpressionLanguageCompiler elCompiler = new 
StandardExpressionLanguageCompiler();
+        final StandardExpressionLanguageCompiler elCompiler = new 
StandardExpressionLanguageCompiler(variableRegistry);
         final String syntaxError = 
elCompiler.validateExpression(dto.getExpression(), false);
         if (syntaxError != null) {
             throw new IllegalArgumentException(syntaxError);

http://git-wip-us.apache.org/repos/asf/nifi/blob/c600f150/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/api/RuleResource.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/api/RuleResource.java
 
b/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/api/RuleResource.java
index b211b72..f099b55 100644
--- 
a/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/api/RuleResource.java
+++ 
b/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/api/RuleResource.java
@@ -46,6 +46,7 @@ import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.UriBuilder;
 import javax.ws.rs.core.UriInfo;
 
+import org.apache.nifi.registry.VariableRegistry;
 import org.apache.nifi.update.attributes.Action;
 import org.apache.nifi.update.attributes.Condition;
 import org.apache.nifi.update.attributes.Criteria;
@@ -187,6 +188,7 @@ public class RuleResource {
 
         // get the web context
         final NiFiWebConfigurationContext configurationContext = 
(NiFiWebConfigurationContext) 
servletContext.getAttribute("nifi-web-configuration-context");
+        final VariableRegistry variableRegistry = 
configurationContext.getVariableRegistry();
 
         // ensure the rule has been specified
         if (requestEntity == null || requestEntity.getRule() == null) {
@@ -219,7 +221,7 @@ public class RuleResource {
 
         // load the criteria
         final Criteria criteria = getCriteria(configurationContext, 
requestContext);
-        final UpdateAttributeModelFactory factory = new 
UpdateAttributeModelFactory();
+        final UpdateAttributeModelFactory factory = new 
UpdateAttributeModelFactory(variableRegistry);
 
         // create the new rule
         final Rule rule;
@@ -261,10 +263,14 @@ public class RuleResource {
         // generate a new id
         final String uuid = UUID.randomUUID().toString();
 
+        // get the variable registry
+        final NiFiWebConfigurationContext configurationContext = 
(NiFiWebConfigurationContext) 
servletContext.getAttribute("nifi-web-configuration-context");
+        final VariableRegistry variableRegistry = 
configurationContext.getVariableRegistry();
+
         final Condition condition;
         try {
             // create the condition object
-            final UpdateAttributeModelFactory factory = new 
UpdateAttributeModelFactory();
+            final UpdateAttributeModelFactory factory = new 
UpdateAttributeModelFactory(variableRegistry);
             condition = factory.createCondition(requestEntity.getCondition());
             condition.setId(uuid);
         } catch (final IllegalArgumentException iae) {
@@ -295,10 +301,14 @@ public class RuleResource {
         // generate a new id
         final String uuid = UUID.randomUUID().toString();
 
+        // get the variable registry
+        final NiFiWebConfigurationContext configurationContext = 
(NiFiWebConfigurationContext) 
servletContext.getAttribute("nifi-web-configuration-context");
+        final VariableRegistry variableRegistry = 
configurationContext.getVariableRegistry();
+
         final Action action;
         try {
             // create the condition object
-            final UpdateAttributeModelFactory factory = new 
UpdateAttributeModelFactory();
+            final UpdateAttributeModelFactory factory = new 
UpdateAttributeModelFactory(variableRegistry);
             action = factory.createAction(requestEntity.getAction());
             action.setId(uuid);
         } catch (final IllegalArgumentException iae) {
@@ -461,6 +471,8 @@ public class RuleResource {
 
         // get the web context
         final NiFiWebConfigurationContext nifiWebContext = 
(NiFiWebConfigurationContext) 
servletContext.getAttribute("nifi-web-configuration-context");
+        // get the variable registry
+        final VariableRegistry variableRegistry = 
nifiWebContext.getVariableRegistry();
 
         // ensure the rule has been specified
         if (requestEntity == null || requestEntity.getRule() == null) {
@@ -497,7 +509,7 @@ public class RuleResource {
                 requestEntity.getProcessorId(), requestEntity.getRevision(), 
requestEntity.getClientId());
 
         // load the criteria
-        final UpdateAttributeModelFactory factory = new 
UpdateAttributeModelFactory();
+        final UpdateAttributeModelFactory factory = new 
UpdateAttributeModelFactory(variableRegistry);
         final Criteria criteria = getCriteria(nifiWebContext, requestContext);
 
         // attempt to locate the rule

Reply via email to