/*- * ================================================================================ * eCOMP Portal * ================================================================================ * 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.portalapp.portal.service; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.TreeSet; import org.openecomp.portalapp.portal.domain.EPRole; import org.openecomp.portalapp.portal.logging.aop.EPMetricsLog; import org.openecomp.portalsdk.core.domain.RoleFunction; import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.openecomp.portalsdk.core.service.DataAccessService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service("epRoleService") @Transactional @org.springframework.context.annotation.Configuration @EnableAspectJAutoProxy @EPMetricsLog public class EPRoleServiceImpl implements EPRoleService{ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPRoleServiceImpl.class); @Autowired private DataAccessService dataAccessService; @SuppressWarnings("unchecked") public List getRoleFunctions() { //List msgDB = getDataAccessService().getList(Profile.class, null); return getDataAccessService().getList(RoleFunction.class, null); } @SuppressWarnings("unchecked") public List getAvailableChildRoles(Long roleId) { List availableChildRoles = (List)getDataAccessService().getList(EPRole.class,null); if(roleId==null || roleId==0){ return availableChildRoles; } EPRole currentRole = (EPRole)getDataAccessService().getDomainObject(EPRole.class,roleId,null); Set allParentRoles = new TreeSet(); allParentRoles = getAllParentRolesAsList(currentRole, allParentRoles); Iterator availableChildRolesIterator = availableChildRoles.iterator(); while (availableChildRolesIterator.hasNext()) { EPRole role = availableChildRolesIterator.next(); if(!role.getActive() || allParentRoles.contains(role) || role.getId().equals(roleId)){ availableChildRolesIterator.remove(); } } return availableChildRoles; } private Set getAllParentRolesAsList(EPRole role, Set allParentRoles) { Set parentRoles = role.getParentRoles(); allParentRoles.addAll(parentRoles); Iterator parentRolesIterator = parentRoles.iterator(); while (parentRolesIterator.hasNext()) { getAllParentRolesAsList(parentRolesIterator.next(),allParentRoles); } return allParentRoles; } public RoleFunction getRoleFunction(String code) { return (RoleFunction)getDataAccessService().getDomainObject(RoleFunction.class, code, null); } public void saveRoleFunction(RoleFunction domainRoleFunction) { getDataAccessService().saveDomainObject(domainRoleFunction, null); } public void deleteRoleFunction(RoleFunction domainRoleFunction) { getDataAccessService().deleteDomainObject(domainRoleFunction, null); } public EPRole getRole(Long id) { return (EPRole)getDataAccessService().getDomainObject(EPRole.class, id, null); } // TODO: refactor private static final String getAppRoleSqlFormat ="SELECT * FROM fn_role where APP_ID = %s AND APP_ROLE_ID = %s"; @SuppressWarnings("unchecked") public EPRole getRole(Long appId, Long appRoleid) { if(appId == null || appRoleid == null){ logger.error(EELFLoggerDelegate.errorLogger, String.format("getRole does not support null appId or roleId. appRoleid=%s, appRoleid=%s", appId, appRoleid)); return null; } String sql = String.format(getAppRoleSqlFormat, appId, appRoleid); List roles = (List)dataAccessService.executeSQLQuery(sql, EPRole.class, null); int resultsCount = roles.size(); if(resultsCount > 1){ logger.error(EELFLoggerDelegate.errorLogger, String.format("search by appId=%s, appRoleid=%s should have returned 0 or 1 results. Got %d. This is an internal server error.", appId, appRoleid, resultsCount)); logger.error(EELFLoggerDelegate.errorLogger, "Trying to recover from duplicates by returning the first search result. This issue should be treated, it is probably not critical because duplicate roles should be similar."); return roles.get(0); } else if(resultsCount == 1){ return roles.get(0); } return null; } public void saveRole(EPRole domainRole) { getDataAccessService().saveDomainObject(domainRole, null); } public void deleteRole(EPRole domainRole) { getDataAccessService().deleteDomainObject(domainRole, null); } @SuppressWarnings("unchecked") public List getAvailableRoles() { return getDataAccessService().getList(EPRole.class, null); } public DataAccessService getDataAccessService() { return dataAccessService; } public void setDataAccessService(DataAccessService dataAccessService) { this.dataAccessService = dataAccessService; } }