blob: 34de1bccb82fb96dced8eaec5cb7148187600242 [file] [log] [blame]
// 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);
}
}