/*- * ============LICENSE_START======================================================= * org.onap.integration * ================================================================================ * Copyright (C) 2018 NOKIA Intellectual Property. 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.pnfsimulator.simulator.validation; import static org.onap.pnfsimulator.message.MessageConstants.MESSAGE_INTERVAL; import static org.onap.pnfsimulator.message.MessageConstants.PNF_OAM_IPV4_ADDRESS; import static org.onap.pnfsimulator.message.MessageConstants.PNF_OAM_IPV6_ADDRESS; import static org.onap.pnfsimulator.message.MessageConstants.PNF_SERIAL_NUMBER; import static org.onap.pnfsimulator.message.MessageConstants.PNF_VENDOR_NAME; import static org.onap.pnfsimulator.message.MessageConstants.TEST_DURATION; import com.google.common.collect.ImmutableMap; import java.util.ArrayList; import java.util.List; import java.util.function.BiPredicate; import org.apache.commons.lang3.StringUtils; import org.json.JSONObject; public class ParamsValidator { private final static String MISSING_PARAMS_ERROR = "Some mandatory params are missing"; private static ParamsValidator instance; public static ParamsValidator getInstance() { if (instance == null) { instance = new ParamsValidator(); } return instance; } public void validate(JSONObject params) throws ValidationException { ImmutableMap> paramValidators = ImmutableMap .>builder() .put(TEST_DURATION, this::isNotNumeric) .put(MESSAGE_INTERVAL, this::isNotNumeric) .put(PNF_SERIAL_NUMBER, this::nullOrEmpty) .put(PNF_VENDOR_NAME, this::nullOrEmpty) .put(PNF_OAM_IPV4_ADDRESS, this::nullOrEmpty) .put(PNF_OAM_IPV6_ADDRESS, this::nullOrEmpty) .build(); List missingParams = new ArrayList<>(); paramValidators.forEach((param, validator) -> { if (validator.test(params, param)) { missingParams.add(param); } }); clearIPError(missingParams); if (!missingParams.isEmpty()) { throw new ValidationException(constructMessage(missingParams)); } } private String constructMessage(List missingParams) { StringBuilder msg = new StringBuilder(MISSING_PARAMS_ERROR); missingParams.forEach(param -> { msg.append('\n'); msg.append(param); }); return msg.toString(); } private boolean isNotNumeric(JSONObject params, String param) { return nullOrEmpty(params, param) || !StringUtils.isNumeric(params.getString(param)); } private boolean nullOrEmpty(JSONObject params, String param) { return !params.has(param) || params.getString(param).isEmpty(); } private void clearIPError(List missingParams) { // if only one IP is missing clear the error if (!(missingParams.contains(PNF_OAM_IPV4_ADDRESS) && missingParams.contains(PNF_OAM_IPV6_ADDRESS))) { missingParams.remove(PNF_OAM_IPV4_ADDRESS); missingParams.remove(PNF_OAM_IPV6_ADDRESS); } } }