Add service template persistence provider
[policy/models.git] / models-tosca / src / main / java / org / onap / policy / models / tosca / simple / provider / SimpleToscaServiceTemplateProvider.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2020 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.tosca.simple.provider;
22
23 import lombok.NonNull;
24
25 import org.onap.policy.models.base.PfConceptKey;
26 import org.onap.policy.models.base.PfModelException;
27 import org.onap.policy.models.dao.PfDao;
28 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 /**
33  * This class provides CRUD to and from the database en bloc using Service Template reads and writes.
34  *
35  * @author Liam Fallon (liam.fallon@est.tech)
36  */
37 public class SimpleToscaServiceTemplateProvider {
38     private static final Logger LOGGER = LoggerFactory.getLogger(SimpleToscaServiceTemplateProvider.class);
39
40     // There is only one service template in the database becasue TOSCA does not specify names and versions on service
41     // templates.
42     private static final PfConceptKey DEFAULT_SERVICE_TEMPLATE_KEY =
43             new PfConceptKey(JpaToscaServiceTemplate.DEFAULT_NAME, JpaToscaServiceTemplate.DEFAULT_VERSION);
44
45     /**
46      * Get a service template from the database.
47      *
48      * @param dao the DAO to use to access the database
49      * @return the Service Template read from the database
50      * @throws PfModelException on errors getting the service template
51      */
52     public JpaToscaServiceTemplate read(@NonNull final PfDao dao) throws PfModelException {
53         LOGGER.debug("->read");
54
55         // Get the service template
56         JpaToscaServiceTemplate serviceTemplate = dao.get(JpaToscaServiceTemplate.class, DEFAULT_SERVICE_TEMPLATE_KEY);
57
58         LOGGER.debug("<-read: serviceTemplate={}", serviceTemplate);
59         return serviceTemplate;
60     }
61
62     /**
63      * Write a service template to the database.
64      *
65      * @param dao the DAO to use to access the database
66      * @param serviceTemplate the service template to be written
67      * @return the TOSCA service template overwritten by this method
68      * @throws PfModelException on errors writing the service template
69      */
70     public JpaToscaServiceTemplate write(@NonNull final PfDao dao,
71             @NonNull final JpaToscaServiceTemplate serviceTemplate) throws PfModelException {
72         LOGGER.debug("->write: serviceTempalate={}", serviceTemplate);
73
74         JpaToscaServiceTemplate overwrittenServiceTemplate =
75                 dao.get(JpaToscaServiceTemplate.class, serviceTemplate.getKey());
76
77         if (overwrittenServiceTemplate != null) {
78             dao.delete(overwrittenServiceTemplate);
79         }
80
81         dao.create(serviceTemplate);
82
83         LOGGER.debug("<-write: overwrittenServiceTemplate={}", overwrittenServiceTemplate);
84         return overwrittenServiceTemplate;
85     }
86
87     /**
88      * Delete a service template from the database.
89      *
90      * @param dao the DAO to use to access the database
91      * @return the Service Template stored in the database
92      * @throws PfModelException on errors getting the service template
93      */
94     public JpaToscaServiceTemplate delete(@NonNull final PfDao dao) throws PfModelException {
95         LOGGER.debug("->delete");
96
97         JpaToscaServiceTemplate serviceTemplateToBeDeleted =
98                 dao.get(JpaToscaServiceTemplate.class, DEFAULT_SERVICE_TEMPLATE_KEY);
99
100         dao.delete(serviceTemplateToBeDeleted);
101
102         LOGGER.debug("<-delete: serviceTemplate={}", serviceTemplateToBeDeleted);
103         return serviceTemplateToBeDeleted;
104     }
105
106 }