You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jp...@apache.org on 2016/07/05 20:28:57 UTC

nifi-minifi git commit: MINIFI-48 - Omitting queuePrioritizerClass from flow if it isn't set in schema

Repository: nifi-minifi
Updated Branches:
  refs/heads/master 2d1e43e73 -> ec04ec95e


MINIFI-48 - Omitting queuePrioritizerClass from flow if it isn't set in schema

This closes #26

Signed-off-by: Joseph Percivall <jo...@yahoo.com>


Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi/commit/ec04ec95
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi/tree/ec04ec95
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi/diff/ec04ec95

Branch: refs/heads/master
Commit: ec04ec95e9398c0753398b2e121cadaee221ac06
Parents: 2d1e43e
Author: Bryan Rosander <br...@gmail.com>
Authored: Tue Jul 5 15:05:32 2016 -0400
Committer: Joseph Percivall <jo...@yahoo.com>
Committed: Tue Jul 5 16:26:51 2016 -0400

----------------------------------------------------------------------
 minifi-bootstrap/pom.xml                        |  5 ++
 .../bootstrap/util/ConfigTransformer.java       | 42 +++++-----
 .../bootstrap/util/ConfigTransformerTest.java   | 81 ++++++++++++++++++++
 .../schema/SecurityPropertiesSchema.java        | 15 ++--
 .../commons/schema/common/BaseSchema.java       |  4 -
 .../commons/schema/common/StringUtil.java       | 24 ++++++
 .../toolkit/configuration/ConfigMain.java       |  8 +-
 pom.xml                                         |  5 ++
 8 files changed, 151 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/ec04ec95/minifi-bootstrap/pom.xml
