5510e480c3ab425f853698a4379dc48217ac29e7
[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.fasterxml.jackson.databind.JsonNode;\r
21 import com.google.common.base.Preconditions;\r
22 import org.apache.commons.lang3.StringUtils;\r
23 import org.jetbrains.annotations.NotNull;\r
24 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;\r
25 import org.onap.ccsdk.apps.controllerblueprints.core.data.*;\r
26 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRepoService;\r
27 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;\r
28 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ModelType;\r
29 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ModelTypeRepository;\r
30 import org.springframework.stereotype.Service;\r
31 import reactor.core.publisher.Mono;\r
32 \r
33 import java.util.Optional;\r
34 \r
35 /**\r
36  * BluePrintRepoDBService\r
37  *\r
38  * @author Brinda Santh\r
39  */\r
40 @Service\r
41 @SuppressWarnings("unused")\r
42 public class BluePrintRepoDBService implements BluePrintRepoService {\r
43 \r
44     private ModelTypeRepository modelTypeRepository;\r
45     @SuppressWarnings("unused")\r
46     public BluePrintRepoDBService(ModelTypeRepository modelTypeRepository) {\r
47         this.modelTypeRepository = modelTypeRepository;\r
48     }\r
49 \r
50     @Override\r
51     public Mono<NodeType> getNodeType(@NotNull String nodeTypeName) throws BluePrintException {\r
52         return getModelType(nodeTypeName, NodeType.class);\r
53     }\r
54 \r
55     @Override\r
56     public Mono<DataType> getDataType(@NotNull String dataTypeName) throws BluePrintException {\r
57         return getModelType(dataTypeName, DataType.class);\r
58     }\r
59 \r
60     @Override\r
61     public Mono<ArtifactType> getArtifactType(@NotNull String artifactTypeName) throws BluePrintException {\r
62         return getModelType(artifactTypeName, ArtifactType.class);\r
63     }\r
64 \r
65     @Override\r
66     public Mono<RelationshipType> getRelationshipType(@NotNull String relationshipTypeName) throws BluePrintException {\r
67         return getModelType(relationshipTypeName, RelationshipType.class);\r
68     }\r
69 \r
70     @Override\r
71     public Mono<CapabilityDefinition> getCapabilityDefinition(@NotNull String capabilityDefinitionName) throws BluePrintException {\r
72         return getModelType(capabilityDefinitionName, CapabilityDefinition.class);\r
73     }\r
74 \r
75     private <T> Mono<T> getModelType(String modelName, Class<T> valueClass) throws BluePrintException {\r
76         Preconditions.checkArgument(StringUtils.isNotBlank(modelName),\r
77                 "Failed to get model from repo, model name is missing");\r
78 \r
79         return getModelDefinition(modelName).map(modelDefinition -> {\r
80                     Preconditions.checkNotNull(modelDefinition,\r
81                             String.format("Failed to get model content for model name (%s)", modelName));\r
82                     return JacksonUtils.readValue(modelDefinition, valueClass);\r
83                 }\r
84         );\r
85     }\r
86 \r
87     private Mono<JsonNode> getModelDefinition(String modelName) throws BluePrintException {\r
88         JsonNode modelDefinition;\r
89         Optional<ModelType> modelTypeDb = modelTypeRepository.findByModelName(modelName);\r
90         if (modelTypeDb.isPresent()) {\r
91             modelDefinition = modelTypeDb.get().getDefinition();\r
92         } else {\r
93             throw new BluePrintException(String.format("failed to get model definition (%s) from repo", modelName));\r
94         }\r
95         return Mono.just(modelDefinition);\r
96     }\r
97 }\r