ae4fed9f4a0a131eac521777e7176a8fb6b1d679
[ccsdk/cds.git] /
1 /*\r
2  * Copyright © 2017-2018 AT&T Intellectual Property.\r
3  * Modifications Copyright © 2018 IBM.\r
4  *\r
5  * Licensed under the Apache License, Version 2.0 (the "License");\r
6  * you may not use this file except in compliance with the License.\r
7  * You may obtain a copy of the License at\r
8  *\r
9  *     http://www.apache.org/licenses/LICENSE-2.0\r
10  *\r
11  * Unless required by applicable law or agreed to in writing, software\r
12  * distributed under the License is distributed on an "AS IS" BASIS,\r
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14  * See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  */\r
17 \r
18 package org.onap.ccsdk.apps.controllerblueprints.service;\r
19 \r
20 import com.google.common.base.Preconditions;\r
21 import org.apache.commons.lang3.StringUtils;\r
22 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;\r
23 import org.onap.ccsdk.apps.controllerblueprints.core.data.*;\r
24 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRepoService;\r
25 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;\r
26 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ModelType;\r
27 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ModelTypeRepository;\r
28 import org.springframework.stereotype.Service;\r
29 import reactor.core.publisher.Mono;\r
30 \r
31 import java.util.Optional;\r
32 \r
33 /**\r
34  * BluePrintRepoDBService\r
35  *\r
36  * @author Brinda Santh\r
37  */\r
38 @Service\r
39 public class BluePrintRepoDBService implements BluePrintRepoService {\r
40 \r
41     private ModelTypeRepository modelTypeRepository;\r
42 \r
43     public BluePrintRepoDBService(ModelTypeRepository modelTypeRepository) {\r
44         this.modelTypeRepository = modelTypeRepository;\r
45     }\r
46 \r
47     @Override\r
48     public Mono<NodeType> getNodeType(String nodeTypeName) throws BluePrintException {\r
49         return getModelType(nodeTypeName, NodeType.class);\r
50     }\r
51 \r
52     @Override\r
53     public Mono<DataType> getDataType(String dataTypeName) throws BluePrintException {\r
54         return getModelType(dataTypeName, DataType.class);\r
55     }\r
56 \r
57     @Override\r
58     public Mono<ArtifactType> getArtifactType(String artifactTypeName) throws BluePrintException {\r
59         return getModelType(artifactTypeName, ArtifactType.class);\r
60     }\r
61 \r
62     @Override\r
63     public Mono<RelationshipType> getRelationshipType(String relationshipTypeName) throws BluePrintException {\r
64         return getModelType(relationshipTypeName, RelationshipType.class);\r
65     }\r
66 \r
67     @Override\r
68     public Mono<CapabilityDefinition> getCapabilityDefinition(String capabilityDefinitionName) throws BluePrintException {\r
69         return getModelType(capabilityDefinitionName, CapabilityDefinition.class);\r
70     }\r
71 \r
72     private <T> Mono<T> getModelType(String modelName, Class<T> valueClass) throws BluePrintException {\r
73         Preconditions.checkArgument(StringUtils.isNotBlank(modelName),\r
74                 "Failed to get model from repo, model name is missing");\r
75 \r
76         return getModelDefinitions(modelName).map(content -> {\r
77             Preconditions.checkArgument(StringUtils.isNotBlank(content),\r
78                     String.format("Failed to get model content for model name (%s)", modelName));\r
79                     return JacksonUtils.readValue(content, valueClass);\r
80                 }\r
81         );\r
82     }\r
83 \r
84     private Mono<String> getModelDefinitions(String modelName) throws BluePrintException {\r
85         String modelDefinition;\r
86         Optional<ModelType> modelTypeDb = modelTypeRepository.findByModelName(modelName);\r
87         if (modelTypeDb.isPresent()) {\r
88             modelDefinition = modelTypeDb.get().getDefinition();\r
89         } else {\r
90             throw new BluePrintException(String.format("failed to get model definition (%s) from repo", modelName));\r
91         }\r
92         return Mono.just(modelDefinition);\r
93     }\r
94 }\r