/** * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. * * This software is licensed under the GNU General Public License v3 or later. * * It is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ package com.cloud.network.security.dao; import java.util.List; import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; import com.cloud.network.security.IngressRuleVO; import com.cloud.network.security.SecurityGroupVO; import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @Local(value={IngressRuleDao.class}) public class IngressRuleDaoImpl extends GenericDaoBase implements IngressRuleDao { @Inject SecurityGroupDao _securityGroupDao; protected SearchBuilder securityGroupIdSearch; protected SearchBuilder allowedSecurityGroupIdSearch; protected SearchBuilder protoPortsAndCidrSearch; protected SearchBuilder protoPortsAndSecurityGroupNameSearch; protected SearchBuilder protoPortsAndSecurityGroupIdSearch; protected IngressRuleDaoImpl() { securityGroupIdSearch = createSearchBuilder(); securityGroupIdSearch.and("securityGroupId", securityGroupIdSearch.entity().getSecurityGroupId(), SearchCriteria.Op.EQ); securityGroupIdSearch.done(); allowedSecurityGroupIdSearch = createSearchBuilder(); allowedSecurityGroupIdSearch.and("allowedNetworkId", allowedSecurityGroupIdSearch.entity().getAllowedNetworkId(), SearchCriteria.Op.EQ); allowedSecurityGroupIdSearch.done(); protoPortsAndCidrSearch = createSearchBuilder(); protoPortsAndCidrSearch.and("securityGroupId", protoPortsAndCidrSearch.entity().getSecurityGroupId(), SearchCriteria.Op.EQ); protoPortsAndCidrSearch.and("proto", protoPortsAndCidrSearch.entity().getProtocol(), SearchCriteria.Op.EQ); protoPortsAndCidrSearch.and("startPort", protoPortsAndCidrSearch.entity().getStartPort(), SearchCriteria.Op.EQ); protoPortsAndCidrSearch.and("endPort", protoPortsAndCidrSearch.entity().getEndPort(), SearchCriteria.Op.EQ); protoPortsAndCidrSearch.and("cidr", protoPortsAndCidrSearch.entity().getAllowedSourceIpCidr(), SearchCriteria.Op.EQ); protoPortsAndCidrSearch.done(); protoPortsAndSecurityGroupIdSearch = createSearchBuilder(); protoPortsAndSecurityGroupIdSearch.and("securityGroupId", protoPortsAndSecurityGroupIdSearch.entity().getSecurityGroupId(), SearchCriteria.Op.EQ); protoPortsAndSecurityGroupIdSearch.and("proto", protoPortsAndSecurityGroupIdSearch.entity().getProtocol(), SearchCriteria.Op.EQ); protoPortsAndSecurityGroupIdSearch.and("startPort", protoPortsAndSecurityGroupIdSearch.entity().getStartPort(), SearchCriteria.Op.EQ); protoPortsAndSecurityGroupIdSearch.and("endPort", protoPortsAndSecurityGroupIdSearch.entity().getEndPort(), SearchCriteria.Op.EQ); protoPortsAndSecurityGroupIdSearch.and("allowedNetworkId", protoPortsAndSecurityGroupIdSearch.entity().getAllowedNetworkId(), SearchCriteria.Op.EQ); } public List listBySecurityGroupId(long securityGroupId) { SearchCriteria sc = securityGroupIdSearch.create(); sc.setParameters("securityGroupId", securityGroupId); return listBy(sc); } public int deleteBySecurityGroup(long securityGroupId) { SearchCriteria sc = securityGroupIdSearch.create(); sc.setParameters("securityGroupId", securityGroupId); return expunge(sc); } @Override public List listByAllowedSecurityGroupId(long securityGroupId) { SearchCriteria sc = allowedSecurityGroupIdSearch.create(); sc.setParameters("allowedNetworkId", securityGroupId); return listBy(sc); } @Override public IngressRuleVO findByProtoPortsAndCidr(long securityGroupId, String proto, int startPort, int endPort, String cidr) { SearchCriteria sc = protoPortsAndCidrSearch.create(); sc.setParameters("securityGroupId", securityGroupId); sc.setParameters("proto", proto); sc.setParameters("startPort", startPort); sc.setParameters("endPort", endPort); sc.setParameters("cidr", cidr); return findOneIncludingRemovedBy(sc); } @Override public IngressRuleVO findByProtoPortsAndGroup(String proto, int startPort, int endPort, String securityGroup) { SearchCriteria sc = protoPortsAndSecurityGroupNameSearch.create(); sc.setParameters("proto", proto); sc.setParameters("startPort", startPort); sc.setParameters("endPort", endPort); sc.setJoinParameters("groupName", "groupName", securityGroup); return findOneIncludingRemovedBy(sc); } @Override public boolean configure(String name, Map params) throws ConfigurationException { protoPortsAndSecurityGroupNameSearch = createSearchBuilder(); protoPortsAndSecurityGroupNameSearch.and("proto", protoPortsAndSecurityGroupNameSearch.entity().getProtocol(), SearchCriteria.Op.EQ); protoPortsAndSecurityGroupNameSearch.and("startPort", protoPortsAndSecurityGroupNameSearch.entity().getStartPort(), SearchCriteria.Op.EQ); protoPortsAndSecurityGroupNameSearch.and("endPort", protoPortsAndSecurityGroupNameSearch.entity().getEndPort(), SearchCriteria.Op.EQ); SearchBuilder ngSb = _securityGroupDao.createSearchBuilder(); ngSb.and("groupName", ngSb.entity().getName(), SearchCriteria.Op.EQ); protoPortsAndSecurityGroupNameSearch.join("groupName", ngSb, protoPortsAndSecurityGroupNameSearch.entity().getAllowedNetworkId(), ngSb.entity().getId(), JoinBuilder.JoinType.INNER); protoPortsAndSecurityGroupNameSearch.done(); return super.configure(name, params); } @Override public int deleteByPortProtoAndGroup(long securityGroupId, String protocol, int startPort, int endPort, Long allowedGroupId) { SearchCriteria sc = protoPortsAndSecurityGroupIdSearch.create(); sc.setParameters("securityGroupId", securityGroupId); sc.setParameters("proto", protocol); sc.setParameters("startPort", startPort); sc.setParameters("endPort", endPort); sc.setParameters("allowedNetworkId", allowedGroupId); return expunge(sc); } @Override public int deleteByPortProtoAndCidr(long securityGroupId, String protocol, int startPort, int endPort, String cidr) { SearchCriteria sc = protoPortsAndCidrSearch.create(); sc.setParameters("securityGroupId", securityGroupId); sc.setParameters("proto", protocol); sc.setParameters("startPort", startPort); sc.setParameters("endPort", endPort); sc.setParameters("cidr", cidr); return expunge(sc); } @Override public IngressRuleVO findByProtoPortsAndAllowedGroupId(long securityGroupId, String proto, int startPort, int endPort, Long allowedGroupId) { SearchCriteria sc = protoPortsAndSecurityGroupIdSearch.create(); sc.addAnd("securityGroupId", SearchCriteria.Op.EQ, securityGroupId); sc.setParameters("proto", proto); sc.setParameters("startPort", startPort); sc.setParameters("endPort", endPort); sc.setParameters("allowedNetworkId", allowedGroupId); return findOneIncludingRemovedBy(sc); } }