| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you 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 com.cloud.upgrade; |
| |
| import java.util.List; |
| |
| import javax.inject.Inject; |
| |
| import org.apache.cloudstack.framework.config.dao.ConfigurationDao; |
| import org.apache.cloudstack.framework.config.dao.ConfigurationDaoImpl; |
| import org.apache.cloudstack.framework.config.dao.ConfigurationGroupDao; |
| import org.apache.cloudstack.framework.config.dao.ConfigurationGroupDaoImpl; |
| import org.apache.cloudstack.framework.config.dao.ConfigurationSubGroupDao; |
| import org.apache.cloudstack.framework.config.dao.ConfigurationSubGroupDaoImpl; |
| import org.apache.cloudstack.framework.config.impl.ConfigurationSubGroupVO; |
| import org.apache.cloudstack.framework.config.impl.ConfigurationVO; |
| import org.apache.commons.collections.CollectionUtils; |
| import org.apache.commons.lang3.StringUtils; |
| import org.apache.log4j.Logger; |
| |
| import com.cloud.utils.Pair; |
| |
| public class ConfigurationGroupsAggregator { |
| |
| static final Logger LOG = Logger.getLogger(ConfigurationGroupsAggregator.class); |
| |
| @Inject |
| ConfigurationDao configDao; |
| @Inject |
| ConfigurationGroupDao configGroupDao; |
| @Inject |
| ConfigurationSubGroupDao configSubGroupDao; |
| |
| public ConfigurationGroupsAggregator() { |
| configDao = new ConfigurationDaoImpl(); |
| configGroupDao = new ConfigurationGroupDaoImpl(); |
| configSubGroupDao = new ConfigurationSubGroupDaoImpl(); |
| } |
| |
| public void updateConfigurationGroups() { |
| LOG.debug("Updating configuration groups"); |
| List<ConfigurationVO> configs = configDao.listAllIncludingRemoved(); |
| if (CollectionUtils.isEmpty(configs)) { |
| return; |
| } |
| |
| for (final ConfigurationVO config : configs) { |
| String configName = config.getName(); |
| if (StringUtils.isBlank(configName)) { |
| continue; |
| } |
| |
| try { |
| Pair<Long, Long> configGroupAndSubGroup = getConfigurationGroupAndSubGroupByName(configName); |
| if (configGroupAndSubGroup.first() != 1 && configGroupAndSubGroup.second() != 1) { |
| config.setGroupId(configGroupAndSubGroup.first()); |
| config.setSubGroupId(configGroupAndSubGroup.second()); |
| configDao.persist(config); |
| } |
| } catch (Exception e) { |
| LOG.error("Failed to update group for configuration " + configName + " due to " + e.getMessage(), e); |
| } |
| } |
| LOG.debug("Successfully updated configuration groups."); |
| } |
| |
| private Pair<Long, Long> getConfigurationGroupAndSubGroupByName(String configName) { |
| Long subGroupId = 1L; |
| Long groupId = 1L; |
| if (StringUtils.isNotBlank(configName)) { |
| // Get words from the dot notation in the configuration |
| String[] nameWords = configName.split("\\."); |
| if (nameWords.length > 0) { |
| for (int index = 0; index < nameWords.length; index++) { |
| ConfigurationSubGroupVO configSubGroup = configSubGroupDao.findByName(nameWords[index]); |
| |
| if (configSubGroup == null) { |
| configSubGroup = configSubGroupDao.findByKeyword(nameWords[index]); |
| } |
| |
| if (configSubGroup != null) { |
| subGroupId = configSubGroup.getId(); |
| groupId = configSubGroup.getGroupId(); |
| break; |
| } |
| } |
| } |
| } |
| |
| return new Pair<>(groupId, subGroupId); |
| } |
| } |