91d27056938752caa8d89cd592544556f734658c
[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 static org.openecomp.sdc.tosca.csar.CSARConstants.ETSI_VERSION_2_7_1;
23
24 import java.io.IOException;
25 import java.util.Comparator;
26 import java.util.List;
27 import java.util.ServiceLoader;
28 import java.util.ServiceLoader.Provider;
29 import java.util.stream.Collectors;
30 import org.openecomp.core.utilities.file.FileContentHandler;
31 import org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi.ETSIService;
32 import org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi.ETSIServiceImpl;
33
34 public class ValidatorFactory {
35
36     private final ServiceLoader<Validator> validatorLoader;
37
38     public ValidatorFactory() {
39         this.validatorLoader = ServiceLoader.load(Validator.class);
40     }
41
42     /**
43      * Returns a validator based on the contents of the csar package.
44      *
45      * @param fileContentHandler the csar package
46      * @return Validator based on the contents of the csar package provided
47      * @throws IOException when metafile is invalid
48      */
49     public Validator getValidator(final FileContentHandler fileContentHandler) throws IOException {
50         final ETSIService etsiService = new ETSIServiceImpl(null);
51         if (!etsiService.isSol004WithToscaMetaDirectory(fileContentHandler)) {
52             return new ONAPCsarValidator();
53         }
54         if (!etsiService.getHighestCompatibleSpecificationVersion(fileContentHandler).isLowerThan(ETSI_VERSION_2_7_1)) {
55             if (etsiService.hasCnfEnhancements(fileContentHandler)) {
56                 return new SOL004Version4MetaDirectoryValidator();
57             }
58             return new SOL004Version3MetaDirectoryValidator();
59         }
60         return new SOL004MetaDirectoryValidator();
61     }
62
63     /**
64      * Get validators based on the given model.
65      *
66      * @param model the model
67      * @return a list containing all validators for the given model, empty otherwise.
68      */
69     public List<Validator> getValidators(final String model) {
70         return validatorLoader.stream()
71             .map(Provider::get)
72             .filter(validator -> validator.appliesTo(model))
73             .sorted(Comparator.comparingInt(Validator::getOrder))
74             .collect(Collectors.toList());
75     }
76 }