aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java
blob: 2d31b3b10d0be94c0361b5dc3a0ac92416bcd513 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*-
 * ============LICENSE_START=======================================================
 * ONAP CLAMP
 * ================================================================================
 * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights
 *                             reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END============================================
 * ===================================================================
 *
 */

package org.onap.policy.clamp.loop.template;

import com.google.gson.JsonObject;
import java.util.List;
import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
import org.onap.policy.clamp.policy.pdpgroup.PdpGroupsAnalyzer;
import org.onap.policy.models.pdp.concepts.PdpGroups;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * This class contains the methods to access the policyModel object in db.
 */
@Service
public class PolicyModelsService {
    private final PolicyModelsRepository policyModelsRepository;

    /**
     * This is the new tosca converter that must be used in clamp.
     */
    @Autowired
    private ToscaConverterWithDictionarySupport toscaConverterWithDictionarySupport;

    @Autowired
    public PolicyModelsService(PolicyModelsRepository policyModelrepo) {
        policyModelsRepository = policyModelrepo;
    }

    /**
     * Save or Update Policy Model.
     *
     * @param policyModel The policyModel
     * @return The Policy Model
     */
    public PolicyModel saveOrUpdatePolicyModel(PolicyModel policyModel) {
        return policyModelsRepository.saveAndFlush(policyModel);
    }

    /**
     * Verify whether Policy Model exist by ID.
     *
     * @param policyModelId The policyModel Id
     * @return The flag indicates whether Policy Model exist
     */
    public boolean existsById(PolicyModelId policyModelId) {
        return policyModelsRepository.existsById(policyModelId);
    }

    /**
     * This method retrieves the tosca model and convert it to a Json schema.
     * That json schema is normally used by the UI.
     *
     * @param policyType        The policy model type id
     * @param policyTypeVersion The policy model type version
     * @return A JsonObject with the json schema describing the tosca
     */
    public JsonObject getPolicyModelJson(String policyType, String policyTypeVersion) {
        PolicyModel thePolicyModel = getPolicyModel(policyType, policyTypeVersion);
        // In the following use case we are not in the context of a closed loop, so the enrichment
        // of the json cannot be done, that's why the serviceModel provided is NULL.
        return toscaConverterWithDictionarySupport
                .convertToscaToJsonSchemaObject(thePolicyModel.getPolicyModelTosca(), policyType, null);
    }

    public List<String> getAllPolicyModelTypes() {
        return policyModelsRepository.getAllPolicyModelType();
    }

    public Iterable<PolicyModel> getAllPolicyModels() {
        return policyModelsRepository.findAll();
    }

    public PolicyModel getPolicyModel(String type, String version) {
        return policyModelsRepository.findById(new PolicyModelId(type, version)).orElse(null);
    }

    public Iterable<PolicyModel> getAllPolicyModelsByType(String type) {
        return policyModelsRepository.findByPolicyModelType(type);
    }

    /**
     * Retrieves the Tosca model Yaml string.
     *
     * @param type    The Policy Model Type
     * @param version The policy model version
     * @return The Tosca model Yaml string
     */
    public String getPolicyModelTosca(String type, String version) {
        return policyModelsRepository.findById(new PolicyModelId(type, version))
                .orElse(new PolicyModel()).getPolicyModelTosca();
    }

    /**
     * This method creates an PolicyModel in Db if it does not exist.
     *
     * @param policyModel The policyModel to save
     */
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public PolicyModel savePolicyModelInNewTransaction(PolicyModel policyModel) {
        return policyModelsRepository.saveAndFlush(policyModel);
    }

    /**
     * Update the Pdp Group info in Policy Model DB.
     *
     * @param pdpGroups The list of Pdp Group info received from Policy Engine
     */
    public void updatePdpGroupInfo(PdpGroups pdpGroups) {
        List<PolicyModel> policyModelsList = policyModelsRepository.findAll();
        PdpGroupsAnalyzer.updatePdpGroupOfPolicyModels(policyModelsList, pdpGroups);
        this.policyModelsRepository.saveAll(policyModelsList);
    }
}