Add impl of more PDP persistence
[policy/models.git] / models-provider / src / main / java / org / onap / policy / models / provider / PolicyModelsProvider.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.provider;
22
23 import java.util.List;
24 import java.util.Map;
25
26 import lombok.NonNull;
27
28 import org.apache.commons.lang3.tuple.Pair;
29 import org.onap.policy.models.base.PfModelException;
30 import org.onap.policy.models.pdp.concepts.Pdp;
31 import org.onap.policy.models.pdp.concepts.PdpGroup;
32 import org.onap.policy.models.pdp.concepts.PdpStatistics;
33 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
34 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
35 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
36 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
37 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
38 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput;
39 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
40
41 /**
42  * This interface describes the operations that are provided to users and components for reading objects from and
43  * writing objects to the database.
44  *
45  * @author Liam Fallon (liam.fallon@est.tech)
46  */
47 public interface PolicyModelsProvider extends AutoCloseable {
48     /**
49      * Open the policy model provider initializing whatever internal handling it needs.
50      *
51      * @throws PfModelException on errors opening the models provider
52      */
53     public void init() throws PfModelException;
54
55     @Override
56     public void close() throws PfModelException;
57
58     /**
59      * Get policy types.
60      *
61      * @param name the name of the policy type to get, set to null to get all policy types
62      * @param version the version of the policy type to get, set to null to get all versions
63      * @return the policy types found
64      * @throws PfModelException on errors getting policy types
65      */
66     public ToscaServiceTemplate getPolicyTypes(final String name, final String version) throws PfModelException;
67
68     /**
69      * Get policy types.
70      *
71      * @param name the name of the policy type to get, set to null to get all policy types
72      * @param version the version of the policy type to get, set to null to get all versions
73      * @return the policy types found
74      * @throws PfModelException on errors getting policy types
75      */
76     public List<ToscaPolicyType> getPolicyTypeList(final String name, final String version) throws PfModelException;
77
78     /**
79      * Get latest policy types.
80      *
81      * @param name the name of the policy type to get, set to null to get all policy types
82      * @return the policy types found
83      * @throws PfModelException on errors getting policy types
84      */
85     public ToscaServiceTemplate getLatestPolicyTypes(final String name) throws PfModelException;
86
87     /**
88      * Get latest policy types.
89      *
90      * @param name the name of the policy type to get, set to null to get all policy types
91      * @return the policy types found
92      * @throws PfModelException on errors getting policy types
93      */
94     public List<ToscaPolicyType> getLatestPolicyTypeList(final String name) throws PfModelException;
95
96     /**
97      * Create policy types.
98      *
99      * @param serviceTemplate the service template containing the definition of the policy types to be created
100      * @return the TOSCA service template containing the created policy types
101      * @throws PfModelException on errors creating policy types
102      */
103     public ToscaServiceTemplate createPolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate)
104             throws PfModelException;
105
106     /**
107      * Create policy types.
108      *
109      * @param serviceTemplate the service template containing the definition of the policy types to be modified
110      * @return the TOSCA service template containing the modified policy types
111      * @throws PfModelException on errors updating policy types
112      */
113     public ToscaServiceTemplate updatePolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate)
114             throws PfModelException;
115
116     /**
117      * Delete policy type.
118      *
119      * @param name the name of the policy type to delete.
120      * @param version the version of the policy type to delete.
121      * @return the TOSCA service template containing the policy type that was deleted
122      * @throws PfModelException on errors deleting policy types
123      */
124     public ToscaServiceTemplate deletePolicyType(@NonNull final String name, @NonNull final String version)
125             throws PfModelException;
126
127     /**
128      * Get policies.
129      *
130      * @param name the name of the policy to get, null to get all policies
131      * @param version the version of the policy to get, null to get all versions of a policy
132      * @return the policies found
133      * @throws PfModelException on errors getting policies
134      */
135     public ToscaServiceTemplate getPolicies(final String name, final String version) throws PfModelException;
136
137     /**
138      * Get policies.
139      *
140      * @param name the name of the policy to get, null to get all policies
141      * @param version the version of the policy to get, null to get all versions of a policy
142      * @return the policies found
143      * @throws PfModelException on errors getting policies
144      */
145     public List<ToscaPolicy> getPolicyList(final String name, final String version) throws PfModelException;
146
147     /**
148      * Get policies for a policy type name.
149      *
150      * @param policyTypeName the name of the policy type for which to get policies
151      * @param policyTypeVersion the version of the policy type, null returns all versions of deployed policies for
152      *        policy types
153      * @return the policies found
154      * @throws PfModelException on errors getting policies
155      */
156     public ToscaServiceTemplate getPolicies4PolicyType(@NonNull final String policyTypeName,
157             final String policyTypeVersion) throws PfModelException;
158
159     /**
160      * Get policies for a policy type name.
161      *
162      * @param policyTypeName the name of the policy type for which to get policies
163      * @param policyTypeVersion the version of the policy type, null returns all versions of deployed policies for
164      *        policy types
165      * @return the policies found
166      * @throws PfModelException on errors getting policies
167      */
168     public List<ToscaPolicy> getPolicyList4PolicyType(@NonNull final String policyTypeName,
169             final String policyTypeVersion) throws PfModelException;
170
171     /**
172      * Get latest policies.
173      *
174      * @param name the name of the policy to get, null to get all policies
175      * @return the policies found
176      * @throws PfModelException on errors getting policies
177      */
178     public ToscaServiceTemplate getLatestPolicies(final String name) throws PfModelException;
179
180     /**
181      * Get latest policies.
182      *
183      * @param name the name of the policy to get, null to get all policies
184      * @return the policies found
185      * @throws PfModelException on errors getting policies
186      */
187     public List<ToscaPolicy> getLatestPolicyList(final String name) throws PfModelException;
188
189     /**
190      * Create policies.
191      *
192      * @param serviceTemplate the service template containing the definitions of the new policies to be created.
193      * @return the TOSCA service template containing the policy types that were created
194      * @throws PfModelException on errors creating policies
195      */
196     public ToscaServiceTemplate createPolicies(@NonNull final ToscaServiceTemplate serviceTemplate)
197             throws PfModelException;
198
199     /**
200      * Update policies.
201      *
202      * @param serviceTemplate the service template containing the definitions of the policies to be updated.
203      * @return the TOSCA service template containing the policies that were updated
204      * @throws PfModelException on errors updating policies
205      */
206     public ToscaServiceTemplate updatePolicies(@NonNull final ToscaServiceTemplate serviceTemplate)
207             throws PfModelException;
208
209     /**
210      * Delete policy.
211      *
212      * @param name the name of the policy to delete.
213      * @param version the version of the policy to delete.
214      * @return the TOSCA service template containing the policy that was deleted
215      * @throws PfModelException on errors deleting a policy
216      */
217     public ToscaServiceTemplate deletePolicy(@NonNull final String name, @NonNull final String version)
218             throws PfModelException;
219
220     /**
221      * Get legacy operational policy.
222      *
223      * @param policyId ID of the policy.
224      * @return the policies found
225      * @throws PfModelException on errors getting policies
226      */
227     public LegacyOperationalPolicy getOperationalPolicy(@NonNull final String policyId) throws PfModelException;
228
229     /**
230      * Create legacy operational policy.
231      *
232      * @param legacyOperationalPolicy the definition of the policy to be created.
233      * @return the created policy
234      * @throws PfModelException on errors creating policies
235      */
236     public LegacyOperationalPolicy createOperationalPolicy(
237             @NonNull final LegacyOperationalPolicy legacyOperationalPolicy) throws PfModelException;
238
239     /**
240      * Update legacy operational policy.
241      *
242      * @param legacyOperationalPolicy the definition of the policy to be updated
243      * @return the updated policy
244      * @throws PfModelException on errors updating policies
245      */
246     public LegacyOperationalPolicy updateOperationalPolicy(
247             @NonNull final LegacyOperationalPolicy legacyOperationalPolicy) throws PfModelException;
248
249     /**
250      * Delete legacy operational policy.
251      *
252      * @param policyId ID of the policy.
253      * @return the deleted policy
254      * @throws PfModelException on errors deleting policies
255      */
256     public LegacyOperationalPolicy deleteOperationalPolicy(@NonNull final String policyId) throws PfModelException;
257
258     /**
259      * Get legacy guard policy.
260      *
261      * @param policyId ID of the policy.
262      * @return the policies found
263      * @throws PfModelException on errors getting policies
264      */
265     public Map<String, LegacyGuardPolicyOutput> getGuardPolicy(@NonNull final String policyId) throws PfModelException;
266
267     /**
268      * Create legacy guard policy.
269      *
270      * @param legacyGuardPolicy the definition of the policy to be created.
271      * @return the created policy
272      * @throws PfModelException on errors creating policies
273      */
274     public Map<String, LegacyGuardPolicyOutput> createGuardPolicy(
275             @NonNull final LegacyGuardPolicyInput legacyGuardPolicy) throws PfModelException;
276
277     /**
278      * Update legacy guard policy.
279      *
280      * @param legacyGuardPolicy the definition of the policy to be updated
281      * @return the updated policy
282      * @throws PfModelException on errors updating policies
283      */
284     public Map<String, LegacyGuardPolicyOutput> updateGuardPolicy(
285             @NonNull final LegacyGuardPolicyInput legacyGuardPolicy) throws PfModelException;
286
287     /**
288      * Delete legacy guard policy.
289      *
290      * @param policyId ID of the policy.
291      * @return the deleted policy
292      * @throws PfModelException on errors deleting policies
293      */
294     public Map<String, LegacyGuardPolicyOutput> deleteGuardPolicy(@NonNull final String policyId)
295             throws PfModelException;
296
297     /**
298      * Get PDP groups.
299      *
300      * @param name the name of the policy to get, null to get all PDP groups
301      * @param version the version of the policy to get, null to get all versions of a PDP group
302      * @return the PDP groups found
303      * @throws PfModelException on errors getting PDP groups
304      */
305     public List<PdpGroup> getPdpGroups(final String name, final String version) throws PfModelException;
306
307     /**
308      * Get latest PDP Groups, returns PDP groups in all states.
309      *
310      * @param name the name of the PDP group to get, null to get all PDP groups
311      * @return the PDP groups found
312      * @throws PfModelException on errors getting policies
313      */
314     public List<PdpGroup> getLatestPdpGroups(final String name) throws PfModelException;
315
316     /**
317      * Get a filtered list of PDP groups, returns only active PDP groups.
318      *
319      * @param pdpType The PDP type filter for the returned PDP groups, null to get policy types across PDP subgroups
320      * @param supportedPolicyTypes a list of policy type name/version pairs that the PDP groups must support.
321      * @return the PDP groups found
322      */
323     public List<PdpGroup> getFilteredPdpGroups(final String pdpType,
324             @NonNull final List<Pair<String, String>> supportedPolicyTypes);
325
326     /**
327      * Creates PDP groups.
328      *
329      * @param pdpGroups a specification of the PDP groups to create
330      * @return the PDP groups created
331      * @throws PfModelException on errors creating PDP groups
332      */
333     public List<PdpGroup> createPdpGroups(@NonNull final List<PdpGroup> pdpGroups) throws PfModelException;
334
335     /**
336      * Updates PDP groups.
337      *
338      * @param pdpGroups a specification of the PDP groups to update
339      * @return the PDP groups updated
340      * @throws PfModelException on errors updating PDP groups
341      */
342     public List<PdpGroup> updatePdpGroups(@NonNull final List<PdpGroup> pdpGroups) throws PfModelException;
343
344     /**
345      * Update a PDP subgroup.
346      *
347      * @param pdpGroupName the name of the PDP group of the PDP subgroup
348      * @param pdpGroupVersion the version of the PDP group of the PDP subgroup
349      * @param pdpSubGroup the PDP subgroup to be updated
350      * @throws PfModelException on errors updating PDP subgroups
351      */
352     public void updatePdpSubGroup(@NonNull final String pdpGroupName, @NonNull final String pdpGroupVersion,
353             @NonNull final PdpSubGroup pdpSubGroup) throws PfModelException;
354
355     /**
356      * Update a PDP.
357      *
358      * @param pdpGroupName the name of the PDP group of the PDP subgroup
359      * @param pdpGroupVersion the version of the PDP group of the PDP subgroup
360      * @param pdpSubGroup the PDP subgroup to be updated
361      * @param pdp the PDP to be updated
362      * @throws PfModelException on errors updating PDP subgroups
363      */
364     public void updatePdp(@NonNull final String pdpGroupName, @NonNull final String pdpGroupVersion,
365             @NonNull final String pdpSubGroup, @NonNull final Pdp pdp) throws PfModelException;
366
367     /**
368      * Delete a PDP group.
369      *
370      * @param name the name of the policy to get, null to get all PDP groups
371      * @param version the version of the policy to get, null to get all versions of a PDP group
372      * @return the PDP group deleted
373      * @throws PfModelException on errors deleting PDP groups
374      */
375     public PdpGroup deletePdpGroup(@NonNull final String name, @NonNull final String version) throws PfModelException;
376
377     /**
378      * Get PDP statistics.
379      *
380      * @param name the name of the PDP group to get statistics for, null to get all PDP groups
381      * @param version the version of the PDP group to get statistics for, null to get all versions of a PDP group
382      * @return the statistics found
383      * @throws PfModelException on errors getting statistics
384      */
385     public List<PdpStatistics> getPdpStatistics(final String name, final String version) throws PfModelException;
386
387     /**
388      * Update PDP statistics for a PDP.
389      *
390      * @param pdpGroupName the name of the PDP group containing the PDP that the statistics are for
391      * @param pdpGroupVersion the version of the PDP group containing the PDP that the statistics are for
392      * @param pdpType the PDP type of the subgroup containing the PDP that the statistics are for
393      * @param pdpInstanceId the instance ID of the PDP to update statistics for
394      * @throws PfModelException on errors updating statistics
395      */
396     public void updatePdpStatistics(@NonNull final String pdpGroupName, @NonNull final String pdpGroupVersion,
397             @NonNull final String pdpType, @NonNull final String pdpInstanceId,
398             @NonNull final PdpStatistics pdppStatistics) throws PfModelException;
399
400     /**
401      * Get deployed policies.
402      *
403      * @param name the name of the policy to get, null to get all policies
404      * @return the policies deployed as a map of policy lists keyed by PDP group name and version
405      * @throws PfModelException on errors getting policies
406      */
407     public Map<Pair<String, String>, List<ToscaPolicy>> getDeployedPolicyList(final String name)
408             throws PfModelException;
409 }