// 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.simulator.dao; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Formatter; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.simulator.MockConfigurationVO; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.TransactionLegacy; @Component public class MockConfigurationDaoImpl extends GenericDaoBase<MockConfigurationVO, Long> implements MockConfigurationDao { final static Logger s_logger = Logger.getLogger(MockConfigurationDaoImpl.class); private final SearchBuilder<MockConfigurationVO> _searchByDcIdName; private final SearchBuilder<MockConfigurationVO> _searchByDcIDPodIdName; private final SearchBuilder<MockConfigurationVO> _searchByDcIDPodIdClusterIdName; private final SearchBuilder<MockConfigurationVO> _searchByDcIDPodIdClusterIdHostIdName; private final SearchBuilder<MockConfigurationVO> _searchByGlobalName; public MockConfigurationDaoImpl() { _searchByGlobalName = createSearchBuilder(); _searchByGlobalName.and("dcId", _searchByGlobalName.entity().getDataCenterId(), SearchCriteria.Op.NULL); _searchByGlobalName.and("podId", _searchByGlobalName.entity().getPodId(), SearchCriteria.Op.NULL); _searchByGlobalName.and("clusterId", _searchByGlobalName.entity().getClusterId(), SearchCriteria.Op.NULL); _searchByGlobalName.and("hostId", _searchByGlobalName.entity().getHostId(), SearchCriteria.Op.NULL); _searchByGlobalName.and("name", _searchByGlobalName.entity().getName(), SearchCriteria.Op.EQ); _searchByGlobalName.done(); _searchByDcIdName = createSearchBuilder(); _searchByDcIdName.and("dcId", _searchByDcIdName.entity().getDataCenterId(), SearchCriteria.Op.EQ); _searchByDcIdName.and("podId", _searchByDcIdName.entity().getPodId(), SearchCriteria.Op.NULL); _searchByDcIdName.and("clusterId", _searchByDcIdName.entity().getClusterId(), SearchCriteria.Op.NULL); _searchByDcIdName.and("hostId", _searchByDcIdName.entity().getHostId(), SearchCriteria.Op.NULL); _searchByDcIdName.and("name", _searchByDcIdName.entity().getName(), SearchCriteria.Op.EQ); _searchByDcIdName.done(); _searchByDcIDPodIdName = createSearchBuilder(); _searchByDcIDPodIdName.and("dcId", _searchByDcIDPodIdName.entity().getDataCenterId(), SearchCriteria.Op.EQ); _searchByDcIDPodIdName.and("podId", _searchByDcIDPodIdName.entity().getPodId(), SearchCriteria.Op.EQ); _searchByDcIDPodIdName.and("clusterId", _searchByDcIDPodIdName.entity().getClusterId(), SearchCriteria.Op.NULL); _searchByDcIDPodIdName.and("hostId", _searchByDcIDPodIdName.entity().getHostId(), SearchCriteria.Op.NULL); _searchByDcIDPodIdName.and("name", _searchByDcIDPodIdName.entity().getName(), SearchCriteria.Op.EQ); _searchByDcIDPodIdName.done(); _searchByDcIDPodIdClusterIdName = createSearchBuilder(); _searchByDcIDPodIdClusterIdName.and("dcId", _searchByDcIDPodIdClusterIdName.entity().getDataCenterId(), SearchCriteria.Op.EQ); _searchByDcIDPodIdClusterIdName.and("podId", _searchByDcIDPodIdClusterIdName.entity().getPodId(), SearchCriteria.Op.EQ); _searchByDcIDPodIdClusterIdName.and("clusterId", _searchByDcIDPodIdClusterIdName.entity().getClusterId(), SearchCriteria.Op.EQ); _searchByDcIDPodIdClusterIdName.and("hostId", _searchByDcIDPodIdClusterIdName.entity().getHostId(), SearchCriteria.Op.NULL); _searchByDcIDPodIdClusterIdName.and("name", _searchByDcIDPodIdClusterIdName.entity().getName(), SearchCriteria.Op.EQ); _searchByDcIDPodIdClusterIdName.done(); _searchByDcIDPodIdClusterIdHostIdName = createSearchBuilder(); _searchByDcIDPodIdClusterIdHostIdName.and("dcId", _searchByDcIDPodIdClusterIdHostIdName.entity().getDataCenterId(), SearchCriteria.Op.EQ); _searchByDcIDPodIdClusterIdHostIdName.and("podId", _searchByDcIDPodIdClusterIdHostIdName.entity().getPodId(), SearchCriteria.Op.EQ); _searchByDcIDPodIdClusterIdHostIdName.and("clusterId", _searchByDcIDPodIdClusterIdHostIdName.entity().getClusterId(), SearchCriteria.Op.EQ); _searchByDcIDPodIdClusterIdHostIdName.and("hostId", _searchByDcIDPodIdClusterIdHostIdName.entity().getHostId(), SearchCriteria.Op.EQ); _searchByDcIDPodIdClusterIdHostIdName.and("name", _searchByDcIDPodIdClusterIdHostIdName.entity().getName(), SearchCriteria.Op.EQ); _searchByDcIDPodIdClusterIdHostIdName.done(); } @Override public MockConfigurationVO findByCommand(Long dcId, Long podId, Long clusterId, Long hostId, String name) { if (dcId == null) { SearchCriteria<MockConfigurationVO> sc = _searchByGlobalName.create(); sc.setParameters("name", name); return findOneBy(sc); } else if (podId == null) { SearchCriteria<MockConfigurationVO> sc = _searchByDcIdName.create(); sc.setParameters("name", name); sc.setParameters("dcId", dcId); return findOneBy(sc); } else if (clusterId == null) { SearchCriteria<MockConfigurationVO> sc = _searchByDcIDPodIdName.create(); sc.setParameters("name", name); sc.setParameters("dcId", dcId); sc.setParameters("podId", podId); return findOneBy(sc); } else if (hostId == null) { SearchCriteria<MockConfigurationVO> sc = _searchByDcIDPodIdClusterIdName.create(); sc.setParameters("name", name); sc.setParameters("dcId", dcId); sc.setParameters("podId", podId); sc.setParameters("clusterId", clusterId); return findOneBy(sc); } else { SearchCriteria<MockConfigurationVO> sc = _searchByDcIDPodIdClusterIdHostIdName.create(); sc.setParameters("name", name); sc.setParameters("dcId", dcId); sc.setParameters("podId", podId); sc.setParameters("clusterId", clusterId); sc.setParameters("hostId", hostId); return findOneBy(sc); } } @Override public MockConfigurationVO findByNameBottomUP(Long dcId, Long podId, Long clusterId, Long hostId, String name) { TransactionLegacy txn = TransactionLegacy.currentTxn(); StringBuilder search = new StringBuilder(); Formatter formatter = new Formatter(search); formatter.format("select * from mockconfiguration where (name='%s') and ((data_center_id = %d and pod_id = %d and cluster_id = %d and host_id = %d)", name, dcId, podId, clusterId, hostId); formatter.format(" or (data_center_id = %d and pod_id = %d and cluster_id = %d and host_id is null)", dcId, podId, clusterId); formatter.format(" or (data_center_id = %d and pod_id = %d and cluster_id is null and host_id is null)", dcId, podId); formatter.format(" or (data_center_id = %d and pod_id is null and cluster_id is null and host_id is null)", dcId); formatter.format(" or (data_center_id is null and pod_id is null and cluster_id is null and host_id is null))"); formatter.format(" and removed is NULL ORDER BY id ASC LIMIT 1 for update"); formatter.close(); String sql = search.toString(); try ( PreparedStatement pstmt = txn.prepareAutoCloseStatement(sql); ResultSet rs = pstmt.executeQuery();) { if (rs.next()) { return toEntityBean(rs, false); } } catch (Exception e) { s_logger.info("[ignored]" + "error while executing dynamically build search: " + e.getLocalizedMessage()); } return null; } }