You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ya...@apache.org on 2012/07/28 01:30:37 UTC
[6/6] git commit: S2S VPN: Add list function for normal users
S2S VPN: Add list function for normal users
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/786d5995
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/786d5995
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/786d5995
Branch: refs/heads/vpc
Commit: 786d5995dfba1c5bd6b29d0ba7ba83b6f9c401f8
Parents: 736c4c1
Author: Sheng Yang <sh...@citrix.com>
Authored: Fri Jul 27 15:59:43 2012 -0700
Committer: Sheng Yang <sh...@citrix.com>
Committed: Fri Jul 27 16:27:36 2012 -0700
----------------------------------------------------------------------
.../cloud/api/commands/DeleteVpnConnectionCmd.java | 1 +
.../api/commands/DeleteVpnCustomerGatewayCmd.java | 1 +
.../cloud/network/Site2SiteVpnConnectionVO.java | 3 +
.../cloud/network/vpn/Site2SiteVpnManagerImpl.java | 131 +++++++++++++--
4 files changed, 119 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/786d5995/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java b/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java
index a7bd29d..afcd562 100644
--- a/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java
+++ b/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java
@@ -28,6 +28,7 @@ import com.cloud.api.ServerApiException;
import com.cloud.api.response.SuccessResponse;
import com.cloud.event.EventTypes;
import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Site2SiteVpnConnection;
import com.cloud.user.Account;
import com.cloud.user.UserContext;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/786d5995/api/src/com/cloud/api/commands/DeleteVpnCustomerGatewayCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/DeleteVpnCustomerGatewayCmd.java b/api/src/com/cloud/api/commands/DeleteVpnCustomerGatewayCmd.java
index 1486b29..0a3d766 100644
--- a/api/src/com/cloud/api/commands/DeleteVpnCustomerGatewayCmd.java
+++ b/api/src/com/cloud/api/commands/DeleteVpnCustomerGatewayCmd.java
@@ -27,6 +27,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
import com.cloud.api.response.SuccessResponse;
import com.cloud.event.EventTypes;
+import com.cloud.network.Site2SiteCustomerGateway;
import com.cloud.user.Account;
@Implementation(description="Delete site to site vpn customer gateway", responseObject=SuccessResponse.class)
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/786d5995/server/src/com/cloud/network/Site2SiteVpnConnectionVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/Site2SiteVpnConnectionVO.java b/server/src/com/cloud/network/Site2SiteVpnConnectionVO.java
index f38e2d8..8081ac8 100644
--- a/server/src/com/cloud/network/Site2SiteVpnConnectionVO.java
+++ b/server/src/com/cloud/network/Site2SiteVpnConnectionVO.java
@@ -5,6 +5,8 @@ import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@@ -30,6 +32,7 @@ public class Site2SiteVpnConnectionVO implements Site2SiteVpnConnection {
private long customerGatewayId;
@Column(name="state")
+ @Enumerated(value=EnumType.STRING)
private State state;
@Column(name="domain_id")
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/786d5995/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
index af2e375..0abedef 100644
--- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
@@ -9,6 +9,7 @@ import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
+import com.cloud.api.BaseListProjectAndAccountResourcesCmd;
import com.cloud.api.commands.CreateVpnConnectionCmd;
import com.cloud.api.commands.CreateVpnCustomerGatewayCmd;
import com.cloud.api.commands.CreateVpnGatewayCmd;
@@ -44,12 +45,19 @@ import com.cloud.network.element.Site2SiteVpnServiceProvider;
import com.cloud.network.vpc.VpcManager;
import com.cloud.network.vpc.VpcVO;
import com.cloud.network.vpc.Dao.VpcDao;
+import com.cloud.projects.Project.ListProjectResourcesCriteria;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
import com.cloud.user.UserContext;
import com.cloud.user.dao.AccountDao;
+import com.cloud.utils.Ternary;
import com.cloud.utils.component.Inject;
import com.cloud.utils.component.Manager;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.GenericDao;
+import com.cloud.utils.db.JoinBuilder;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils;
@@ -421,12 +429,38 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager {
@Override
public List<Site2SiteCustomerGateway> searchForCustomerGateways(ListVpnCustomerGatewaysCmd cmd) {
Long id = cmd.getId();
- List<Site2SiteCustomerGateway> results = new ArrayList<Site2SiteCustomerGateway>();
+ Long domainId = cmd.getDomainId();
+ boolean isRecursive = cmd.isRecursive();
+ String accountName = cmd.getAccountName();
+ boolean listAll = cmd.listAll();
+ long startIndex = cmd.getStartIndex();
+ long pageSizeVal = cmd.getPageSizeVal();
+
+ Account caller = UserContext.current().getCaller();
+ List<Long> permittedAccounts = new ArrayList<Long>();
+
+ Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean,
+ ListProjectResourcesCriteria>(domainId, isRecursive, null);
+ _accountMgr.buildACLSearchParameters(caller, id, accountName, null, permittedAccounts, domainIdRecursiveListProject, listAll, false);
+ domainId = domainIdRecursiveListProject.first();
+ isRecursive = domainIdRecursiveListProject.second();
+ ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
+ Filter searchFilter = new Filter(Site2SiteCustomerGatewayVO.class, "id", false, startIndex, pageSizeVal);
+
+ SearchBuilder<Site2SiteCustomerGatewayVO> sb = _customerGatewayDao.createSearchBuilder();
+ _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+
+ sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
+
+ SearchCriteria<Site2SiteCustomerGatewayVO> sc = sb.create();
+ _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+
if (id != null) {
- results.add(_customerGatewayDao.findById(cmd.getId()));
- } else {
- results.addAll(_customerGatewayDao.listAll());
+ sc.addAnd("id", SearchCriteria.Op.EQ, id);
}
+
+ List<Site2SiteCustomerGateway> results = new ArrayList<Site2SiteCustomerGateway>();
+ results.addAll(_customerGatewayDao.search(sc, searchFilter));
return results;
}
@@ -435,14 +469,43 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager {
Long id = cmd.getId();
Long vpcId = cmd.getVpcId();
- List<Site2SiteVpnGateway> results = new ArrayList<Site2SiteVpnGateway>();
- if (id != null) {
- results.add(_vpnGatewayDao.findById(cmd.getId()));
- } else if (vpcId != null) {
- results.add(_vpnGatewayDao.findByVpcId(vpcId));
- } else { //id == null && vpcId == null
- results.addAll(_vpnGatewayDao.listAll());
+ Long domainId = cmd.getDomainId();
+ boolean isRecursive = cmd.isRecursive();
+ String accountName = cmd.getAccountName();
+ boolean listAll = cmd.listAll();
+ long startIndex = cmd.getStartIndex();
+ long pageSizeVal = cmd.getPageSizeVal();
+
+ Account caller = UserContext.current().getCaller();
+ List<Long> permittedAccounts = new ArrayList<Long>();
+
+ Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean,
+ ListProjectResourcesCriteria>(domainId, isRecursive, null);
+ _accountMgr.buildACLSearchParameters(caller, id, accountName, null, permittedAccounts, domainIdRecursiveListProject, listAll, false);
+ domainId = domainIdRecursiveListProject.first();
+ isRecursive = domainIdRecursiveListProject.second();
+ ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
+ Filter searchFilter = new Filter(Site2SiteVpnGatewayVO.class, "id", false, startIndex, pageSizeVal);
+
+ SearchBuilder<Site2SiteVpnGatewayVO> sb = _vpnGatewayDao.createSearchBuilder();
+ _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+
+ sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
+ sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ);
+
+ SearchCriteria<Site2SiteVpnGatewayVO> sc = sb.create();
+ _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+
+ if (id != null) {
+ sc.addAnd("id", SearchCriteria.Op.EQ, id);
+ }
+
+ if (vpcId != null) {
+ sc.addAnd("vpcId", SearchCriteria.Op.EQ, vpcId);
}
+
+ List<Site2SiteVpnGateway> results = new ArrayList<Site2SiteVpnGateway>();
+ results.addAll(_vpnGatewayDao.search(sc, searchFilter));
return results;
}
@@ -450,15 +513,49 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager {
public List<Site2SiteVpnConnection> searchForVpnConnections(ListVpnConnectionsCmd cmd) {
Long id = cmd.getId();
Long vpcId = cmd.getVpcId();
+
+ Long domainId = cmd.getDomainId();
+ boolean isRecursive = cmd.isRecursive();
+ String accountName = cmd.getAccountName();
+ boolean listAll = cmd.listAll();
+ long startIndex = cmd.getStartIndex();
+ long pageSizeVal = cmd.getPageSizeVal();
- List<Site2SiteVpnConnection> results = new ArrayList<Site2SiteVpnConnection>();
+ Account caller = UserContext.current().getCaller();
+ List<Long> permittedAccounts = new ArrayList<Long>();
+
+ Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean,
+ ListProjectResourcesCriteria>(domainId, isRecursive, null);
+ _accountMgr.buildACLSearchParameters(caller, id, accountName, null, permittedAccounts, domainIdRecursiveListProject, listAll, false);
+ domainId = domainIdRecursiveListProject.first();
+ isRecursive = domainIdRecursiveListProject.second();
+ ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
+ Filter searchFilter = new Filter(Site2SiteVpnConnectionVO.class, "id", false, startIndex, pageSizeVal);
+
+ SearchBuilder<Site2SiteVpnConnectionVO> sb = _vpnConnectionDao.createSearchBuilder();
+ _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+
+ sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
+
+ if (vpcId != null) {
+ SearchBuilder<Site2SiteVpnGatewayVO> gwSearch = _vpnGatewayDao.createSearchBuilder();
+ gwSearch.and("vpcId", gwSearch.entity().getVpcId(), SearchCriteria.Op.EQ);
+ sb.join("gwSearch", gwSearch, sb.entity().getVpnGatewayId(), gwSearch.entity().getId(), JoinBuilder.JoinType.INNER);
+ }
+
+ SearchCriteria<Site2SiteVpnConnectionVO> sc = sb.create();
+ _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+
if (id != null) {
- results.add(_vpnConnectionDao.findById(cmd.getId()));
- } else if (vpcId != null) {
- results.addAll(_vpnConnectionDao.listByVpcId(vpcId));
- } else { //id == null && vpcId == null
- results.addAll(_vpnConnectionDao.listAll());
+ sc.addAnd("id", SearchCriteria.Op.EQ, id);
+ }
+
+ if (vpcId != null) {
+ sc.setJoinParameters("gwSearch", "vpcId", vpcId);
}
+
+ List<Site2SiteVpnConnection> results = new ArrayList<Site2SiteVpnConnection>();
+ results.addAll(_vpnConnectionDao.search(sc, searchFilter));
return results;
}