/*- * ============LICENSE_START======================================================= * sdc-distribution-client * ================================================================================ * Copyright (C) 2020 Nokia. All rights reserved. * ================================================================================ * 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. * ============LICENSE_END========================================================= */ package org.onap.sdc.impl; import org.onap.sdc.api.consumer.IConfiguration; import org.onap.sdc.api.consumer.IStatusCallback; import org.onap.sdc.utils.DistributionActionResultEnum; import org.onap.sdc.utils.DistributionClientConstants; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Function; import java.util.regex.Matcher; public class ConfigurationValidator { private Map, DistributionActionResultEnum> cachedValidators; DistributionActionResultEnum validateConfiguration(IConfiguration conf, IStatusCallback statusCallback) { final Map, DistributionActionResultEnum> validators = getValidators(statusCallback); for (Map.Entry, DistributionActionResultEnum> validation : validators.entrySet()) { if (isConfigurationNotValid(conf, validation)) { return getError(validation); } } return DistributionActionResultEnum.SUCCESS; } private synchronized Map, DistributionActionResultEnum> getValidators(IStatusCallback statusCallback) { if(this.cachedValidators == null) { final Map, DistributionActionResultEnum> validators = new LinkedHashMap<>(); validators.put(isConfigurationNotDefined(), DistributionActionResultEnum.CONFIGURATION_IS_MISSING); validators.put(isCustomerIdNotSet(), DistributionActionResultEnum.CONF_MISSING_CONSUMER_ID); validators.put(isUserNotSet(), DistributionActionResultEnum.CONF_MISSING_USERNAME); validators.put(isPasswordNotSet(), DistributionActionResultEnum.CONF_MISSING_PASSWORD); validators.put(isMsgBusAddressNotSet(), DistributionActionResultEnum.CONF_MISSING_MSG_BUS_ADDRESS); validators.put(isAsdcAddressNotSet(), DistributionActionResultEnum.CONF_MISSING_ASDC_FQDN); validators.put(isFqdnValid(), DistributionActionResultEnum.CONF_INVALID_ASDC_FQDN); validators.put(areFqdnsValid(), DistributionActionResultEnum.CONF_INVALID_MSG_BUS_ADDRESS); validators.put(isEnvNameNotSet(), DistributionActionResultEnum.CONF_MISSING_ENVIRONMENT_NAME); validators.put(isRelevantArtifactTypesNotSet(), DistributionActionResultEnum.CONF_MISSING_ARTIFACT_TYPES); validators.put(isConsumeStatusTopicWithCallbackNotSet(statusCallback), DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG); this.cachedValidators = validators; } return this.cachedValidators; } private DistributionActionResultEnum getError(Map.Entry, DistributionActionResultEnum> validation) { return validation.getValue(); } private boolean isConfigurationNotValid(IConfiguration conf, Map.Entry, DistributionActionResultEnum> validation) { return validation.getKey().apply(conf); } private Function isConsumeStatusTopicWithCallbackNotSet(IStatusCallback statusCallback) { return it -> it.isConsumeProduceStatusTopic() && Objects.isNull(statusCallback); } private Function isRelevantArtifactTypesNotSet() { return it -> it.getRelevantArtifactTypes() == null || it.getRelevantArtifactTypes().isEmpty(); } private Function isEnvNameNotSet() { return it -> it.getEnvironmentName() == null || it.getEnvironmentName().isEmpty(); } private Function areFqdnsValid() { return it -> !isValidFqdns(it.getMsgBusAddress()); } private Function isFqdnValid() { return it -> !isValidFqdn(it.getAsdcAddress()); } private Function isMsgBusAddressNotSet() { return it -> it.getMsgBusAddress() == null || it.getMsgBusAddress().isEmpty(); } private Function isPasswordNotSet() { return it -> it.getPassword() == null || it.getPassword().isEmpty(); } private Function isConfigurationNotDefined() { return Objects::isNull; } private Function isUserNotSet() { return it -> it.getUser() == null || it.getUser().isEmpty(); } private Function isCustomerIdNotSet() { return it -> it.getConsumerID() == null || it.getConsumerID().isEmpty(); } private Function isAsdcAddressNotSet() { return it -> it.getAsdcAddress() == null || it.getAsdcAddress().isEmpty(); } static boolean isValidFqdn(String fqdn) { Matcher matcher = DistributionClientConstants.FQDN_PATTERN.matcher(fqdn); return matcher.matches(); } static boolean isValidFqdns(List fqdns) { return fqdns.stream().allMatch(ConfigurationValidator::isValidFqdn); } }