----------------------------------------------------------------------
diff --git a/minifi-bootstrap/pom.xml b/minifi-bootstrap/pom.xml
index 421b390..7c617b8 100644
--- a/minifi-bootstrap/pom.xml
+++ b/minifi-bootstrap/pom.xml
@@ -75,6 +75,11 @@ limitations under the License.
             <version>${jetty.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-standard-prioritizers</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>com.squareup.okhttp</groupId>
             <artifactId>okhttp</artifactId>
             <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/ec04ec95/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
----------------------------------------------------------------------
diff --git a/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java b/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
index 9cac9dc..feb4e9c 100644
--- a/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
+++ b/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
@@ -32,6 +32,7 @@ import org.apache.nifi.minifi.commons.schema.ProvenanceReportingSchema;
 import org.apache.nifi.minifi.commons.schema.ProvenanceRepositorySchema;
 import org.apache.nifi.minifi.commons.schema.RemoteInputPortSchema;
 import org.apache.nifi.minifi.commons.schema.RemoteProcessingGroupSchema;
+import org.apache.nifi.minifi.commons.schema.common.StringUtil;
 import org.apache.nifi.minifi.commons.schema.serialization.SchemaLoader;
 import org.apache.nifi.minifi.commons.schema.SecurityPropertiesSchema;
 import org.apache.nifi.minifi.commons.schema.SensitivePropsSchema;
@@ -103,7 +104,7 @@ public final class ConfigTransformer {
         writeFlowXmlFile(flowXml, destPath);
     }
 
-    private static void writeNiFiPropertiesFile(ByteArrayOutputStream nifiPropertiesOutputStream, String destPath) throws IOException {
+    protected static void writeNiFiPropertiesFile(ByteArrayOutputStream nifiPropertiesOutputStream, String destPath) throws IOException {
         final Path nifiPropertiesPath = Paths.get(destPath, "nifi.properties");
         try (FileOutputStream nifiProperties = new FileOutputStream(nifiPropertiesPath.toString())) {
             nifiPropertiesOutputStream.writeTo(nifiProperties);
@@ -115,8 +116,7 @@ public final class ConfigTransformer {
         }
     }
 
-    private static void writeFlowXmlFile(DOMSource domSource, String path) throws IOException, TransformerException {
-
+    protected static void writeFlowXmlFile(DOMSource domSource, String path) throws IOException, TransformerException {
         final OutputStream fileOut = Files.newOutputStream(Paths.get(path, "flow.xml.gz"));
         final OutputStream outStream = new GZIPOutputStream(fileOut);
         final StreamResult streamResult = new StreamResult(outStream);
@@ -133,7 +133,7 @@ public final class ConfigTransformer {
         outStream.close();
     }
 
-    private static void writeNiFiProperties(ConfigSchema configSchema, OutputStream outputStream) throws FileNotFoundException, UnsupportedEncodingException, ConfigurationChangeException {
+    protected static void writeNiFiProperties(ConfigSchema configSchema, OutputStream outputStream) throws FileNotFoundException, UnsupportedEncodingException, ConfigurationChangeException {
         PrintWriter writer = null;
         try {
             writer = new PrintWriter(outputStream, true);
@@ -263,7 +263,7 @@ public final class ConfigTransformer {
         }
     }
 
-    private static DOMSource createFlowXml(ConfigSchema configSchema) throws IOException, ConfigurationChangeException, ConfigTransformerException{
+    protected static DOMSource createFlowXml(ConfigSchema configSchema) throws IOException, ConfigurationChangeException, ConfigTransformerException{
         try {
             // create a new, empty document
             final DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
@@ -302,7 +302,7 @@ public final class ConfigTransformer {
         }
     }
 
-    private static void addSSLControllerService(final Element element, SecurityPropertiesSchema securityProperties) throws ConfigurationChangeException {
+    protected static void addSSLControllerService(final Element element, SecurityPropertiesSchema securityProperties) throws ConfigurationChangeException {
         try {
             final Element serviceElement = element.getOwnerDocument().createElement("controllerService");
             addTextElement(serviceElement, "id", "SSL-Context-Service");
@@ -329,7 +329,7 @@ public final class ConfigTransformer {
         }
     }
 
-    private static void addProcessGroup(final Element parentElement, ConfigSchema configSchema, final String elementName) throws ConfigurationChangeException {
+    protected static void addProcessGroup(final Element parentElement, ConfigSchema configSchema, final String elementName) throws ConfigurationChangeException {
         try {
             FlowControllerSchema flowControllerProperties = configSchema.getFlowControllerProperties();
 
@@ -368,7 +368,7 @@ public final class ConfigTransformer {
         }
     }
 
-    private static void addProcessor(final Element parentElement, ProcessorSchema processorConfig) throws ConfigurationChangeException {
+    protected static void addProcessor(final Element parentElement, ProcessorSchema processorConfig) throws ConfigurationChangeException {
         try {
             final Document doc = parentElement.getOwnerDocument();
             final Element element = doc.createElement("processor");
@@ -404,7 +404,7 @@ public final class ConfigTransformer {
         }
     }
 
-    private static void addProvenanceReportingTask(final Element element, ConfigSchema configSchema) throws ConfigurationChangeException {
+    protected static void addProvenanceReportingTask(final Element element, ConfigSchema configSchema) throws ConfigurationChangeException {
         try {
             ProvenanceReportingSchema provenanceProperties = configSchema.getProvenanceReportingProperties();
             final Element taskElement = element.getOwnerDocument().createElement("reportingTask");
@@ -437,7 +437,7 @@ public final class ConfigTransformer {
         }
     }
 
-    private static void addConfiguration(final Element element, Map<String, Object> elementConfig) {
+    protected static void addConfiguration(final Element element, Map<String, Object> elementConfig) {
         final Document doc = element.getOwnerDocument();
         if (elementConfig == null) {
             return;
@@ -454,12 +454,12 @@ public final class ConfigTransformer {
         }
     }
 
-    private static void addStyle(final Element parentElement) {
+    protected static void addStyle(final Element parentElement) {
         final Element element = parentElement.getOwnerDocument().createElement("styles");
         parentElement.appendChild(element);
     }
 
-    private static void addRemoteProcessGroup(final Element parentElement, RemoteProcessingGroupSchema remoteProcessingGroupProperties) throws ConfigurationChangeException {
+    protected static void addRemoteProcessGroup(final Element parentElement, RemoteProcessingGroupSchema remoteProcessingGroupProperties) throws ConfigurationChangeException {
         try {
             final Document doc = parentElement.getOwnerDocument();
             final Element element = doc.createElement("remoteProcessGroup");
@@ -484,7 +484,7 @@ public final class ConfigTransformer {
         }
     }
 
-    private static void addRemoteGroupPort(final Element parentElement, RemoteInputPortSchema inputPort) throws ConfigurationChangeException {
+    protected static void addRemoteGroupPort(final Element parentElement, RemoteInputPortSchema inputPort) throws ConfigurationChangeException {
         try {
             final Document doc = parentElement.getOwnerDocument();
             final Element element = doc.createElement("inputPort");
@@ -503,7 +503,7 @@ public final class ConfigTransformer {
         }
     }
 
-    private static void addConnection(final Element parentElement, ConnectionSchema connectionProperties, ConfigSchema configSchema) throws ConfigurationChangeException {
+    protected static void addConnection(final Element parentElement, ConnectionSchema connectionProperties, ConfigSchema configSchema) throws ConfigurationChangeException {
         try {
             final Document doc = parentElement.getOwnerDocument();
             final Element element = doc.createElement("connection");
@@ -538,7 +538,7 @@ public final class ConfigTransformer {
             addTextElement(element, "maxWorkQueueDataSize", connectionProperties.getMaxWorkQueueDataSize());
 
             addTextElement(element, "flowFileExpiration", connectionProperties.getFlowfileExpiration());
-            addTextElement(element, "queuePrioritizerClass", connectionProperties.getQueuePrioritizerClass());
+            addTextElementIfNotNullOrEmpty(element, "queuePrioritizerClass", connectionProperties.getQueuePrioritizerClass());
 
             parentElement.appendChild(element);
         } catch (Exception e) {
@@ -547,7 +547,7 @@ public final class ConfigTransformer {
     }
 
     // Locate the associated parent group for a given input port by its id
-    private static Optional<String> findInputPortParentGroup(String inputPortId, ConfigSchema configSchema) {
+    protected static Optional<String> findInputPortParentGroup(String inputPortId, ConfigSchema configSchema) {
         final List<RemoteProcessingGroupSchema> remoteProcessingGroups = configSchema.getRemoteProcessingGroups();
         if (remoteProcessingGroups != null) {
             for (final RemoteProcessingGroupSchema remoteProcessingGroupSchema : remoteProcessingGroups) {
@@ -564,14 +564,20 @@ public final class ConfigTransformer {
         return Optional.empty();
     }
 
-    private static void addPosition(final Element parentElement) {
+    protected static void addPosition(final Element parentElement) {
         final Element element = parentElement.getOwnerDocument().createElement("position");
         element.setAttribute("x", String.valueOf("0"));
         element.setAttribute("y", String.valueOf("0"));
         parentElement.appendChild(element);
     }
 
-    private static void addTextElement(final Element element, final String name, final String value) {
+    protected static void addTextElementIfNotNullOrEmpty(final Element element, final String name, final String value) {
+        if (!StringUtil.isNullOrEmpty(value)) {
+            addTextElement(element, name, value);
+        }
+    }
+
+    protected static void addTextElement(final Element element, final String name, final String value) {
         final Document doc = element.getOwnerDocument();
         final Element toAdd = doc.createElement(name);
         toAdd.setTextContent(value);

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/ec04ec95/minifi-bootstrap/src/test/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformerTest.java
----------------------------------------------------------------------
diff --git a/minifi-bootstrap/src/test/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformerTest.java b/minifi-bootstrap/src/test/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformerTest.java
new file mode 100644
index 0000000..40dbe10
--- /dev/null
+++ b/minifi-bootstrap/src/test/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformerTest.java
@@ -0,0 +1,81 @@
+/*
+ * 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.minifi.bootstrap.util;
+
+import org.apache.nifi.minifi.bootstrap.configuration.ConfigurationChangeException;
+import org.apache.nifi.minifi.commons.schema.ConfigSchema;
+import org.apache.nifi.minifi.commons.schema.ConnectionSchema;
+import org.apache.nifi.prioritizer.FirstInFirstOutPrioritizer;
+import org.junit.Before;
+import org.junit.Test;
+import org.w3c.dom.Element;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+public class ConfigTransformerTest {
+
+    private XPathFactory xPathFactory;
+    private Element config;
+
+    @Before
+    public void setup() throws ParserConfigurationException {
+        config = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument().createElement("config");
+        xPathFactory = XPathFactory.newInstance();
+    }
+
+    @Test
+    public void testNullQueuePrioritizerNotWritten() throws ConfigurationChangeException, XPathExpressionException {
+        ConfigTransformer.addConnection(config, new ConnectionSchema(Collections.emptyMap()), new ConfigSchema(Collections.emptyMap()));
+        XPath xpath = xPathFactory.newXPath();
+        String expression = "connection/queuePrioritizerClass";
+        assertNull(xpath.evaluate(expression, config, XPathConstants.NODE));
+    }
+
+    @Test
+    public void testEmptyQueuePrioritizerNotWritten() throws ConfigurationChangeException, XPathExpressionException {
+        Map<String, Object> map = new HashMap<>();
+        map.put(ConnectionSchema.QUEUE_PRIORITIZER_CLASS_KEY, "");
+
+        ConfigTransformer.addConnection(config, new ConnectionSchema(map), new ConfigSchema(Collections.emptyMap()));
+        XPath xpath = xPathFactory.newXPath();
+        String expression = "connection/queuePrioritizerClass";
+        assertNull(xpath.evaluate(expression, config, XPathConstants.NODE));
+    }
+
+    @Test
+    public void testQueuePrioritizerWritten() throws ConfigurationChangeException, XPathExpressionException {
+        Map<String, Object> map = new HashMap<>();
+        map.put(ConnectionSchema.QUEUE_PRIORITIZER_CLASS_KEY, FirstInFirstOutPrioritizer.class.getCanonicalName());
+
+        ConfigTransformer.addConnection(config, new ConnectionSchema(map), new ConfigSchema(Collections.emptyMap()));
+        XPath xpath = xPathFactory.newXPath();
+        String expression = "connection/queuePrioritizerClass/text()";
+        assertEquals(FirstInFirstOutPrioritizer.class.getCanonicalName(), xpath.evaluate(expression, config, XPathConstants.STRING));
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/ec04ec95/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/SecurityPropertiesSchema.java
----------------------------------------------------------------------
diff --git a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/SecurityPropertiesSchema.java b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/SecurityPropertiesSchema.java
index 3f0c6c1..be41810 100644
--- a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/SecurityPropertiesSchema.java
+++ b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/SecurityPropertiesSchema.java
@@ -18,6 +18,7 @@
 package org.apache.nifi.minifi.commons.schema;
 
 import org.apache.nifi.minifi.commons.schema.common.BaseSchema;
+import org.apache.nifi.minifi.commons.schema.common.StringUtil;
 
 import java.util.Map;
 
@@ -56,7 +57,7 @@ public class SecurityPropertiesSchema extends BaseSchema {
         keystore = getOptionalKeyAsType(map, KEYSTORE_KEY, String.class, SECURITY_PROPS_KEY, "");
 
         keystoreType = getOptionalKeyAsType(map, KEYSTORE_TYPE_KEY, String.class, SECURITY_PROPS_KEY, "");
-        if (!isNullOrEmpty(keystoreType)) {
+        if (!StringUtil.isNullOrEmpty(keystoreType)) {
             if (validateStoreType(keystoreType)) {
                 addValidationIssue(KEYSTORE_TYPE_KEY, SECURITY_PROPS_KEY, "it is not a supported type (must be either PKCS12 or JKS format)");
             }
@@ -69,7 +70,7 @@ public class SecurityPropertiesSchema extends BaseSchema {
         truststore = getOptionalKeyAsType(map, TRUSTSTORE_KEY, String.class, SECURITY_PROPS_KEY, "");
 
         truststoreType = getOptionalKeyAsType(map, TRUSTSTORE_TYPE_KEY, String.class, SECURITY_PROPS_KEY, "");
-        if (!isNullOrEmpty(truststoreType)) {
+        if (!StringUtil.isNullOrEmpty(truststoreType)) {
             if (validateStoreType(truststoreType)) {
                 addValidationIssue(TRUSTSTORE_TYPE_KEY, SECURITY_PROPS_KEY, "it is not a supported type (must be either PKCS12 or JKS format)");
             }
@@ -78,7 +79,7 @@ public class SecurityPropertiesSchema extends BaseSchema {
         truststorePassword = getOptionalKeyAsType(map, TRUSTSTORE_PASSWORD_KEY, String.class, SECURITY_PROPS_KEY, "");
 
         sslProtocol = getOptionalKeyAsType(map, SSL_PROTOCOL_KEY, String.class, SECURITY_PROPS_KEY, "");
-        if (!isNullOrEmpty(sslProtocol)) {
+        if (!StringUtil.isNullOrEmpty(sslProtocol)) {
             switch (sslProtocol) {
                 case "SSL":
                     break;
@@ -98,14 +99,14 @@ public class SecurityPropertiesSchema extends BaseSchema {
                     addValidationIssue(SSL_PROTOCOL_KEY, SECURITY_PROPS_KEY, "it is not an allowable value of SSL protocol");
                     break;
             }
-            if (isNullOrEmpty(keystore)) {
+            if (StringUtil.isNullOrEmpty(keystore)) {
                 validationIssues.add("When the '" + SSL_PROTOCOL_KEY + "' key of '" + SECURITY_PROPS_KEY + "' is set, the '" + KEYSTORE_KEY + "' must also be set");
-            } else if (isNullOrEmpty(keystoreType) || isNullOrEmpty(keystorePassword) || isNullOrEmpty(keyPassword)) {
+            } else if (StringUtil.isNullOrEmpty(keystoreType) || StringUtil.isNullOrEmpty(keystorePassword) || StringUtil.isNullOrEmpty(keyPassword)) {
                 validationIssues.add("When the '" + KEYSTORE_KEY + "' key of '" + SECURITY_PROPS_KEY + "' is set, the '" + KEYSTORE_TYPE_KEY + "', '" + KEYSTORE_PASSWORD_KEY +
                         "' and '" + KEY_PASSWORD_KEY + "' all must also be set");
             }
 
-            if (!isNullOrEmpty(truststore) && (isNullOrEmpty(truststoreType) || isNullOrEmpty(truststorePassword))) {
+            if (!StringUtil.isNullOrEmpty(truststore) && (StringUtil.isNullOrEmpty(truststoreType) || StringUtil.isNullOrEmpty(truststorePassword))) {
                 validationIssues.add("When the '" + TRUSTSTORE_KEY + "' key of '" + SECURITY_PROPS_KEY + "' is set, the '" + TRUSTSTORE_TYPE_KEY + "' and '" +
                         TRUSTSTORE_PASSWORD_KEY + "' must also be set");
             }
@@ -136,7 +137,7 @@ public class SecurityPropertiesSchema extends BaseSchema {
     }
 
     public boolean useSSL() {
-        return !isNullOrEmpty(sslProtocol);
+        return !StringUtil.isNullOrEmpty(sslProtocol);
     }
 
     public String getKeystore() {

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/ec04ec95/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/common/BaseSchema.java
----------------------------------------------------------------------
diff --git a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/common/BaseSchema.java b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/common/BaseSchema.java
index 8c85acb..22f45cf 100644
--- a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/common/BaseSchema.java
+++ b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/common/BaseSchema.java
@@ -193,8 +193,4 @@ public abstract class BaseSchema {
     public static <K, V> Map<K, V> nullToEmpty(Map<K, V> map) {
         return map == null ? Collections.emptyMap() : map;
     }
-
-    public static boolean isNullOrEmpty(final String string) {
-        return string == null || string.isEmpty();
-    }
 }

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/ec04ec95/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/common/StringUtil.java
----------------------------------------------------------------------
diff --git a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/common/StringUtil.java b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/common/StringUtil.java
new file mode 100644
index 0000000..ae7165e
--- /dev/null
+++ b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/common/StringUtil.java
@@ -0,0 +1,24 @@
+/*
+ * 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.minifi.commons.schema.common;
+
+public class StringUtil {
+    public static boolean isNullOrEmpty(final String string) {
+        return string == null || string.isEmpty();
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/ec04ec95/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/ConfigMain.java
----------------------------------------------------------------------
diff --git a/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/ConfigMain.java b/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/ConfigMain.java
index 1d26966..7cfff75 100644
--- a/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/ConfigMain.java
+++ b/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/ConfigMain.java
@@ -18,7 +18,7 @@
 package org.apache.nifi.minifi.toolkit.configuration;
 
 import org.apache.nifi.minifi.commons.schema.ConfigSchema;
-import org.apache.nifi.minifi.commons.schema.common.BaseSchema;
+import org.apache.nifi.minifi.commons.schema.common.StringUtil;
 import org.apache.nifi.minifi.commons.schema.serialization.SchemaLoader;
 import org.apache.nifi.minifi.commons.schema.serialization.SchemaSaver;
 import org.apache.nifi.minifi.commons.schema.exception.SchemaLoaderException;
@@ -140,7 +140,7 @@ public class ConfigMain {
         Set<RemoteProcessGroupDTO> remoteProcessGroups = flowSnippetDTO.getRemoteProcessGroups();
         if (remoteProcessGroups != null) {
             for (RemoteProcessGroupDTO remoteProcessGroupDTO : remoteProcessGroups) {
-                if (BaseSchema.isNullOrEmpty(remoteProcessGroupDTO.getName())) {
+                if (StringUtil.isNullOrEmpty(remoteProcessGroupDTO.getName())) {
                     remoteProcessGroupDTO.setName(remoteProcessGroupDTO.getTargetUri());
                 }
             }
@@ -165,7 +165,7 @@ public class ConfigMain {
                 setName(connectableNameMap, connection.getDestination());
             }
             for (ConnectionDTO connection : connections) {
-                if (BaseSchema.isNullOrEmpty(connection.getName())) {
+                if (StringUtil.isNullOrEmpty(connection.getName())) {
                     StringBuilder name = new StringBuilder();
                     ConnectableDTO connectionSource = connection.getSource();
                     if (connectionSource != null) {
@@ -215,7 +215,7 @@ public class ConfigMain {
             for (T hasIdAndName : hasIdAndNames) {
                 String id = idGetter.apply(hasIdAndName);
                 String name = nameGetter.apply(hasIdAndName);
-                if (!BaseSchema.isNullOrEmpty(name)) {
+                if (!StringUtil.isNullOrEmpty(name)) {
                     connectableNameMap.put(id, name);
                 }
             }

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/ec04ec95/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index b46ad59..04979fb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -422,6 +422,11 @@ limitations under the License.
             </dependency>
             <dependency>
                 <groupId>org.apache.nifi</groupId>
+                <artifactId>nifi-standard-prioritizers</artifactId>
+                <version>${org.apache.nifi.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.nifi</groupId>
                 <artifactId>nifi-administration</artifactId>
                 <version>${org.apache.nifi.version}</version>
             </dependency>