// 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.lb.dao; import java.util.List; import org.springframework.stereotype.Component; import org.apache.cloudstack.lb.ApplicationLoadBalancerRuleVO; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.State; import com.cloud.network.rules.LoadBalancerContainer.Scheme; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Func; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.net.Ip; @Component public class ApplicationLoadBalancerRuleDaoImpl extends GenericDaoBase<ApplicationLoadBalancerRuleVO, Long> implements ApplicationLoadBalancerRuleDao { protected final SearchBuilder<ApplicationLoadBalancerRuleVO> AllFieldsSearch; final GenericSearchBuilder<ApplicationLoadBalancerRuleVO, String> listIps; final GenericSearchBuilder<ApplicationLoadBalancerRuleVO, Long> CountBy; protected final SearchBuilder<ApplicationLoadBalancerRuleVO> NotRevokedSearch; final GenericSearchBuilder<ApplicationLoadBalancerRuleVO, Long> CountNotRevoked; final GenericSearchBuilder<ApplicationLoadBalancerRuleVO, Long> CountActive; protected ApplicationLoadBalancerRuleDaoImpl() { AllFieldsSearch = createSearchBuilder(); AllFieldsSearch.and("sourceIp", AllFieldsSearch.entity().getSourceIp(), SearchCriteria.Op.EQ); AllFieldsSearch.and("sourceIpNetworkId", AllFieldsSearch.entity().getSourceIpNetworkId(), SearchCriteria.Op.EQ); AllFieldsSearch.and("networkId", AllFieldsSearch.entity().getNetworkId(), SearchCriteria.Op.EQ); AllFieldsSearch.and("scheme", AllFieldsSearch.entity().getScheme(), SearchCriteria.Op.EQ); AllFieldsSearch.done(); listIps = createSearchBuilder(String.class); listIps.select(null, Func.DISTINCT, listIps.entity().getSourceIp()); listIps.and("sourceIpNetworkId", listIps.entity().getSourceIpNetworkId(), Op.EQ); listIps.and("scheme", listIps.entity().getScheme(), Op.EQ); listIps.done(); CountBy = createSearchBuilder(Long.class); CountBy.select(null, Func.COUNT, CountBy.entity().getId()); CountBy.and("sourceIp", CountBy.entity().getSourceIp(), Op.EQ); CountBy.and("sourceIpNetworkId", CountBy.entity().getSourceIpNetworkId(), Op.EQ); CountBy.done(); NotRevokedSearch = createSearchBuilder(); NotRevokedSearch.and("sourceIp", NotRevokedSearch.entity().getSourceIp(), SearchCriteria.Op.EQ); NotRevokedSearch.and("sourceIpNetworkId", NotRevokedSearch.entity().getSourceIpNetworkId(), SearchCriteria.Op.EQ); NotRevokedSearch.and("state", NotRevokedSearch.entity().getState(), SearchCriteria.Op.NEQ); NotRevokedSearch.done(); CountNotRevoked = createSearchBuilder(Long.class); CountNotRevoked.select(null, Func.COUNT, CountNotRevoked.entity().getId()); CountNotRevoked.and("sourceIp", CountNotRevoked.entity().getSourceIp(), Op.EQ); CountNotRevoked.and("state", CountNotRevoked.entity().getState(), Op.NEQ); CountNotRevoked.and("sourceIpNetworkId", CountNotRevoked.entity().getSourceIpNetworkId(), Op.EQ); CountNotRevoked.done(); CountActive = createSearchBuilder(Long.class); CountActive.select(null, Func.COUNT, CountActive.entity().getId()); CountActive.and("sourceIp", CountActive.entity().getSourceIp(), Op.EQ); CountActive.and("state", CountActive.entity().getState(), Op.EQ); CountActive.and("sourceIpNetworkId", CountActive.entity().getSourceIpNetworkId(), Op.EQ); CountActive.done(); } @Override public List<ApplicationLoadBalancerRuleVO> listBySrcIpSrcNtwkId(Ip sourceIp, long sourceNetworkId) { SearchCriteria<ApplicationLoadBalancerRuleVO> sc = AllFieldsSearch.create(); sc.setParameters("sourceIp", sourceIp); sc.setParameters("sourceIpNetworkId", sourceNetworkId); return listBy(sc); } @Override public List<String> listLbIpsBySourceIpNetworkId(long sourceIpNetworkId) { SearchCriteria<String> sc = listIps.create(); sc.setParameters("sourceIpNetworkId", sourceIpNetworkId); return customSearch(sc, null); } @Override public long countBySourceIp(Ip sourceIp, long sourceIpNetworkId) { SearchCriteria<Long> sc = CountBy.create(); sc.setParameters("sourceIp", sourceIp); sc.setParameters("sourceIpNetworkId", sourceIpNetworkId); List<Long> results = customSearch(sc, null); return results.get(0); } @Override public List<ApplicationLoadBalancerRuleVO> listBySourceIpAndNotRevoked(Ip sourceIp, long sourceNetworkId) { SearchCriteria<ApplicationLoadBalancerRuleVO> sc = NotRevokedSearch.create(); sc.setParameters("sourceIp", sourceIp); sc.setParameters("sourceIpNetworkId", sourceNetworkId); sc.setParameters("state", FirewallRule.State.Revoke); return listBy(sc); } @Override public List<String> listLbIpsBySourceIpNetworkIdAndScheme(long sourceIpNetworkId, Scheme scheme) { SearchCriteria<String> sc = listIps.create(); sc.setParameters("sourceIpNetworkId", sourceIpNetworkId); sc.setParameters("scheme", scheme); return customSearch(sc, null); } @Override public long countBySourceIpAndNotRevoked(Ip sourceIp, long sourceIpNetworkId) { SearchCriteria<Long> sc = CountNotRevoked.create(); sc.setParameters("sourceIp", sourceIp); sc.setParameters("sourceIpNetworkId", sourceIpNetworkId); sc.setParameters("state", State.Revoke); List<Long> results = customSearch(sc, null); return results.get(0); } @Override public long countActiveBySourceIp(Ip sourceIp, long sourceIpNetworkId) { SearchCriteria<Long> sc = CountActive.create(); sc.setParameters("sourceIp", sourceIp); sc.setParameters("sourceIpNetworkId", sourceIpNetworkId); sc.setParameters("state", State.Active); List<Long> results = customSearch(sc, null); return results.get(0); } }