package com.thinkbiganalytics.nifi.feedmgr; /*- * #%L * thinkbig-nifi-rest-client-api * %% * Copyright (C) 2017 ThinkBig Analytics * %% * Licensed 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. * #L% */ import com.google.common.base.CaseFormat; import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table; import org.apache.commons.lang3.StringUtils; import java.util.Map; /** * Utility to allow for application.properties to work with Nifi. */ public class NifiEnvironmentProperties { public static String ENVIRONMENT_PROPERTY_SERVICE_PREFIX = "nifi.service."; public NifiEnvironmentProperties() { } public static String getPrefix() { return ENVIRONMENT_PROPERTY_SERVICE_PREFIX; } /** * return the property prefix along with the service name * * @param serviceName the name of the service * @return the returned key for inspection with the application.properties */ public static String getEnvironmentControllerServicePropertyPrefix(String serviceName) { return ENVIRONMENT_PROPERTY_SERVICE_PREFIX + nifiPropertyToEnvironmentProperty(serviceName); } /** * for a given property return the serviceName */ public static String serviceNameForEnvironmentProperty(String envProperty) { String prop = envProperty; prop = StringUtils.substringAfter(prop, getPrefix()); String serviceName = StringUtils.substringBefore(prop, "."); return serviceName; } /** * resolve the Nifi Property from the env controllerServiceProperty */ public static String environmentPropertyToControllerServiceProperty(String envProperty) { String prop = envProperty; prop = StringUtils.substringAfter(prop, getPrefix()); String serviceName = StringUtils.substringBefore(prop, "."); prop = StringUtils.substringAfter(prop, "."); prop = environmentPropertyToNifi(prop); return prop; } /** * return the environment property in the format that can be used with NiFi * * @param envProperty the property from the application.properties * @return the formatted property to work with NiFi */ private static String environmentPropertyToNifi(String envProperty) { String name = envProperty.replaceAll("_", " "); name = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name); return name; } /** * Return the property key from NiFi that can work with the application.properties * * @param nifiPropertyKey the Nifi property * @return the formatted property to work with the application.properties */ private static String nifiPropertyToEnvironmentProperty(String nifiPropertyKey) { String name = nifiPropertyKey.toLowerCase().trim().replaceAll(" +", "_"); name = name.toLowerCase(); return name; } /** * Returns a collection of the Service Name along with the Map of nifi Properties stripping the ENVIRONMENT_PROPERTY_SERVICE_PREFIX from the properties * * @param envProperties the map of environment (.properties) properties * @return the table of nifi ready properties */ public static Table<String, String, String> getEnvironmentControllerServiceProperties(Map<String, String> envProperties) { Table<String, String, String> allProps = HashBasedTable.create(); if (envProperties != null && !envProperties.isEmpty()) { for (Map.Entry<String, String> entry : envProperties.entrySet()) { if (entry.getKey().startsWith(getPrefix())) { String key = environmentPropertyToControllerServiceProperty(entry.getKey()); String serviceName = serviceNameForEnvironmentProperty(entry.getKey()); allProps.put(serviceName, key, entry.getValue()); } } } return allProps; } /** * Returns a map of properties for a given Nifi service * * @param envProperties the .properties * @param serviceName the service name to use/look for as the key * @return the map of properties ready for NiFi use, inspected from the environment properties */ public static Map<String, String> getEnvironmentControllerServiceProperties(Map<String, String> envProperties, String serviceName) { return getEnvironmentControllerServiceProperties(envProperties).row(nifiPropertyToEnvironmentProperty(serviceName)); } }