summaryrefslogtreecommitdiffstats
path: root/ecomp-sdk/epsdk-core/src/main/java/org/openecomp/portalsdk/core/service/DataAccessServiceImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-sdk/epsdk-core/src/main/java/org/openecomp/portalsdk/core/service/DataAccessServiceImpl.java')
-rw-r--r--ecomp-sdk/epsdk-core/src/main/java/org/openecomp/portalsdk/core/service/DataAccessServiceImpl.java594
1 files changed, 594 insertions, 0 deletions
diff --git a/ecomp-sdk/epsdk-core/src/main/java/org/openecomp/portalsdk/core/service/DataAccessServiceImpl.java b/ecomp-sdk/epsdk-core/src/main/java/org/openecomp/portalsdk/core/service/DataAccessServiceImpl.java
new file mode 100644
index 00000000..9c52b1b4
--- /dev/null
+++ b/ecomp-sdk/epsdk-core/src/main/java/org/openecomp/portalsdk/core/service/DataAccessServiceImpl.java
@@ -0,0 +1,594 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.core.service;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.Criteria;
+import org.hibernate.FetchMode;
+import org.hibernate.Query;
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.ProjectionList;
+import org.openecomp.portalsdk.core.domain.Lookup;
+import org.openecomp.portalsdk.core.domain.support.DomainVo;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.service.support.FusionService;
+import org.openecomp.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Provides implementations of methods in {@link DataAccessService}.
+ */
+@Transactional
+public class DataAccessServiceImpl extends FusionService implements DataAccessService {
+
+ @Autowired
+ private SessionFactory sessionFactory;
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(DataAccessServiceImpl.class);
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#getDomainObject(java.lang.
+ * Class, java.io.Serializable, java.util.HashMap)
+ */
+ @Override
+ public DomainVo getDomainObject(Class domainClass, Serializable id, HashMap additionalParams) {
+ DomainVo vo = null;
+ Session session = sessionFactory.getCurrentSession();
+ logger.info(EELFLoggerDelegate.debugLogger, "Getting " + domainClass.getName() + " record for id - " + id.toString());
+ vo = (DomainVo) session.get(domainClass, id);
+
+ if (vo == null) {
+ try {
+ vo = (DomainVo) domainClass.newInstance();
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "An error occured while instantiating a class of " + domainClass.getName() + e.getMessage());
+ }
+ }
+ return vo;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ */
+ @Override
+ public void deleteDomainObject(DomainVo domainObject, HashMap additionalParams) {
+ Session session = sessionFactory.getCurrentSession();
+ session.delete(domainObject);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#deleteDomainObjects(java.
+ * lang.Class, java.lang.String, java.util.HashMap)
+ */
+ @Override
+ public void deleteDomainObjects(Class domainClass, String whereClause, HashMap additionalParams) {
+ int rowsAffected = 0;
+ Session session = sessionFactory.getCurrentSession();
+
+ StringBuffer sql = new StringBuffer("delete from ");
+
+ sql.append(domainClass.getName()).append(" where ").append(whereClause);
+
+ rowsAffected = session.createQuery(sql.toString()).executeUpdate();
+ /* return rowsAffected; */
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#saveDomainObject
+ */
+ @Override
+ public void saveDomainObject(DomainVo vo, HashMap additionalParams) {
+ Integer userId = 1;
+ if (additionalParams != null) {
+ // look for a passed user id
+ // userId = (Integer)additionalParams.get(Parameters.PARAM_USERID);
+ Object uid = additionalParams.get(Parameters.PARAM_USERID);
+ if (uid instanceof Integer) {
+ userId = (Integer) uid;
+ } else if (uid instanceof Long) {
+ userId = ((Long) uid).intValue();
+ }
+ // if (userId == null) {
+ // look for a passed request to get the user id from
+ // userId = new
+ // Integer(UserUtils.getUserId((HttpServletRequest)additionalParams.get(Parameters.PARAM_HTTP_REQUEST)));
+ // }
+ }
+ _update(vo, userId);
+ }
+
+ /**
+ * Creates or updates the specified virtual object. Uses the specified user
+ * ID as the creator and modifier if a new object is created; uses ID only
+ * as modifier if an object already exists.
+ *
+ * @param vo
+ * @param userId
+ * Ignored if value is zero.
+ */
+ protected final void _update(DomainVo vo, int userId) {
+ Date timestamp = new Date();
+
+ Session session = sessionFactory.getCurrentSession();
+
+ if (vo.getId() == null || vo.getId().intValue() == 0) { // add new
+ vo.setCreated(timestamp);
+ vo.setModified(timestamp);
+
+ if (userId != 0
+ && userId != Integer.parseInt(SystemProperties.getProperty(SystemProperties.APPLICATION_USER_ID))) {
+ vo.setCreatedId(new Long(userId));
+ vo.setModifiedId(new Long(userId));
+ }
+ } else { // update existing
+ vo.setModified(timestamp);
+
+ if (userId != 0
+ && userId != Integer.parseInt(SystemProperties.getProperty(SystemProperties.APPLICATION_USER_ID))) {
+ vo.setModifiedId(new Long(userId));
+ }
+ }
+
+ session.saveOrUpdate(vo);
+ }
+
+ /**
+ * generic get list method
+ *
+ * @param domainClass
+ * @param filterClause
+ * @param fromIndex
+ * @param toIndex
+ * @param orderBy
+ * @return
+ */
+ private List getListCommon(Class domainClass, String filterClause, Integer fromIndex, Integer toIndex,
+ String orderBy) {
+ List list = null;
+ String className = domainClass.getName();
+ Session session = sessionFactory.getCurrentSession();
+
+ if (logger.isInfoEnabled()) {
+ logger.info(EELFLoggerDelegate.debugLogger, "Getting " + className.toLowerCase() + " records"
+ + ((fromIndex != null) ? " from rows " + fromIndex.toString() + " to " + toIndex.toString() : "")
+ + "...");
+ if (filterClause != null && filterClause.length() > 0)
+ logger.info(EELFLoggerDelegate.debugLogger, "Filtering " + className + " by: " + filterClause);
+ }
+
+ list = session.createQuery("from " + className + Utilities.nvl(filterClause, "")
+ + ((orderBy != null) ? " order by " + orderBy : "")).list();
+ list = (fromIndex != null) ? list.subList(fromIndex.intValue() - 1, toIndex.intValue()) : list;
+
+ if (orderBy == null && list != null)
+ Collections.sort(list);
+
+ return list;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#getList(java.lang.Class,
+ * java.util.HashMap)
+ */
+ @Override
+ public List getList(Class domainClass, HashMap additionalParams) {
+ return getListCommon(domainClass, null, null, null, null);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#getList(java.lang.Class,
+ * java.lang.String, java.lang.String, java.util.HashMap)
+ */
+ @Override
+ public List getList(Class domainClass, String filter, String orderBy, HashMap additionalParams) {
+ return getListCommon(domainClass, filter, null, null, orderBy);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#getList(java.lang.Class,
+ * java.lang.String, int, int, java.lang.String, java.util.HashMap)
+ */
+ @Override
+ public List getList(Class domainClass, String filter, int fromIndex, int toIndex, String orderBy,
+ HashMap additionalParams) {
+ return getListCommon(domainClass, filter, new Integer(fromIndex), new Integer(toIndex), orderBy);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#getList(java.lang.Class,
+ * org.hibernate.criterion.ProjectionList, java.util.List, java.util.List)
+ */
+ @Override
+ public List<?> getList(Class<?> domainClass, ProjectionList projectionsList, List<Criterion> restrictionsList,
+ List<Order> orderByList) {
+
+ Session session = sessionFactory.getCurrentSession();
+
+ Criteria criteria = session.createCriteria(domainClass);
+
+ if (projectionsList != null) {
+ criteria.setProjection(projectionsList);
+ }
+
+ if (restrictionsList != null && !restrictionsList.isEmpty()) {
+ for (Criterion criterion : restrictionsList)
+ criteria.add(criterion);
+ }
+
+ if (orderByList != null && !orderByList.isEmpty()) {
+ for (Order order : orderByList)
+ criteria.addOrder(order);
+ }
+ /*
+ * if(fetchModeMap!=null){ Iterator<String> itr =
+ * fetchModeMap.keySet().iterator(); String key=null;
+ * while(itr.hasNext()){ key = itr.next();
+ * criteria.setFetchMode(key,fetchModeMap.get(key)); } }
+ */
+ return criteria.list();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#getLookupList(java.lang.
+ * String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String, java.util.HashMap)
+ */
+ @Override
+ public List getLookupList(String dbTable, String dbValueCol, String dbLabelCol, String dbFilter, String dbOrderBy,
+ HashMap additionalParams) {
+ if (logger.isInfoEnabled())
+ logger.info(EELFLoggerDelegate.debugLogger, "Retrieving " + dbTable + " lookup list...");
+ String dbOrderByCol = dbOrderBy;
+
+ Session session = sessionFactory.getCurrentSession();
+
+ // default the orderBy if null;
+ if (Utilities.nvl(dbOrderBy).length() == 0) {
+ dbOrderByCol = dbLabelCol;
+ dbOrderBy = dbLabelCol;
+ } else {
+ if (dbOrderBy.lastIndexOf(" ") > -1) {
+ dbOrderByCol = dbOrderBy.substring(0, dbOrderBy.lastIndexOf(" "));
+ }
+ }
+
+ StringBuffer sql = new StringBuffer();
+
+ sql.append("select distinct ").append(dbLabelCol).append(" as lab, ").append(dbValueCol).append(" as val, ")
+ .append(dbOrderByCol).append(" as sortOrder ").append("from ").append(dbTable).append(" ")
+ .append((Utilities.nvl(dbFilter).length() == 0) ? "" : (" where " + dbFilter)).append(" order by ")
+ .append(dbOrderBy);
+
+ List list = null;
+ try {
+ list = session.createSQLQuery(sql.toString()).addEntity(Lookup.class).list();
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.debugLogger, "Failed to create SQL lookup query for [" + sql + "]" + e.getMessage());
+ }
+ return list;
+ }
+
+ /*
+ * methods accepting a Map of additional params to passed to the DAO (for
+ * extensibility, just in case)
+ */
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeSQLQuery(java.lang.
+ * String, java.lang.Class, java.util.HashMap)
+ */
+ @Override
+ public List executeSQLQuery(String sql, Class domainClass, HashMap additionalParams) {
+ return executeSQLQuery(sql, domainClass, null, null, additionalParams);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeSQLQuery(java.lang.
+ * String, java.lang.Class, java.lang.Integer, java.lang.Integer,
+ * java.util.HashMap)
+ */
+ @Override
+ public List executeSQLQuery(String sql, Class domainClass, Integer fromIndex, Integer toIndex,
+ HashMap additionalParams) {
+ Session session = sessionFactory.getCurrentSession();
+
+ SQLQuery query = session.createSQLQuery(sql).addEntity(domainClass.getName().toLowerCase(), domainClass);
+
+ if (fromIndex != null && toIndex != null) {
+ query.setFirstResult(fromIndex.intValue());
+ int pageSize = (toIndex.intValue() - fromIndex.intValue()) + 1;
+ query.setMaxResults(pageSize);
+ }
+
+ return query.list();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeQuery(java.lang.
+ * String, java.util.HashMap)
+ */
+ @Override
+ public List executeQuery(String sql, HashMap additionalParams) {
+ return executeQuery(sql, null, null, additionalParams);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeQuery(java.lang.
+ * String, java.lang.Integer, java.lang.Integer, java.util.HashMap)
+ */
+ @Override
+ public List executeQuery(String sql, Integer fromIndex, Integer toIndex, HashMap additionalParams) {
+ Session session = sessionFactory.getCurrentSession();
+
+ Query query = session.createQuery(sql);
+
+ if (fromIndex != null && toIndex != null) {
+ query.setFirstResult(fromIndex.intValue());
+ int pageSize = (toIndex.intValue() - fromIndex.intValue()) + 1;
+ query.setMaxResults(pageSize);
+ }
+
+ return query.list();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeNamedQuery(java.lang
+ * .String, java.lang.Integer, java.lang.Integer, java.util.HashMap)
+ */
+ @Override
+ public List executeNamedQuery(String queryName, Integer fromIndex, Integer toIndex, HashMap additionalParams) {
+ return executeNamedQuery(queryName, null, fromIndex, toIndex, additionalParams);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeNamedQuery(java.lang
+ * .String, java.util.Map, java.util.HashMap)
+ */
+ @Override
+ public List executeNamedQuery(String queryName, Map params, HashMap additionalParams) {
+ return executeNamedQuery(queryName, params, null, null, additionalParams);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeNamedQuery(java.lang
+ * .String, java.util.Map, java.lang.Integer, java.lang.Integer,
+ * java.util.HashMap)
+ */
+ @Override
+ public List executeNamedQuery(String queryName, Map params, Integer fromIndex, Integer toIndex,
+ HashMap additionalParams) {
+ Session session = sessionFactory.getCurrentSession();
+ Query query = session.getNamedQuery(queryName);
+ bindQueryParameters(query, params);
+ if (fromIndex != null && toIndex != null) {
+ query.setFirstResult(fromIndex.intValue());
+ int pageSize = (toIndex.intValue() - fromIndex.intValue()) + 1;
+ query.setMaxResults(pageSize);
+ }
+ return query.list();
+ }
+
+ /**
+ * Stores parameters into the query using String keys from the map. Gives
+ * special treatment to map values of Collection and array type.
+ *
+ * @param query
+ * Query with parameters
+ * @param params
+ * Map of String to Object.
+ */
+ private void bindQueryParameters(Query query, Map params) {
+ if (params != null) {
+ for (Iterator i = params.entrySet().iterator(); i.hasNext();) {
+ Map.Entry entry = (Map.Entry) i.next();
+
+ Object parameterValue = entry.getValue();
+
+ if (!(parameterValue instanceof Collection) && !(parameterValue instanceof Object[])) {
+ query.setParameter((String) entry.getKey(), parameterValue);
+ } else if (parameterValue instanceof Collection) {
+ query.setParameterList((String) entry.getKey(), (Collection) parameterValue);
+ } else if (parameterValue instanceof Object[]) {
+ query.setParameterList((String) entry.getKey(), (Object[]) parameterValue);
+ }
+ }
+ }
+ }
+
+ // With Where Clause & RAPTOR's ZK
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalsdk.core.service.DataAccessService#
+ * executeNamedQueryWithOrderBy(java.lang.Class, java.lang.String,
+ * java.util.Map, java.lang.String, boolean, java.lang.Integer,
+ * java.lang.Integer, java.util.HashMap)
+ */
+ @Override
+ public List executeNamedQueryWithOrderBy(Class entity, String queryName, Map params, String _orderBy, boolean asc,
+ Integer fromIndex, Integer toIndex, HashMap additionalParams) {
+ // TODO Auto-generated method stub
+ logger.info(EELFLoggerDelegate.debugLogger, "Not implemented");
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeNamedCountQuery(java
+ * .lang.Class, java.lang.String, java.lang.String, java.util.Map)
+ */
+ @Override
+ public List executeNamedCountQuery(Class entity, String queryName, String whereClause, Map params) {
+ // TODO Auto-generated method stub
+ logger.info(EELFLoggerDelegate.debugLogger, "Not implemented");
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeNamedQuery(java.lang
+ * .Class, java.lang.String, java.lang.String, java.util.Map,
+ * java.lang.Integer, java.lang.Integer, java.util.HashMap)
+ */
+ @Override
+ public List executeNamedQuery(Class entity, String queryName, String whereClause, Map params, Integer fromIndex,
+ Integer toIndex, HashMap additionalParams) {
+ // TODO Auto-generated method stub
+ logger.info(EELFLoggerDelegate.debugLogger, "Not implemented");
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalsdk.core.service.DataAccessService#
+ * executeNamedQueryWithOrderBy(java.lang.Class, java.lang.String,
+ * java.lang.String, java.util.Map, java.lang.String, boolean,
+ * java.lang.Integer, java.lang.Integer, java.util.HashMap)
+ */
+ @Override
+ public List executeNamedQueryWithOrderBy(Class entity, String queryName, String whereClause, Map params,
+ String _orderBy, boolean asc, Integer fromIndex, Integer toIndex, HashMap additionalParams) {
+ // TODO Auto-generated method stub
+ logger.info(EELFLoggerDelegate.debugLogger, "Not implemented");
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#getList(java.lang.Class,
+ * org.hibernate.criterion.ProjectionList, java.util.List, java.util.List,
+ * java.util.HashMap)
+ */
+ @Override
+ public List<?> getList(Class<?> domainClass, ProjectionList projectionsList, List<Criterion> restrictionsList,
+ List<Order> orderByList, HashMap<String, FetchMode> fetchModeMap) {
+ // TODO Auto-generated method stub
+ logger.info(EELFLoggerDelegate.debugLogger, "Not implemented");
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeUpdateQuery(java.
+ * lang.String, java.util.HashMap)
+ */
+ @Override
+ public int executeUpdateQuery(String sql, HashMap additionalParams) throws RuntimeException {
+ // TODO Auto-generated method stub
+ logger.info(EELFLoggerDelegate.debugLogger, "Not implemented");
+ return 0;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.openecomp.portalsdk.core.service.DataAccessService#executeNamedUpdateQuery(
+ * java.lang.String, java.util.Map, java.util.HashMap)
+ */
+ @Override
+ public int executeNamedUpdateQuery(String queryName, Map params, HashMap additionalParams) throws RuntimeException {
+ // TODO Auto-generated method stub
+ logger.info(EELFLoggerDelegate.debugLogger, "Not implemented");
+ return 0;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.openecomp.portalsdk.core.service.DataAccessService#synchronize(java.util.
+ * HashMap)
+ */
+ @Override
+ public void synchronize(HashMap additionalParams) {
+ // TODO Auto-generated method stub
+ logger.info(EELFLoggerDelegate.debugLogger, "Not implemented");
+ }
+
+}