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;
     }