package org.openecomp.sdc.be.components.impl; import org.apache.commons.lang3.StringUtils; import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; import org.openecomp.sdc.be.components.validation.UserValidations; import org.openecomp.sdc.be.config.ConfigurationManager; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.dao.jsongraph.TitanDao; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.model.GroupTypeDefinition; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.be.model.operations.impl.GroupTypeOperation; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; import java.util.Set; import static java.util.Collections.emptySet; @Component("groupTypeBusinessLogic") public class GroupTypeBusinessLogic { private final GroupTypeOperation groupTypeOperation; private final TitanDao titanDao; private final UserValidations userValidations; private final ComponentsUtils componentsUtils; public GroupTypeBusinessLogic(GroupTypeOperation groupTypeOperation, TitanDao titanDao, UserValidations userValidations, ComponentsUtils componentsUtils) { this.groupTypeOperation = groupTypeOperation; this.titanDao = titanDao; this.userValidations = userValidations; this.componentsUtils = componentsUtils; } public List getAllGroupTypes(String userId, String internalComponentType) { try { userValidations.validateUserExists(userId, "get group types", true); Set excludeGroupTypes = getExcludedGroupTypes(internalComponentType); return groupTypeOperation.getAllGroupTypes(excludeGroupTypes); } finally { titanDao.commit(); } } public GroupTypeDefinition getLatestGroupTypeByType(String groupTypeName) { return groupTypeOperation.getLatestGroupTypeByType(groupTypeName, true) .left() .on(e -> failOnGetGroupType(e, groupTypeName)); } public Set getExcludedGroupTypes(String internalComponentType) { if (StringUtils.isEmpty(internalComponentType)) { return emptySet(); } Map> excludedGroupTypesMapping = ConfigurationManager.getConfigurationManager().getConfiguration().getExcludedGroupTypesMapping(); Set excludedTypes = excludedGroupTypesMapping.get(internalComponentType); return excludedTypes == null ? emptySet() : excludedTypes; } private GroupTypeDefinition failOnGetGroupType(StorageOperationStatus status, String groupType) { titanDao.rollback(); if (status == StorageOperationStatus.NOT_FOUND) { throw new ComponentException(ActionStatus.GROUP_TYPE_IS_INVALID, groupType); } else { throw new ComponentException(ActionStatus.GENERAL_ERROR); } } }