Distributing Blueprint to DCAE Dashboard Issue-ID: DCAEGEN2-2385>
[dcaegen2/platform.git] / mod2 / catalog-service / src / main / java / org / onap / dcaegen2 / platform / mod / web / service / policymodel / PolicyModelServiceImpl.java
1 /*
2  * ============LICENSE_START=======================================================
3  *  org.onap.dcae
4  *  ================================================================================
5  *  Copyright (c) 2020-2021 AT&T Intellectual Property. All rights reserved.
6  *  ================================================================================
7  *  Licensed under the Apache License, Version 2.0 (the "License");
8  *  you may not use this file except in compliance with the License.
9  *  You may obtain a copy of the License at
10  *
11  *       http://www.apache.org/licenses/LICENSE-2.0
12  *
13  *  Unless required by applicable law or agreed to in writing, software
14  *  distributed under the License is distributed on an "AS IS" BASIS,
15  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  *  See the License for the specific language governing permissions and
17  *  limitations under the License.
18  *  ============LICENSE_END=========================================================
19  */
20
21 package org.onap.dcaegen2.platform.mod.web.service.policymodel;
22
23 import lombok.Setter;
24 import lombok.extern.slf4j.Slf4j;
25 import org.onap.dcaegen2.platform.mod.model.exceptions.ErrorMessages;
26 import org.onap.dcaegen2.platform.mod.model.exceptions.policymodel.PolicyModelConflictException;
27 import org.onap.dcaegen2.platform.mod.model.exceptions.policymodel.PolicyModelDistributionEnvNotFoundException;
28 import org.onap.dcaegen2.platform.mod.model.exceptions.policymodel.PolicyModelNotFoundException;
29 import org.onap.dcaegen2.platform.mod.model.policymodel.DistributionInfo;
30 import org.onap.dcaegen2.platform.mod.model.policymodel.PolicyModel;
31 import org.onap.dcaegen2.platform.mod.model.policymodel.PolicyModelDistributionEnv;
32 import org.onap.dcaegen2.platform.mod.model.restapi.MetadataRequest;
33 import org.onap.dcaegen2.platform.mod.model.restapi.PolicyModelCreateRequest;
34 import org.onap.dcaegen2.platform.mod.model.restapi.PolicyModelUpdateRequest;
35 import org.springframework.beans.factory.annotation.Autowired;
36 import org.springframework.beans.factory.annotation.Value;
37 import org.springframework.stereotype.Service;
38 import org.springframework.transaction.annotation.Transactional;
39
40 import java.io.BufferedReader;
41 import java.io.InputStream;
42 import java.io.InputStreamReader;
43 import java.util.Date;
44 import java.util.List;
45
46 /**
47  * Policy Model Service implementation
48  */
49
50 @Service
51 @Setter
52 @Slf4j
53 public class PolicyModelServiceImpl implements PolicyModelService {
54
55     @Value("${policymodel.dev.server}")
56     private String devServer;
57
58     @Value("${policymodel.dev.port}")
59     private String devServerPort;
60
61     @Value("${policymodel.dev.user}")
62     private String devServerUser;
63
64     @Value("${policymodel.dev.password}")
65     private String devServerPassword;
66
67     @Autowired
68     private PolicyModelGateway policyModelGateway;
69
70     /**
71      * Lists all Policy Models
72      *
73      * @return
74      */
75     @Override
76     public List<PolicyModel> getAll() {
77         return policyModelGateway.findAll();
78     }
79
80     /**
81      * List a Policy Model by policyModel ID
82      *
83      * @param id
84      * @return
85      */
86     @Override
87     public PolicyModel getPolicyModelById(String id) {
88         return policyModelGateway.findById(id).orElseThrow(() -> new PolicyModelNotFoundException(String.format("Policy Model with id %s not found", id)));
89     }
90
91     /**
92      * creates a Policy Model
93      *
94      * @param request
95      * @return
96      */
97     @Override
98     @Transactional
99     public PolicyModel createPolicyModel(PolicyModelCreateRequest request, String user) {
100         checkIfPMNameAndVersionAlreadyExists(request.getName(), request.getVersion());
101         PolicyModel policyModel = new PolicyModel();
102         policyModel.setName(request.getName());
103         policyModel.setContent(request.getContent());
104         policyModel.setVersion(request.getVersion());
105         policyModel.setOwner(request.getOwner());
106         policyModel.setMetadata(getMetadataFields(request.getMetadata(), user));
107         return policyModelGateway.save(policyModel);
108     }
109
110     /**
111      * Update a Policy Model
112      *
113      * @param request
114      * @param modelId
115      * @return
116      */
117     @Override
118     public PolicyModel updatePolicyModel(PolicyModelUpdateRequest request, String modelId, String user) {
119         PolicyModel policyModel = getPolicyModelById(modelId);
120         updateFields(request, policyModel,user);
121         return policyModelGateway.save(policyModel);
122
123     }
124
125
126     /**
127      * Cerifies if a Policy Model Exist
128      *
129      * @param pmName
130      * @param pmVersion
131      * @return
132      */
133     private void checkIfPMNameAndVersionAlreadyExists(String pmName, String pmVersion) {
134         if (policyModelGateway.findByNameAndVersion(pmName, pmVersion).isPresent())
135             throw new PolicyModelConflictException(ErrorMessages.POLICYMODEL_NAME_VERSION_CONFLICT_MESSAGE);
136     }
137
138     /**
139      * creates a Policy Model Metadata
140      *
141      * @param metadata
142      * @param user
143      * @return
144      */
145     private MetadataRequest getMetadataFields(MetadataRequest metadata, String user) {
146         MetadataRequest metadataFields = MetadataRequest.builder().build();
147         metadataFields.setCreatedBy(user);
148         metadataFields.setCreatedOn(new Date());
149         if(metadata != null) {
150             if (metadata.getNotes() != null)
151                 metadataFields.setNotes(metadata.getNotes());
152             if (metadata.getLabels() != null)
153                 metadataFields.setLabels(metadata.getLabels());
154         }
155         return metadataFields;
156     }
157
158
159     /**
160      * Updates a Policy Model
161      *
162      * @param request
163      * @param policyModel
164      * @param user
165      * @return
166      */
167     private void updateFields(PolicyModelUpdateRequest request, PolicyModel policyModel, String user) {
168         String name = request.getName();
169         String version = request.getVersion();
170         if (!(name.equalsIgnoreCase(policyModel.getName()) && version.equalsIgnoreCase(policyModel.getVersion()))) {
171             checkIfPMNameAndVersionAlreadyExists(name, version);
172             policyModel.setName(name);
173             policyModel.setVersion(version);
174         }
175         if (request.getOwner() != null) {
176             policyModel.setOwner(request.getOwner());
177         }
178
179         if (request.getContent() != null) {
180             policyModel.setContent(request.getContent());
181         }
182         if (request.getMetadata() != null) {
183             updateMetadata(request,user);
184             policyModel.setMetadata(request.getMetadata());
185         }
186     }
187
188
189     /**
190      * Updates a Policy Model Metadata
191      *
192      * @param request
193      * @param user
194      * @return
195      */
196     private void updateMetadata(PolicyModelUpdateRequest request, String user) {
197         MetadataRequest metadataRequest = request.getMetadata();
198         metadataRequest.setUpdatedBy(user);
199         metadataRequest.setUpdatedOn(new Date());
200     }
201
202
203 }