2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.so.apihandlerinfra.validation;
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.HashSet;
27 import java.util.List;
29 import java.util.Optional;
31 import org.apache.commons.lang3.StringUtils;
32 import org.onap.so.apihandlerinfra.Action;
33 import org.onap.so.apihandlerinfra.Actions;
34 import org.onap.so.exceptions.ValidationException;
35 import org.onap.so.serviceinstancebeans.ModelInfo;
36 import org.onap.so.serviceinstancebeans.Networks;
37 import org.onap.so.serviceinstancebeans.Pnfs;
38 import org.onap.so.serviceinstancebeans.Service;
39 import org.onap.so.serviceinstancebeans.VfModules;
40 import org.onap.so.serviceinstancebeans.Vnfs;
42 public class UserParamsValidation implements ValidationRule {
44 public ValidationInformation validate(ValidationInformation info) throws ValidationException {
45 Service validate = info.getUserParams();
46 if (validate.getModelInfo() == null) {
47 throw new ValidationException("modelInfo in userParams", true);
48 } else if (validate.getModelInfo().getModelType() == null) {
49 throw new ValidationException("modelType in userParams service modelInfo", true);
50 } else if (validate.getModelInfo().getModelVersionId() == null) {
51 throw new ValidationException("modelVersionId in userParams service modelInfo", true);
53 modelInfoValidation(info.getSir().getRequestDetails().getModelInfo(), validate.getModelInfo());
54 if (validate.getInstanceName() != null && info.getRequestInfo().getInstanceName() != null) {
55 instanceNameValidation(info, validate);
58 Actions action = info.getAction();
59 Map<String, Set<String>> vnfCustomIdToInstanceNames = new HashMap<>();
60 Map<String, Set<String>> vfModuleCustomIdToInstanceNames = new HashMap<>();
61 for (Vnfs vnf : validate.getResources().getVnfs()) {
62 if (vnf.getModelInfo() == null) {
63 throw new ValidationException("modelInfo in userParams vnf resources", true);
64 } else if (vnf.getModelInfo().getModelCustomizationId() == null) {
65 throw new ValidationException("modelCustomizationId in userParams vnf resources", true);
66 } else if (vnf.getModelInfo().getModelVersionId() == null) {
67 throw new ValidationException("modelVersionId in userParams vnf resources", true);
69 if (vnf.getCloudConfiguration() == null) {
70 throw new ValidationException("cloudConfiguration in userParams vnf resources", true);
72 if (action == Action.createInstance || action == Action.assignInstance) {
73 if (vnf.getPlatform() == null) {
74 throw new ValidationException("platform in userParams vnf resources", true);
76 if (vnf.getProductFamilyId() == null) {
77 throw new ValidationException("productFamilyId in userParams vnf resources", true);
80 if (vnf.getPlatform() != null && vnf.getPlatform().getPlatformName() == null) {
81 throw new ValidationException("platformName in userParams vnf resources", true);
84 String vnfCustomizationId = vnf.getModelInfo().getModelCustomizationId();
85 vnfCustomIdToInstanceNames.putIfAbsent(vnfCustomizationId, new HashSet<>());
86 String vnfInstanceName = StringUtils.defaultString(vnf.getInstanceName());
87 Set<String> vnfVisitedInstanceNames = vnfCustomIdToInstanceNames.get(vnfCustomizationId);
88 if (!vnfVisitedInstanceNames.add(vnfInstanceName)) {
89 throw new ValidationException(
90 "instanceName: same instanceName with same modelCustomizationId in userParams vnf resources",
93 if (vnf.getVfModules().isEmpty()) {
94 throw new ValidationException("vfModules in userParams vnf resources", true);
97 for (VfModules vfModule : vnf.getVfModules()) {
98 if (vfModule.getModelInfo() == null) {
99 throw new ValidationException("modelInfo in userParams vfModules resources", true);
100 } else if (vfModule.getModelInfo().getModelCustomizationId() == null) {
101 throw new ValidationException("modelCustomizationId in userParams vfModule resources", true);
102 } else if (vfModule.getModelInfo().getModelVersionId() == null) {
103 throw new ValidationException("modelVersionId in userParams vfModule resources", true);
106 String vfModulecustomizationId = vfModule.getModelInfo().getModelCustomizationId();
107 vfModuleCustomIdToInstanceNames.putIfAbsent(vfModulecustomizationId, new HashSet<>());
108 String vfModuleInstanceName = StringUtils.defaultString(vfModule.getInstanceName());
109 Set<String> vfModuleVisitedInstanceNames = vfModuleCustomIdToInstanceNames.get(vfModulecustomizationId);
110 if (!vfModuleVisitedInstanceNames.add(vfModuleInstanceName)) {
111 throw new ValidationException(
112 "instanceName: same instanceName with same modelCustomizationId in userParams vfModule resources",
117 validateDuplicateInstanceNames(vnfCustomIdToInstanceNames, "vnf");
118 validateDuplicateInstanceNames(vfModuleCustomIdToInstanceNames, "vfModule");
120 Map<String, Set<String>> pnfCustomIdToInstanceNames = new HashMap<>();
122 for (Pnfs pnf : validate.getResources().getPnfs()) {
123 if (pnf.getModelInfo() == null) {
124 throw new ValidationException("modelInfo in userParams pnf resources", true);
125 } else if (pnf.getModelInfo().getModelCustomizationId() == null) {
126 throw new ValidationException("modelCustomizationId in userParams pnf resources", true);
127 } else if (pnf.getModelInfo().getModelVersionId() == null) {
128 throw new ValidationException("modelVersionId in userParams pnf resources", true);
130 String pnfCustomizationId = pnf.getModelInfo().getModelCustomizationId();
131 pnfCustomIdToInstanceNames.putIfAbsent(pnfCustomizationId, new HashSet<>());
132 String pnfInstanceName = StringUtils.defaultString(pnf.getInstanceName());
133 Set<String> pnfVisitedInstanceNames = pnfCustomIdToInstanceNames.get(pnfCustomizationId);
134 if (!pnfVisitedInstanceNames.add(pnfInstanceName)) {
135 throw new ValidationException(
136 "instanceName: same instanceName with same modelCustomizationId in userParams pnf resources",
141 validateDuplicateInstanceNames(pnfCustomIdToInstanceNames, "pnf");
143 List<Networks> validateNetworks = new ArrayList<>();
144 validateNetworks = validate.getResources().getNetworks();
145 if (validateNetworks != null) {
146 for (Networks networks : validateNetworks) {
147 if (networks.getModelInfo() == null) {
148 throw new ValidationException("modelInfo in userParams network resources", true);
149 } else if (networks.getModelInfo().getModelCustomizationId() == null) {
150 throw new ValidationException("modelCustomizationId in userParams network resources", true);
151 } else if (networks.getModelInfo().getModelVersionId() == null) {
152 throw new ValidationException("modelVersionId in userParams network resources", true);
154 if (networks.getCloudConfiguration() == null) {
155 throw new ValidationException("cloudConfiguration in userParams network resources", true);
162 public void instanceNameValidation(ValidationInformation info, Service validate) throws ValidationException {
163 if (!info.getRequestInfo().getInstanceName().equals(validate.getInstanceName())) {
164 throw new ValidationException("instanceName in requestInfo", "instanceName in userParams service");
168 public void modelInfoValidation(ModelInfo info, ModelInfo userParamInfo) throws ValidationException {
169 if (!info.getModelType().equals(userParamInfo.getModelType())) {
170 throw new ValidationException("modelType in modelInfo", "modelType in userParams service");
172 if ((info.getModelInvariantId() != null && userParamInfo.getModelInvariantId() != null)
173 && (!info.getModelInvariantId().equals(userParamInfo.getModelInvariantId()))) {
174 throw new ValidationException("modelInvariantId in modelInfo", "modelInvariantId in userParams service");
176 if (!info.getModelVersionId().equals(userParamInfo.getModelVersionId())) {
177 throw new ValidationException("modelVersionId in modelInfo", "modelVersionId in userParams service");
179 if ((info.getModelName() != null && userParamInfo.getModelName() != null)
180 && (!info.getModelName().equals(userParamInfo.getModelName()))) {
181 throw new ValidationException("modelName in modelInfo", "modelName in userParams service");
183 if ((info.getModelVersion() != null && userParamInfo.getModelVersion() != null)
184 && (!info.getModelVersion().equals(userParamInfo.getModelVersion()))) {
185 throw new ValidationException("modelVersion in modelInfo", "modelVersion in userParams service");
187 if ((info.getModelCustomizationId() != null && userParamInfo.getModelCustomizationId() != null)
188 && (!info.getModelCustomizationId().equals(userParamInfo.getModelCustomizationId()))) {
189 throw new ValidationException("modelCustomizationId in modelInfo",
190 "modelCustomizationId in userParams service");
194 private void validateDuplicateInstanceNames(Map<String, Set<String>> duplicateValidator, String type)
195 throws ValidationException {
196 Set<String> allInstanceNames = new HashSet<>();
197 for (Map.Entry<String, Set<String>> entry : duplicateValidator.entrySet()) {
198 Set<String> instanceNames = entry.getValue();
199 if (instanceNames.size() > 1 && instanceNames.contains(""))
200 throw new ValidationException(String.format(
201 "instanceName: instanceName is missing or empty with same modelCustomizationId in userParams %s resources",
204 for (String instanceName : instanceNames) {
205 if (!instanceName.isBlank() && !allInstanceNames.add(instanceName)) {
206 throw new ValidationException(String.format(
207 "instanceName: same instanceName but different modelCustomizationId (instanceName should be unique) in userParams %s resources",