aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/main/java/org/onap/policy/pap/main/rest/PolicyStatusProvider.java
blob: 8c969782066f1ae8edd73fae05922bf52b38b163 (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
139
/*-
 * ============LICENSE_START=======================================================
 * ONAP
 * ================================================================================
 * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
 * Modifications Copyright (C) 2021 Bell Canada. 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.pap.main.rest;

import java.util.Collection;
import java.util.stream.Collectors;
import org.onap.policy.common.utils.services.Registry;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.pap.concepts.PolicyStatus;
import org.onap.policy.models.pdp.concepts.PdpPolicyStatus;
import org.onap.policy.models.provider.PolicyModelsProvider;
import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
import org.onap.policy.pap.main.PapConstants;
import org.onap.policy.pap.main.PolicyModelsProviderFactoryWrapper;
import org.onap.policy.pap.main.notification.DeploymentTracker;

/**
 * Provider for PAP component to query policy deployment status.
 */
public class PolicyStatusProvider {

    /**
     * Factory for PAP DAO.
     */
    private final PolicyModelsProviderFactoryWrapper daoFactory;


    /**
     * Constructs the object. Loads all deployed policies into the internal cache.
     */
    public PolicyStatusProvider() {
        this.daoFactory = Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class);
    }

    /**
     * Gets the deployment status of all policies.
     *
     * @return the deployment status of all policies
     * @throws PfModelException if a DB error occurs
     */
    public Collection<PolicyStatus> getStatus() throws PfModelException {
        try (PolicyModelsProvider dao = daoFactory.create()) {
            return accumulate(dao.getAllPolicyStatus());
        }
    }

    /**
     * Gets the deployment status of a policy.
     *
     * @param policy policy of interest
     * @return the deployment status of all policies
     * @throws PfModelException if a DB error occurs
     */
    public Collection<PolicyStatus> getStatus(ToscaConceptIdentifierOptVersion policy) throws PfModelException {
        try (PolicyModelsProvider dao = daoFactory.create()) {
            return accumulate(dao.getAllPolicyStatus(policy));
        }
    }

    /**
     * Accumulates the deployment status of individual PDP/policy pairs into a status for
     * a policy.
     *
     * @param source PDP/policy pairs
     * @return the deployment status of the policies
     */
    private Collection<PolicyStatus> accumulate(Collection<PdpPolicyStatus> source) {
        DeploymentTracker tracker = new DeploymentTracker();

        for (PdpPolicyStatus status : source) {
            if (status.isDeploy()) {
                tracker.add(status);
            }
        }

        return tracker.getDeploymentStatus();
    }


    /**
     * Gets the status of all policies.
     *
     * @return the status of all policies
     * @throws PfModelException if a DB error occurs
     */
    public Collection<PdpPolicyStatus> getPolicyStatus() throws PfModelException {
        try (PolicyModelsProvider dao = daoFactory.create()) {
            return dao.getAllPolicyStatus();
        }
    }

    /**
     * Gets the status of policies in a PdpGroup.
     *
     * @param pdpGroupName the pdp group
     * @return the deployment status of policies
     * @throws PfModelException if a DB error occurs
     */
    public Collection<PdpPolicyStatus> getPolicyStatus(String pdpGroupName) throws PfModelException {
        try (PolicyModelsProvider dao = daoFactory.create()) {
            return dao.getGroupPolicyStatus(pdpGroupName);
        }
    }

    /**
     * Gets the status of a policy in a PdpGroup.
     *
     * @param pdpGroupName the pdp group
     * @param policy the policy
     * @return the deployment status of the policy
     * @throws PfModelException if a DB error occurs
     */
    public Collection<PdpPolicyStatus> getPolicyStatus(String pdpGroupName, ToscaConceptIdentifierOptVersion policy)
        throws PfModelException {
        try (PolicyModelsProvider dao = daoFactory.create()) {
            return dao.getAllPolicyStatus(policy).stream().filter(p -> p.getPdpGroup().equals(pdpGroupName))
                .collect(Collectors.toList());
        }
    }
}