blob: 7d87ce1540dd5a6c3fd74ea3c01d0f24d82a956f [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 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);
}
}