Create onboarding validator for ASD VSPs
[sdc.git] / openecomp-be / backend / openecomp-sdc-vendor-software-product-manager / src / main / java / org / openecomp / sdc / vendorsoftwareproduct / impl / orchestration / csar / validation / ValidatorFactory.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20 package org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation;
21
22 import org.openecomp.core.utilities.file.FileContentHandler;
23 import org.openecomp.sdc.tosca.csar.AsdPackageHelper;
24 import org.openecomp.sdc.tosca.csar.ManifestUtils;
25 import org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi.ETSIService;
26 import org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi.ETSIServiceImpl;
27
28 import java.io.IOException;
29 import java.util.Comparator;
30 import java.util.List;
31 import java.util.ServiceLoader;
32 import java.util.ServiceLoader.Provider;
33 import java.util.stream.Collectors;
34
35 import static org.openecomp.sdc.tosca.csar.CSARConstants.ETSI_VERSION_2_7_1;
36
37 public class ValidatorFactory {
38
39     private final ServiceLoader<Validator> validatorLoader;
40     private final AsdPackageHelper asdPackageHelper;
41
42     public ValidatorFactory() {
43         this.validatorLoader = ServiceLoader.load(Validator.class);
44         this.asdPackageHelper = new AsdPackageHelper(new ManifestUtils());
45     }
46
47     /**
48      * Returns a validator based on the contents of the csar package.
49      *
50      * @param fileContentHandler the csar package
51      * @return Validator based on the contents of the csar package provided
52      * @throws IOException when metafile is invalid
53      */
54     public Validator getValidator(final FileContentHandler fileContentHandler) throws IOException {
55         final ETSIService etsiService = new ETSIServiceImpl(null, new ManifestUtils());
56         if (asdPackageHelper.isAsdPackage(fileContentHandler)) {
57             return new AsdValidator();
58         }
59         if (!etsiService.hasEtsiSol261Metadata(fileContentHandler)) {
60             if (etsiService.isEtsiPackage(fileContentHandler)) {
61
62                 return new EtsiSol004Version251Validator();
63             }
64             return new ONAPCsarValidator();
65         }
66         if (!etsiService.getHighestCompatibleSpecificationVersion(fileContentHandler).isLowerThan(ETSI_VERSION_2_7_1)) {
67             if (etsiService.hasCnfEnhancements(fileContentHandler)) {
68                 return new SOL004Version4MetaDirectoryValidator();
69             }
70             return new SOL004Version3MetaDirectoryValidator();
71         }
72         return new SOL004MetaDirectoryValidator();
73     }
74
75     /**
76      * Get validators based on the given model.
77      *
78      * @param model the model
79      * @return a list containing all validators for the given model, empty otherwise.
80      */
81     public List<Validator> getValidators(final String model) {
82         return validatorLoader.stream()
83             .map(Provider::get)
84             .filter(validator -> validator.appliesTo(model))
85             .sorted(Comparator.comparingInt(Validator::getOrder))
86             .collect(Collectors.toList());
87     }
88 }