2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.apex.plugins.persistence.jpa.hibernate;
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.Collections;
26 import java.util.List;
28 import javax.persistence.EntityManager;
30 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
31 import org.onap.policy.apex.model.basicmodel.concepts.AxConcept;
32 import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
33 import org.onap.policy.apex.model.basicmodel.dao.impl.DefaultApexDao;
34 import org.slf4j.ext.XLogger;
35 import org.slf4j.ext.XLoggerFactory;
38 * The Class HibernateApexDao is the Hibernate JPA implementation of the Apex DAO.
40 * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
42 public class HibernateApexDao extends DefaultApexDao {
43 private static final XLogger LOGGER = XLoggerFactory.getXLogger(HibernateApexDao.class);
45 private static final String FROM = "FROM ";
46 private static final String DELETE_FROM = "DELETE FROM ";
47 private static final String WHERE_KEY_NAME = " WHERE key.name='";
48 private static final String AND_KEY_VERSION = "' AND key.version='";
49 private static final String WHERE_KEY_PARENT_KEY_NAME = " WHERE key.parentKeyName='";
50 private static final String AND_KEY_PARENT_KEY_VERSION = "' AND key.parentKeyVersion='";
51 private static final String AND_KEY_LOCAL_NAME = "' AND key.localName='";
56 * @see org.onap.policy.apex.model.basicmodel.dao.impl.DefaultApexDao#delete(java.lang.Class,
57 * org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey)
60 public <T extends AxConcept> void delete(final Class<T> clazz, final AxArtifactKey key) {
64 final EntityManager mg = getEntityManager();
66 mg.getTransaction().begin();
67 mg.createQuery(DELETE_FROM + clazz.getSimpleName() + WHERE_KEY_NAME + key.getName() + AND_KEY_VERSION
68 + key.getVersion() + "'").executeUpdate();
69 mg.getTransaction().commit();
78 * @see org.onap.policy.apex.model.basicmodel.dao.impl.DefaultApexDao#delete(java.lang.Class,
79 * org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey)
82 public <T extends AxConcept> void delete(final Class<T> clazz, final AxReferenceKey key) {
86 final EntityManager mg = getEntityManager();
88 mg.getTransaction().begin();
89 mg.createQuery(DELETE_FROM + clazz.getSimpleName() + WHERE_KEY_PARENT_KEY_NAME + key.getParentKeyName()
90 + AND_KEY_PARENT_KEY_VERSION + key.getParentKeyVersion() + AND_KEY_LOCAL_NAME
91 + key.getLocalName() + "'").executeUpdate();
92 mg.getTransaction().commit();
101 * @see org.onap.policy.apex.model.basicmodel.dao.impl.DefaultApexDao#deleteByArtifactKey(java.lang.Class,
102 * java.util.Collection)
105 public <T extends AxConcept> int deleteByArtifactKey(final Class<T> clazz, final Collection<AxArtifactKey> keys) {
106 if (keys == null || keys.isEmpty()) {
109 int deletedCount = 0;
110 final EntityManager mg = getEntityManager();
112 mg.getTransaction().begin();
113 for (final AxArtifactKey key : keys) {
114 deletedCount += mg.createQuery(DELETE_FROM + clazz.getSimpleName() + WHERE_KEY_NAME + key.getName()
115 + AND_KEY_VERSION + key.getVersion() + "'").executeUpdate();
117 mg.getTransaction().commit();
127 * @see org.onap.policy.apex.core.model.dao.ApexDao#deleteByContextUsageKey(java.lang.Class, java.util.Collection)
130 public <T extends AxConcept> int deleteByReferenceKey(final Class<T> clazz, final Collection<AxReferenceKey> keys) {
131 if (keys == null || keys.isEmpty()) {
134 int deletedCount = 0;
135 final EntityManager mg = getEntityManager();
137 mg.getTransaction().begin();
138 for (final AxReferenceKey key : keys) {
139 deletedCount += mg.createQuery(DELETE_FROM + clazz.getSimpleName() + WHERE_KEY_PARENT_KEY_NAME
140 + key.getParentKeyName() + AND_KEY_PARENT_KEY_VERSION + key.getParentKeyVersion()
141 + AND_KEY_LOCAL_NAME + key.getLocalName() + "'").executeUpdate();
143 mg.getTransaction().commit();
153 * @see org.onap.policy.apex.core.model.dao.ApexDao#deleteAll(java.lang.Class)
156 public <T extends AxConcept> void deleteAll(final Class<T> clazz) {
157 final EntityManager mg = getEntityManager();
159 mg.getTransaction().begin();
160 mg.createQuery(DELETE_FROM + clazz.getSimpleName()).executeUpdate();
161 mg.getTransaction().commit();
170 * @see org.onap.policy.apex.core.model.dao.ApexDao#getAll(java.lang.Class)
173 public <T extends AxConcept> List<T> getAll(final Class<T> clazz) {
175 return Collections.emptyList();
177 final EntityManager mg = getEntityManager();
179 final List<T> result = mg.createQuery(FROM + clazz.getSimpleName(), clazz).getResultList();
180 final List<T> cloneResult = new ArrayList<>();
181 for (final T t : result) {
183 final T clonedT = clazz.newInstance();
185 cloneResult.add(clonedT);
186 } catch (final Exception e) {
187 LOGGER.warn("Could not clone object of class \"" + clazz.getCanonicalName() + "\"", e);
200 * @see org.onap.policy.apex.core.model.dao.ApexDao#getAll(java.lang.Class,
201 * org.onap.policy.apex.core.model.concepts.AxArtifactKey)
204 public <T extends AxConcept> List<T> getAll(final Class<T> clazz, final AxArtifactKey parentKey) {
206 return Collections.emptyList();
208 final EntityManager mg = getEntityManager();
210 return mg.createQuery(FROM + clazz.getSimpleName() + WHERE_KEY_PARENT_KEY_NAME + parentKey.getName()
211 + AND_KEY_PARENT_KEY_VERSION + parentKey.getVersion() + "'", clazz).getResultList();
220 * @see org.onap.policy.apex.core.model.dao.ApexDao#getArtifact(java.lang.Class,
221 * org.onap.policy.apex.core.model.concepts.AxArtifactKey)
224 public <T extends AxConcept> T getArtifact(final Class<T> clazz, final AxArtifactKey key) {
225 if (clazz == null || key == null) {
228 final EntityManager mg = getEntityManager();
231 ret = mg.createQuery(FROM + clazz.getSimpleName() + WHERE_KEY_NAME + key.getName() + AND_KEY_VERSION
232 + key.getVersion() + "'", clazz).getResultList();
236 if (ret == null || ret.isEmpty()) {
239 if (ret.size() > 1) {
240 throw new IllegalArgumentException("More than one result was returned for search for " + clazz
241 + " with key " + key.getId() + ": " + ret);
249 * @see org.onap.policy.apex.core.model.dao.ApexDao#getArtifact(java.lang.Class,
250 * org.onap.policy.apex.core.model.concepts.AxReferenceKey)
253 public <T extends AxConcept> T getArtifact(final Class<T> clazz, final AxReferenceKey key) {
254 if (clazz == null || key == null) {
257 final EntityManager mg = getEntityManager();
260 ret = mg.createQuery(FROM + clazz.getSimpleName() + WHERE_KEY_PARENT_KEY_NAME + key.getParentKeyName()
261 + AND_KEY_PARENT_KEY_VERSION + key.getParentKeyVersion() + AND_KEY_LOCAL_NAME
262 + key.getLocalName() + "'", clazz).getResultList();
266 if (ret == null || ret.isEmpty()) {
269 if (ret.size() > 1) {
270 throw new IllegalArgumentException("More than one result was returned for search for " + clazz
271 + " with key " + key.getId() + ": " + ret);