| // 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 org.apache.cloudstack.engine.cloud.entity.api.db.dao; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import javax.annotation.PostConstruct; |
| import javax.inject.Inject; |
| |
| import org.apache.log4j.Logger; |
| import org.springframework.stereotype.Component; |
| |
| import org.apache.cloudstack.engine.cloud.entity.api.db.VMEntityVO; |
| import org.apache.cloudstack.engine.cloud.entity.api.db.VMReservationVO; |
| |
| import com.cloud.network.dao.NetworkDao; |
| import com.cloud.network.dao.NetworkVO; |
| import com.cloud.utils.db.DB; |
| import com.cloud.utils.db.GenericDaoBase; |
| import com.cloud.utils.db.TransactionLegacy; |
| |
| @Component |
| public class VMEntityDaoImpl extends GenericDaoBase<VMEntityVO, Long> implements VMEntityDao { |
| |
| public static final Logger s_logger = Logger.getLogger(VMEntityDaoImpl.class); |
| |
| @Inject |
| protected VMReservationDao _vmReservationDao; |
| |
| @Inject |
| protected VMComputeTagDao _vmComputeTagDao; |
| |
| @Inject |
| protected VMRootDiskTagDao _vmRootDiskTagsDao; |
| |
| @Inject |
| protected VMNetworkMapDao _vmNetworkMapDao; |
| |
| @Inject |
| protected NetworkDao _networkDao; |
| |
| public VMEntityDaoImpl() { |
| } |
| |
| @PostConstruct |
| protected void init() { |
| |
| } |
| |
| @Override |
| public void loadVmReservation(VMEntityVO vm) { |
| VMReservationVO vmReservation = _vmReservationDao.findByVmId(vm.getId()); |
| vm.setVmReservation(vmReservation); |
| } |
| |
| @Override |
| @DB |
| public VMEntityVO persist(VMEntityVO vm) { |
| TransactionLegacy txn = TransactionLegacy.currentTxn(); |
| txn.start(); |
| |
| VMEntityVO dbVO = super.persist(vm); |
| |
| saveVmNetworks(vm); |
| loadVmNetworks(dbVO); |
| saveVmReservation(vm); |
| loadVmReservation(dbVO); |
| saveComputeTags(vm.getId(), vm.getComputeTags()); |
| loadComputeTags(dbVO); |
| saveRootDiskTags(vm.getId(), vm.getRootDiskTags()); |
| loadRootDiskTags(dbVO); |
| |
| txn.commit(); |
| |
| return dbVO; |
| } |
| |
| private void loadVmNetworks(VMEntityVO dbVO) { |
| List<Long> networksIds = _vmNetworkMapDao.getNetworks(dbVO.getId()); |
| |
| List<String> networks = new ArrayList<String>(); |
| for (Long networkId : networksIds) { |
| NetworkVO network = _networkDao.findById(networkId); |
| if (network != null) { |
| networks.add(network.getUuid()); |
| } |
| } |
| |
| dbVO.setNetworkIds(networks); |
| |
| } |
| |
| private void saveVmNetworks(VMEntityVO vm) { |
| List<Long> networks = new ArrayList<Long>(); |
| |
| List<String> networksIds = vm.getNetworkIds(); |
| |
| if (networksIds == null || (networksIds != null && networksIds.isEmpty())) { |
| return; |
| } |
| |
| for (String uuid : networksIds) { |
| NetworkVO network = _networkDao.findByUuid(uuid); |
| if (network != null) { |
| networks.add(network.getId()); |
| } |
| } |
| _vmNetworkMapDao.persist(vm.getId(), networks); |
| |
| } |
| |
| private void loadRootDiskTags(VMEntityVO dbVO) { |
| List<String> rootDiskTags = _vmRootDiskTagsDao.getRootDiskTags(dbVO.getId()); |
| dbVO.setRootDiskTags(rootDiskTags); |
| |
| } |
| |
| private void loadComputeTags(VMEntityVO dbVO) { |
| List<String> computeTags = _vmComputeTagDao.getComputeTags(dbVO.getId()); |
| dbVO.setComputeTags(computeTags); |
| |
| } |
| |
| private void saveRootDiskTags(long vmId, List<String> rootDiskTags) { |
| if (rootDiskTags == null || (rootDiskTags != null && rootDiskTags.isEmpty())) { |
| return; |
| } |
| _vmRootDiskTagsDao.persist(vmId, rootDiskTags); |
| |
| } |
| |
| private void saveComputeTags(long vmId, List<String> computeTags) { |
| if (computeTags == null || (computeTags != null && computeTags.isEmpty())) { |
| return; |
| } |
| |
| _vmComputeTagDao.persist(vmId, computeTags); |
| } |
| |
| private void saveVmReservation(VMEntityVO vm) { |
| if (vm.getVmReservation() != null) { |
| _vmReservationDao.persist(vm.getVmReservation()); |
| } |
| } |
| |
| } |