CLOUDSTACK-332: intermediate checkin fixing count parameter in listCommands

Fixes the count in commands:

listVolumes
listVirtualMachines
listSnapshots
listRouters
listFirewallRules
listPortForwardingRules
listLoadBalancerRules
listIpForwardingRules
listAccounts
listUsers
listDomains
listDomainChildren
listPublicIpAddresses
listAlerts
listAsyncJobs
listRemoteAccessVpns
listVpnUsers
listTags
listPrivateGateways
listNetworkACLs
listStaticRoutes

Conflicts:

	api/src/com/cloud/api/commands/ListVMsCmd.java
	api/src/com/cloud/api/commands/ListVolumesCmd.java
	api/src/com/cloud/network/lb/LoadBalancingRulesService.java
	server/src/com/cloud/network/firewall/FirewallManagerImpl.java
	server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
	server/src/com/cloud/network/rules/RulesManagerImpl.java
	server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
	server/src/com/cloud/network/vpc/VpcManagerImpl.java
	server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
	server/src/com/cloud/tags/TaggedResourceManagerImpl.java
This commit is contained in:
Alena Prokharchyk 2012-10-12 12:52:28 -07:00
parent 6e60a07566
commit 8f2d9a09e5
59 changed files with 385 additions and 209 deletions

View File

@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.AccountResponse; import com.cloud.api.response.AccountResponse;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.user.Account; import com.cloud.user.Account;
import com.cloud.utils.Pair;
@Implementation(description="Lists accounts and provides detailed account information for listed accounts", responseObject=AccountResponse.class) @Implementation(description="Lists accounts and provides detailed account information for listed accounts", responseObject=AccountResponse.class)
public class ListAccountsCmd extends BaseListDomainResourcesCmd { public class ListAccountsCmd extends BaseListDomainResourcesCmd {
@ -91,15 +92,15 @@ public class ListAccountsCmd extends BaseListDomainResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends Account> accounts = _accountService.searchForAccounts(this); Pair<List<? extends Account>, Integer> accounts = _accountService.searchForAccounts(this);
ListResponse<AccountResponse> response = new ListResponse<AccountResponse>(); ListResponse<AccountResponse> response = new ListResponse<AccountResponse>();
List<AccountResponse> accountResponses = new ArrayList<AccountResponse>(); List<AccountResponse> accountResponses = new ArrayList<AccountResponse>();
for (Account account : accounts) { for (Account account : accounts.first()) {
AccountResponse acctResponse = _responseGenerator.createAccountResponse(account); AccountResponse acctResponse = _responseGenerator.createAccountResponse(account);
acctResponse.setObjectName("account"); acctResponse.setObjectName("account");
accountResponses.add(acctResponse); accountResponses.add(acctResponse);
} }
response.setResponses(accountResponses); response.setResponses(accountResponses, accounts.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);

View File

@ -29,6 +29,7 @@ import com.cloud.api.Implementation;
import com.cloud.api.Parameter; import com.cloud.api.Parameter;
import com.cloud.api.response.AlertResponse; import com.cloud.api.response.AlertResponse;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.utils.Pair;
@Implementation(description = "Lists all alerts.", responseObject = AlertResponse.class) @Implementation(description = "Lists all alerts.", responseObject = AlertResponse.class)
public class ListAlertsCmd extends BaseListCmd { public class ListAlertsCmd extends BaseListCmd {
@ -71,10 +72,10 @@ public class ListAlertsCmd extends BaseListCmd {
@Override @Override
public void execute() { public void execute() {
List<? extends Alert> result = _mgr.searchForAlerts(this); Pair<List<? extends Alert>, Integer> result = _mgr.searchForAlerts(this);
ListResponse<AlertResponse> response = new ListResponse<AlertResponse>(); ListResponse<AlertResponse> response = new ListResponse<AlertResponse>();
List<AlertResponse> alertResponseList = new ArrayList<AlertResponse>(); List<AlertResponse> alertResponseList = new ArrayList<AlertResponse>();
for (Alert alert : result) { for (Alert alert : result.first()) {
AlertResponse alertResponse = new AlertResponse(); AlertResponse alertResponse = new AlertResponse();
alertResponse.setId(alert.getId()); alertResponse.setId(alert.getId());
alertResponse.setAlertType(alert.getType()); alertResponse.setAlertType(alert.getType());
@ -85,7 +86,7 @@ public class ListAlertsCmd extends BaseListCmd {
alertResponseList.add(alertResponse); alertResponseList.add(alertResponse);
} }
response.setResponses(alertResponseList); response.setResponses(alertResponseList, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -27,6 +27,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.AsyncJobResponse; import com.cloud.api.response.AsyncJobResponse;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJob;
import com.cloud.utils.Pair;
@Implementation(description="Lists all pending asynchronous jobs for the account.", responseObject=AsyncJobResponse.class) @Implementation(description="Lists all pending asynchronous jobs for the account.", responseObject=AsyncJobResponse.class)
public class ListAsyncJobsCmd extends BaseListAccountResourcesCmd { public class ListAsyncJobsCmd extends BaseListAccountResourcesCmd {
@ -58,14 +59,14 @@ public class ListAsyncJobsCmd extends BaseListAccountResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends AsyncJob> result = _mgr.searchForAsyncJobs(this); Pair<List<? extends AsyncJob>, Integer> result = _mgr.searchForAsyncJobs(this);
ListResponse<AsyncJobResponse> response = new ListResponse<AsyncJobResponse>(); ListResponse<AsyncJobResponse> response = new ListResponse<AsyncJobResponse>();
List<AsyncJobResponse> jobResponses = new ArrayList<AsyncJobResponse>(); List<AsyncJobResponse> jobResponses = new ArrayList<AsyncJobResponse>();
for (AsyncJob job : result) { for (AsyncJob job : result.first()) {
jobResponses.add(_responseGenerator.createAsyncJobResponse(job)); jobResponses.add(_responseGenerator.createAsyncJobResponse(job));
} }
response.setResponses(jobResponses); response.setResponses(jobResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.DomainResponse; import com.cloud.api.response.DomainResponse;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.domain.Domain; import com.cloud.domain.Domain;
import com.cloud.utils.Pair;
@Implementation(description="Lists all children domains belonging to a specified domain", responseObject=DomainResponse.class) @Implementation(description="Lists all children domains belonging to a specified domain", responseObject=DomainResponse.class)
public class ListDomainChildrenCmd extends BaseListCmd { public class ListDomainChildrenCmd extends BaseListCmd {
@ -84,16 +85,16 @@ public class ListDomainChildrenCmd extends BaseListCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends Domain> result = _domainService.searchForDomainChildren(this); Pair<List<? extends Domain>, Integer> result = _domainService.searchForDomainChildren(this);
ListResponse<DomainResponse> response = new ListResponse<DomainResponse>(); ListResponse<DomainResponse> response = new ListResponse<DomainResponse>();
List<DomainResponse> domainResponses = new ArrayList<DomainResponse>(); List<DomainResponse> domainResponses = new ArrayList<DomainResponse>();
for (Domain domain : result) { for (Domain domain : result.first()) {
DomainResponse domainResponse = _responseGenerator.createDomainResponse(domain); DomainResponse domainResponse = _responseGenerator.createDomainResponse(domain);
domainResponse.setObjectName("domain"); domainResponse.setObjectName("domain");
domainResponses.add(domainResponse); domainResponses.add(domainResponse);
} }
response.setResponses(domainResponses); response.setResponses(domainResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.DomainResponse; import com.cloud.api.response.DomainResponse;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.domain.Domain; import com.cloud.domain.Domain;
import com.cloud.utils.Pair;
@Implementation(description="Lists domains and provides detailed information for listed domains", responseObject=DomainResponse.class) @Implementation(description="Lists domains and provides detailed information for listed domains", responseObject=DomainResponse.class)
public class ListDomainsCmd extends BaseListCmd { public class ListDomainsCmd extends BaseListCmd {
@ -84,16 +85,16 @@ public class ListDomainsCmd extends BaseListCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends Domain> result = _domainService.searchForDomains(this); Pair<List<? extends Domain>, Integer> result = _domainService.searchForDomains(this);
ListResponse<DomainResponse> response = new ListResponse<DomainResponse>(); ListResponse<DomainResponse> response = new ListResponse<DomainResponse>();
List<DomainResponse> domainResponses = new ArrayList<DomainResponse>(); List<DomainResponse> domainResponses = new ArrayList<DomainResponse>();
for (Domain domain : result) { for (Domain domain : result.first()) {
DomainResponse domainResponse = _responseGenerator.createDomainResponse(domain); DomainResponse domainResponse = _responseGenerator.createDomainResponse(domain);
domainResponse.setObjectName("domain"); domainResponse.setObjectName("domain");
domainResponses.add(domainResponse); domainResponses.add(domainResponse);
} }
response.setResponses(domainResponses); response.setResponses(domainResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.FirewallResponse; import com.cloud.api.response.FirewallResponse;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule;
import com.cloud.utils.Pair;
@Implementation(description="Lists all firewall rules for an IP address.", responseObject=FirewallResponse.class) @Implementation(description="Lists all firewall rules for an IP address.", responseObject=FirewallResponse.class)
public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd { public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd {
@ -69,16 +70,16 @@ public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends FirewallRule> result = _firewallService.listFirewallRules(this); Pair<List<? extends FirewallRule>, Integer> result = _firewallService.listFirewallRules(this);
ListResponse<FirewallResponse> response = new ListResponse<FirewallResponse>(); ListResponse<FirewallResponse> response = new ListResponse<FirewallResponse>();
List<FirewallResponse> fwResponses = new ArrayList<FirewallResponse>(); List<FirewallResponse> fwResponses = new ArrayList<FirewallResponse>();
for (FirewallRule fwRule : result) { for (FirewallRule fwRule : result.first()) {
FirewallResponse ruleData = _responseGenerator.createFirewallResponse(fwRule); FirewallResponse ruleData = _responseGenerator.createFirewallResponse(fwRule);
ruleData.setObjectName("firewallrule"); ruleData.setObjectName("firewallrule");
fwResponses.add(ruleData); fwResponses.add(ruleData);
} }
response.setResponses(fwResponses); response.setResponses(fwResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -22,7 +22,6 @@ import java.util.List;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import com.cloud.api.ApiConstants; import com.cloud.api.ApiConstants;
import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.BaseListProjectAndAccountResourcesCmd; import com.cloud.api.BaseListProjectAndAccountResourcesCmd;
import com.cloud.api.IdentityMapper; import com.cloud.api.IdentityMapper;
import com.cloud.api.Implementation; import com.cloud.api.Implementation;
@ -32,6 +31,7 @@ import com.cloud.api.response.IpForwardingRuleResponse;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.StaticNatRule; import com.cloud.network.rules.StaticNatRule;
import com.cloud.utils.Pair;
@Implementation(description="List the ip forwarding rules", responseObject=FirewallRuleResponse.class) @Implementation(description="List the ip forwarding rules", responseObject=FirewallRuleResponse.class)
public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResourcesCmd { public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResourcesCmd {
@ -82,17 +82,18 @@ public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResources
@Override @Override
public void execute(){ public void execute(){
List<? extends FirewallRule> result = _rulesService.searchStaticNatRules(publicIpAddressId, id, vmId, this.getStartIndex(), this.getPageSizeVal(), this.getAccountName(), this.getDomainId(), this.getProjectId(), this.isRecursive(), this.listAll()); Pair<List<? extends FirewallRule>, Integer> result = _rulesService.searchStaticNatRules(publicIpAddressId, id, vmId,
this.getStartIndex(), this.getPageSizeVal(), this.getAccountName(), this.getDomainId(), this.getProjectId(), this.isRecursive(), this.listAll());
ListResponse<IpForwardingRuleResponse> response = new ListResponse<IpForwardingRuleResponse>(); ListResponse<IpForwardingRuleResponse> response = new ListResponse<IpForwardingRuleResponse>();
List<IpForwardingRuleResponse> ipForwardingResponses = new ArrayList<IpForwardingRuleResponse>(); List<IpForwardingRuleResponse> ipForwardingResponses = new ArrayList<IpForwardingRuleResponse>();
for (FirewallRule rule : result) { for (FirewallRule rule : result.first()) {
StaticNatRule staticNatRule = _rulesService.buildStaticNatRule(rule, false); StaticNatRule staticNatRule = _rulesService.buildStaticNatRule(rule, false);
IpForwardingRuleResponse resp = _responseGenerator.createIpForwardingRuleResponse(staticNatRule); IpForwardingRuleResponse resp = _responseGenerator.createIpForwardingRuleResponse(staticNatRule);
if (resp != null) { if (resp != null) {
ipForwardingResponses.add(resp); ipForwardingResponses.add(resp);
} }
} }
response.setResponses(ipForwardingResponses); response.setResponses(ipForwardingResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.api.response.LoadBalancerResponse; import com.cloud.api.response.LoadBalancerResponse;
import com.cloud.network.rules.LoadBalancer; import com.cloud.network.rules.LoadBalancer;
import com.cloud.utils.Pair;
@Implementation(description = "Lists load balancer rules.", responseObject = LoadBalancerResponse.class) @Implementation(description = "Lists load balancer rules.", responseObject = LoadBalancerResponse.class)
public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd { public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd {
@ -94,17 +95,17 @@ public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd {
@Override @Override
public void execute() { public void execute() {
List<? extends LoadBalancer> loadBalancers = _lbService.searchForLoadBalancers(this); Pair<List<? extends LoadBalancer>, Integer> loadBalancers = _lbService.searchForLoadBalancers(this);
ListResponse<LoadBalancerResponse> response = new ListResponse<LoadBalancerResponse>(); ListResponse<LoadBalancerResponse> response = new ListResponse<LoadBalancerResponse>();
List<LoadBalancerResponse> lbResponses = new ArrayList<LoadBalancerResponse>(); List<LoadBalancerResponse> lbResponses = new ArrayList<LoadBalancerResponse>();
if (loadBalancers != null) { if (loadBalancers != null) {
for (LoadBalancer loadBalancer : loadBalancers) { for (LoadBalancer loadBalancer : loadBalancers.first()) {
LoadBalancerResponse lbResponse = _responseGenerator.createLoadBalancerResponse(loadBalancer); LoadBalancerResponse lbResponse = _responseGenerator.createLoadBalancerResponse(loadBalancer);
lbResponse.setObjectName("loadbalancerrule"); lbResponse.setObjectName("loadbalancerrule");
lbResponses.add(lbResponse); lbResponses.add(lbResponse);
} }
} }
response.setResponses(lbResponses); response.setResponses(lbResponses, loadBalancers.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -31,6 +31,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.api.response.NetworkACLResponse; import com.cloud.api.response.NetworkACLResponse;
import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule;
import com.cloud.utils.Pair;
@Implementation(description="Lists all network ACLs", responseObject=NetworkACLResponse.class) @Implementation(description="Lists all network ACLs", responseObject=NetworkACLResponse.class)
public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd { public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd {
@ -79,15 +80,15 @@ public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends FirewallRule> result = _networkACLService.listNetworkACLs(this); Pair<List<? extends FirewallRule>,Integer> result = _networkACLService.listNetworkACLs(this);
ListResponse<NetworkACLResponse> response = new ListResponse<NetworkACLResponse>(); ListResponse<NetworkACLResponse> response = new ListResponse<NetworkACLResponse>();
List<NetworkACLResponse> aclResponses = new ArrayList<NetworkACLResponse>(); List<NetworkACLResponse> aclResponses = new ArrayList<NetworkACLResponse>();
for (FirewallRule acl : result) { for (FirewallRule acl : result.first()) {
NetworkACLResponse ruleData = _responseGenerator.createNetworkACLResponse(acl); NetworkACLResponse ruleData = _responseGenerator.createNetworkACLResponse(acl);
aclResponses.add(ruleData); aclResponses.add(ruleData);
} }
response.setResponses(aclResponses); response.setResponses(aclResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.FirewallRuleResponse; import com.cloud.api.response.FirewallRuleResponse;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.PortForwardingRule;
import com.cloud.utils.Pair;
@Implementation(description="Lists all port forwarding rules for an IP address.", responseObject=FirewallRuleResponse.class) @Implementation(description="Lists all port forwarding rules for an IP address.", responseObject=FirewallRuleResponse.class)
public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd { public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd {
@ -71,16 +72,16 @@ public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends PortForwardingRule> result = _rulesService.listPortForwardingRules(this); Pair<List<? extends PortForwardingRule>, Integer> result = _rulesService.listPortForwardingRules(this);
ListResponse<FirewallRuleResponse> response = new ListResponse<FirewallRuleResponse>(); ListResponse<FirewallRuleResponse> response = new ListResponse<FirewallRuleResponse>();
List<FirewallRuleResponse> fwResponses = new ArrayList<FirewallRuleResponse>(); List<FirewallRuleResponse> fwResponses = new ArrayList<FirewallRuleResponse>();
for (PortForwardingRule fwRule : result) { for (PortForwardingRule fwRule : result.first()) {
FirewallRuleResponse ruleData = _responseGenerator.createPortForwardingRuleResponse(fwRule); FirewallRuleResponse ruleData = _responseGenerator.createPortForwardingRuleResponse(fwRule);
ruleData.setObjectName("portforwardingrule"); ruleData.setObjectName("portforwardingrule");
fwResponses.add(ruleData); fwResponses.add(ruleData);
} }
response.setResponses(fwResponses); response.setResponses(fwResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.api.response.PrivateGatewayResponse; import com.cloud.api.response.PrivateGatewayResponse;
import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.PrivateGateway;
import com.cloud.utils.Pair;
@Implementation(description="List private gateways", responseObject=PrivateGatewayResponse.class) @Implementation(description="List private gateways", responseObject=PrivateGatewayResponse.class)
public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCmd{ public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCmd{
@ -91,14 +92,14 @@ public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCm
@Override @Override
public void execute() { public void execute() {
List<PrivateGateway> gateways = _vpcService.listPrivateGateway(this); Pair<List<PrivateGateway>, Integer> gateways = _vpcService.listPrivateGateway(this);
ListResponse<PrivateGatewayResponse> response = new ListResponse<PrivateGatewayResponse>(); ListResponse<PrivateGatewayResponse> response = new ListResponse<PrivateGatewayResponse>();
List<PrivateGatewayResponse> projectResponses = new ArrayList<PrivateGatewayResponse>(); List<PrivateGatewayResponse> projectResponses = new ArrayList<PrivateGatewayResponse>();
for (PrivateGateway gateway : gateways) { for (PrivateGateway gateway : gateways.first()) {
PrivateGatewayResponse gatewayResponse = _responseGenerator.createPrivateGatewayResponse(gateway); PrivateGatewayResponse gatewayResponse = _responseGenerator.createPrivateGatewayResponse(gateway);
projectResponses.add(gatewayResponse); projectResponses.add(gatewayResponse);
} }
response.setResponses(projectResponses); response.setResponses(projectResponses, gateways.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);

View File

@ -30,6 +30,7 @@ import com.cloud.api.response.IPAddressResponse;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJob;
import com.cloud.network.IpAddress; import com.cloud.network.IpAddress;
import com.cloud.utils.Pair;
@Implementation(description="Lists all public ip addresses", responseObject=IPAddressResponse.class) @Implementation(description="Lists all public ip addresses", responseObject=IPAddressResponse.class)
@ -141,16 +142,16 @@ public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends IpAddress> result = _mgr.searchForIPAddresses(this); Pair<List<? extends IpAddress>, Integer> result = _mgr.searchForIPAddresses(this);
ListResponse<IPAddressResponse> response = new ListResponse<IPAddressResponse>(); ListResponse<IPAddressResponse> response = new ListResponse<IPAddressResponse>();
List<IPAddressResponse> ipAddrResponses = new ArrayList<IPAddressResponse>(); List<IPAddressResponse> ipAddrResponses = new ArrayList<IPAddressResponse>();
for (IpAddress ipAddress : result) { for (IpAddress ipAddress : result.first()) {
IPAddressResponse ipResponse = _responseGenerator.createIPAddressResponse(ipAddress); IPAddressResponse ipResponse = _responseGenerator.createIPAddressResponse(ipAddress);
ipResponse.setObjectName("publicipaddress"); ipResponse.setObjectName("publicipaddress");
ipAddrResponses.add(ipResponse); ipAddrResponses.add(ipResponse);
} }
response.setResponses(ipAddrResponses); response.setResponses(ipAddrResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.api.response.RemoteAccessVpnResponse; import com.cloud.api.response.RemoteAccessVpnResponse;
import com.cloud.network.RemoteAccessVpn; import com.cloud.network.RemoteAccessVpn;
import com.cloud.utils.Pair;
@Implementation(description="Lists remote access vpns", responseObject=RemoteAccessVpnResponse.class) @Implementation(description="Lists remote access vpns", responseObject=RemoteAccessVpnResponse.class)
public class ListRemoteAccessVpnsCmd extends BaseListProjectAndAccountResourcesCmd { public class ListRemoteAccessVpnsCmd extends BaseListProjectAndAccountResourcesCmd {
@ -64,15 +65,15 @@ public class ListRemoteAccessVpnsCmd extends BaseListProjectAndAccountResourcesC
@Override @Override
public void execute(){ public void execute(){
List<? extends RemoteAccessVpn> vpns = _ravService.searchForRemoteAccessVpns(this); Pair<List<? extends RemoteAccessVpn>, Integer> vpns = _ravService.searchForRemoteAccessVpns(this);
ListResponse<RemoteAccessVpnResponse> response = new ListResponse<RemoteAccessVpnResponse>(); ListResponse<RemoteAccessVpnResponse> response = new ListResponse<RemoteAccessVpnResponse>();
List<RemoteAccessVpnResponse> vpnResponses = new ArrayList<RemoteAccessVpnResponse>(); List<RemoteAccessVpnResponse> vpnResponses = new ArrayList<RemoteAccessVpnResponse>();
if (vpns != null && !vpns.isEmpty()) { if (vpns.first() != null && !vpns.first().isEmpty()) {
for (RemoteAccessVpn vpn : vpns) { for (RemoteAccessVpn vpn : vpns.first()) {
vpnResponses.add(_responseGenerator.createRemoteAccessVpnResponse(vpn)); vpnResponses.add(_responseGenerator.createRemoteAccessVpnResponse(vpn));
} }
} }
response.setResponses(vpnResponses); response.setResponses(vpnResponses, vpns.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -30,6 +30,7 @@ import com.cloud.api.response.DomainRouterResponse;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJob;
import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VirtualRouter;
import com.cloud.utils.Pair;
@Implementation(description="List routers.", responseObject=DomainRouterResponse.class) @Implementation(description="List routers.", responseObject=DomainRouterResponse.class)
public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd {
@ -129,16 +130,16 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends VirtualRouter> result = _mgr.searchForRouters(this); Pair<List<? extends VirtualRouter>, Integer> result = _mgr.searchForRouters(this);
ListResponse<DomainRouterResponse> response = new ListResponse<DomainRouterResponse>(); ListResponse<DomainRouterResponse> response = new ListResponse<DomainRouterResponse>();
List<DomainRouterResponse> routerResponses = new ArrayList<DomainRouterResponse>(); List<DomainRouterResponse> routerResponses = new ArrayList<DomainRouterResponse>();
for (VirtualRouter router : result) { for (VirtualRouter router : result.first()) {
DomainRouterResponse routerResponse = _responseGenerator.createDomainRouterResponse(router); DomainRouterResponse routerResponse = _responseGenerator.createDomainRouterResponse(router);
routerResponse.setObjectName("router"); routerResponse.setObjectName("router");
routerResponses.add(routerResponse); routerResponses.add(routerResponse);
} }
response.setResponses(routerResponses); response.setResponses(routerResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -30,6 +30,7 @@ import com.cloud.api.response.ListResponse;
import com.cloud.api.response.SnapshotResponse; import com.cloud.api.response.SnapshotResponse;
import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJob;
import com.cloud.storage.Snapshot; import com.cloud.storage.Snapshot;
import com.cloud.utils.Pair;
@Implementation(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class) @Implementation(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class)
@ -98,15 +99,15 @@ public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends Snapshot> result = _snapshotService.listSnapshots(this); Pair<List<? extends Snapshot>, Integer> result = _snapshotService.listSnapshots(this);
ListResponse<SnapshotResponse> response = new ListResponse<SnapshotResponse>(); ListResponse<SnapshotResponse> response = new ListResponse<SnapshotResponse>();
List<SnapshotResponse> snapshotResponses = new ArrayList<SnapshotResponse>(); List<SnapshotResponse> snapshotResponses = new ArrayList<SnapshotResponse>();
for (Snapshot snapshot : result) { for (Snapshot snapshot : result.first()) {
SnapshotResponse snapshotResponse = _responseGenerator.createSnapshotResponse(snapshot); SnapshotResponse snapshotResponse = _responseGenerator.createSnapshotResponse(snapshot);
snapshotResponse.setObjectName("snapshot"); snapshotResponse.setObjectName("snapshot");
snapshotResponses.add(snapshotResponse); snapshotResponses.add(snapshotResponse);
} }
response.setResponses(snapshotResponses); response.setResponses(snapshotResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);

View File

@ -26,6 +26,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.api.response.StaticRouteResponse; import com.cloud.api.response.StaticRouteResponse;
import com.cloud.network.vpc.StaticRoute; import com.cloud.network.vpc.StaticRoute;
import com.cloud.utils.Pair;
@Implementation(description="Lists all static routes", responseObject=StaticRouteResponse.class) @Implementation(description="Lists all static routes", responseObject=StaticRouteResponse.class)
public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd { public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd {
@ -68,15 +69,15 @@ public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends StaticRoute> result = _vpcService.listStaticRoutes(this); Pair<List<? extends StaticRoute>, Integer> result = _vpcService.listStaticRoutes(this);
ListResponse<StaticRouteResponse> response = new ListResponse<StaticRouteResponse>(); ListResponse<StaticRouteResponse> response = new ListResponse<StaticRouteResponse>();
List<StaticRouteResponse> routeResponses = new ArrayList<StaticRouteResponse>(); List<StaticRouteResponse> routeResponses = new ArrayList<StaticRouteResponse>();
for (StaticRoute route : result) { for (StaticRoute route : result.first()) {
StaticRouteResponse ruleData = _responseGenerator.createStaticRouteResponse(route); StaticRouteResponse ruleData = _responseGenerator.createStaticRouteResponse(route);
routeResponses.add(ruleData); routeResponses.add(ruleData);
} }
response.setResponses(routeResponses); response.setResponses(routeResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -27,6 +27,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.api.response.ResourceTagResponse; import com.cloud.api.response.ResourceTagResponse;
import com.cloud.server.ResourceTag; import com.cloud.server.ResourceTag;
import com.cloud.utils.Pair;
@Implementation(description = "List resource tag(s)", responseObject = ResourceTagResponse.class, since = "Burbank") @Implementation(description = "List resource tag(s)", responseObject = ResourceTagResponse.class, since = "Burbank")
public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{ public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{
@ -55,14 +56,14 @@ public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{
@Override @Override
public void execute() { public void execute() {
List<? extends ResourceTag> tags = _taggedResourceService.listTags(this); Pair<List<? extends ResourceTag>, Integer> tags = _taggedResourceService.listTags(this);
ListResponse<ResourceTagResponse> response = new ListResponse<ResourceTagResponse>(); ListResponse<ResourceTagResponse> response = new ListResponse<ResourceTagResponse>();
List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>();
for (ResourceTag tag : tags) { for (ResourceTag tag : tags.first()) {
ResourceTagResponse tagResponse = _responseGenerator.createResourceTagResponse(tag, false); ResourceTagResponse tagResponse = _responseGenerator.createResourceTagResponse(tag, false);
tagResponses.add(tagResponse); tagResponses.add(tagResponse);
} }
response.setResponses(tagResponses); response.setResponses(tagResponses, tags.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);

View File

@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.api.response.UserResponse; import com.cloud.api.response.UserResponse;
import com.cloud.user.UserAccount; import com.cloud.user.UserAccount;
import com.cloud.utils.Pair;
@Implementation(description="Lists user accounts", responseObject=UserResponse.class) @Implementation(description="Lists user accounts", responseObject=UserResponse.class)
public class ListUsersCmd extends BaseListAccountResourcesCmd { public class ListUsersCmd extends BaseListAccountResourcesCmd {
@ -85,14 +86,14 @@ public class ListUsersCmd extends BaseListAccountResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends UserAccount> result = _accountService.searchForUsers(this); Pair<List<? extends UserAccount>, Integer> result = _accountService.searchForUsers(this);
ListResponse<UserResponse> response = new ListResponse<UserResponse>(); ListResponse<UserResponse> response = new ListResponse<UserResponse>();
List<UserResponse> userResponses = new ArrayList<UserResponse>(); List<UserResponse> userResponses = new ArrayList<UserResponse>();
for (UserAccount user : result) { for (UserAccount user : result.first()) {
UserResponse userResponse = _responseGenerator.createUserResponse(user); UserResponse userResponse = _responseGenerator.createUserResponse(user);
userResponses.add(userResponse); userResponses.add(userResponse);
} }
response.setResponses(userResponses); response.setResponses(userResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -33,6 +33,8 @@ import com.cloud.api.response.UserVmResponse;
import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJob;
import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.InvalidParameterValueException;
import com.cloud.uservm.UserVm; import com.cloud.uservm.UserVm;
import com.cloud.utils.Pair;
@Implementation(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class) @Implementation(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class)
public class ListVMsCmd extends BaseListTaggedResourcesCmd { public class ListVMsCmd extends BaseListTaggedResourcesCmd {
@ -197,17 +199,17 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends UserVm> result = _userVmService.searchForUserVMs(this); Pair<List<? extends UserVm>, Integer> result = _userVmService.searchForUserVMs(this);
ListResponse<UserVmResponse> response = new ListResponse<UserVmResponse>(); ListResponse<UserVmResponse> response = new ListResponse<UserVmResponse>();
EnumSet<VMDetails> details = getDetails(); EnumSet<VMDetails> details = getDetails();
List<UserVmResponse> vmResponses; List<UserVmResponse> vmResponses;
if (details.contains(VMDetails.all)){ // for all use optimized version if (details.contains(VMDetails.all)){ // for all use optimized version
vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", result.toArray(new UserVm[result.size()])); vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", result.first().toArray(new UserVm[result.first().size()]));
} }
else { else {
vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", getDetails(), result.toArray(new UserVm[result.size()])); vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", getDetails(), result.first().toArray(new UserVm[result.first().size()]));
} }
response.setResponses(vmResponses); response.setResponses(vmResponses, result.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -30,6 +30,7 @@ import com.cloud.api.response.ListResponse;
import com.cloud.api.response.VolumeResponse; import com.cloud.api.response.VolumeResponse;
import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJob;
import com.cloud.storage.Volume; import com.cloud.storage.Volume;
import com.cloud.utils.Pair;
@Implementation(description="Lists all volumes.", responseObject=VolumeResponse.class) @Implementation(description="Lists all volumes.", responseObject=VolumeResponse.class)
@ -117,17 +118,17 @@ public class ListVolumesCmd extends BaseListTaggedResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends Volume> volumes = _storageService.searchForVolumes(this); Pair<List<? extends Volume>, Integer> volumes = _storageService.searchForVolumes(this);
ListResponse<VolumeResponse> response = new ListResponse<VolumeResponse>(); ListResponse<VolumeResponse> response = new ListResponse<VolumeResponse>();
List<VolumeResponse> volResponses = new ArrayList<VolumeResponse>(); List<VolumeResponse> volResponses = new ArrayList<VolumeResponse>();
for (Volume volume : volumes) { for (Volume volume : volumes.first()) {
VolumeResponse volResponse = _responseGenerator.createVolumeResponse(volume); VolumeResponse volResponse = _responseGenerator.createVolumeResponse(volume);
volResponse.setObjectName("volume"); volResponse.setObjectName("volume");
volResponses.add(volResponse); volResponses.add(volResponse);
} }
response.setResponses(volResponses); response.setResponses(volResponses, volumes.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse; import com.cloud.api.response.ListResponse;
import com.cloud.api.response.VpnUsersResponse; import com.cloud.api.response.VpnUsersResponse;
import com.cloud.network.VpnUser; import com.cloud.network.VpnUser;
import com.cloud.utils.Pair;
@Implementation(description="Lists vpn users", responseObject=VpnUsersResponse.class) @Implementation(description="Lists vpn users", responseObject=VpnUsersResponse.class)
public class ListVpnUsersCmd extends BaseListProjectAndAccountResourcesCmd { public class ListVpnUsersCmd extends BaseListProjectAndAccountResourcesCmd {
@ -69,15 +70,15 @@ public class ListVpnUsersCmd extends BaseListProjectAndAccountResourcesCmd {
@Override @Override
public void execute(){ public void execute(){
List<? extends VpnUser> vpnUsers = _ravService.searchForVpnUsers(this); Pair<List<? extends VpnUser>, Integer> vpnUsers = _ravService.searchForVpnUsers(this);
ListResponse<VpnUsersResponse> response = new ListResponse<VpnUsersResponse>(); ListResponse<VpnUsersResponse> response = new ListResponse<VpnUsersResponse>();
List<VpnUsersResponse> vpnResponses = new ArrayList<VpnUsersResponse>(); List<VpnUsersResponse> vpnResponses = new ArrayList<VpnUsersResponse>();
for (VpnUser vpnUser : vpnUsers) { for (VpnUser vpnUser : vpnUsers.first()) {
vpnResponses.add(_responseGenerator.createVpnUserResponse(vpnUser)); vpnResponses.add(_responseGenerator.createVpnUserResponse(vpnUser));
} }
response.setResponses(vpnResponses); response.setResponses(vpnResponses, vpnUsers.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());
this.setResponseObject(response); this.setResponseObject(response);
} }

View File

@ -22,6 +22,7 @@ import com.cloud.api.ResponseObject;
public class ListResponse<T extends ResponseObject> extends BaseResponse { public class ListResponse<T extends ResponseObject> extends BaseResponse {
List<T> responses; List<T> responses;
private transient Integer count;
public List<T> getResponses() { public List<T> getResponses() {
return responses; return responses;
@ -30,12 +31,22 @@ public class ListResponse<T extends ResponseObject> extends BaseResponse {
public void setResponses(List<T> responses) { public void setResponses(List<T> responses) {
this.responses = responses; this.responses = responses;
} }
public void setResponses(List<T> responses, Integer count) {
this.responses = responses;
this.count = count;
}
public Integer getCount() { public Integer getCount() {
if (count != null) {
return count;
}
if (responses != null) { if (responses != null) {
return responses.size(); return responses.size();
} else {
return null;
} }
return null;
} }
} }

View File

@ -16,6 +16,7 @@
// under the License. // under the License.
package com.cloud.network.firewall; package com.cloud.network.firewall;
import java.util.List; import java.util.List;
import com.cloud.api.commands.ListFirewallRulesCmd; import com.cloud.api.commands.ListFirewallRulesCmd;
@ -23,11 +24,12 @@ import com.cloud.exception.NetworkRuleConflictException;
import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule;
import com.cloud.user.Account; import com.cloud.user.Account;
import com.cloud.utils.Pair;
public interface FirewallService { public interface FirewallService {
FirewallRule createFirewallRule(FirewallRule rule) throws NetworkRuleConflictException; FirewallRule createFirewallRule(FirewallRule rule) throws NetworkRuleConflictException;
List<? extends FirewallRule> listFirewallRules(ListFirewallRulesCmd cmd); Pair<List<? extends FirewallRule>, Integer> listFirewallRules(ListFirewallRulesCmd cmd);
/** /**
* Revokes a firewall rule * Revokes a firewall rule

View File

@ -16,6 +16,7 @@
// under the License. // under the License.
package com.cloud.network.firewall; package com.cloud.network.firewall;
import java.util.List; import java.util.List;
import com.cloud.api.commands.ListNetworkACLsCmd; import com.cloud.api.commands.ListNetworkACLsCmd;
@ -23,6 +24,7 @@ import com.cloud.exception.NetworkRuleConflictException;
import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule;
import com.cloud.user.Account; import com.cloud.user.Account;
import com.cloud.utils.Pair;
public interface NetworkACLService { public interface NetworkACLService {
FirewallRule getNetworkACL(long ruleId); FirewallRule getNetworkACL(long ruleId);
@ -43,6 +45,6 @@ public interface NetworkACLService {
* @param listNetworkACLsCmd * @param listNetworkACLsCmd
* @return * @return
*/ */
List<? extends FirewallRule> listNetworkACLs(ListNetworkACLsCmd cmd); Pair<List<? extends FirewallRule>, Integer> listNetworkACLs(ListNetworkACLsCmd cmd);
} }

View File

@ -30,6 +30,8 @@ import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.rules.LoadBalancer; import com.cloud.network.rules.LoadBalancer;
import com.cloud.network.rules.StickinessPolicy; import com.cloud.network.rules.StickinessPolicy;
import com.cloud.uservm.UserVm; import com.cloud.uservm.UserVm;
import com.cloud.utils.Pair;
public interface LoadBalancingRulesService { public interface LoadBalancingRulesService {
/** /**
@ -90,7 +92,7 @@ public interface LoadBalancingRulesService {
* by id, name, public ip, and vm instance id * by id, name, public ip, and vm instance id
* @return list of load balancers that match the criteria * @return list of load balancers that match the criteria
*/ */
List<? extends LoadBalancer> searchForLoadBalancers(ListLoadBalancerRulesCmd cmd); Pair<List<? extends LoadBalancer>, Integer> searchForLoadBalancers(ListLoadBalancerRulesCmd cmd);
/** /**
* List stickiness policies based on the given criteria * List stickiness policies based on the given criteria
@ -105,4 +107,4 @@ public interface LoadBalancingRulesService {
LoadBalancer findById(long LoadBalancer); LoadBalancer findById(long LoadBalancer);
} }

View File

@ -23,9 +23,10 @@ import com.cloud.exception.InsufficientAddressCapacityException;
import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.NetworkRuleConflictException;
import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.ResourceUnavailableException;
import com.cloud.user.Account; import com.cloud.user.Account;
import com.cloud.utils.Pair;
public interface RulesService { public interface RulesService {
List<? extends FirewallRule> searchStaticNatRules(Long ipId, Long id, Long vmId, Long start, Long size, String accountName, Long domainId, Long projectId, boolean isRecursive, boolean listAll); Pair<List<? extends FirewallRule>, Integer> searchStaticNatRules(Long ipId, Long id, Long vmId, Long start, Long size, String accountName, Long domainId, Long projectId, boolean isRecursive, boolean listAll);
/** /**
* Creates a port forwarding rule between two ip addresses or between * Creates a port forwarding rule between two ip addresses or between
@ -60,7 +61,7 @@ public interface RulesService {
* the command object holding the criteria for listing port forwarding rules (the ipAddress) * the command object holding the criteria for listing port forwarding rules (the ipAddress)
* @return list of port forwarding rules on the given address, empty list if no rules exist * @return list of port forwarding rules on the given address, empty list if no rules exist
*/ */
public List<? extends PortForwardingRule> listPortForwardingRules(ListPortForwardingRulesCmd cmd); public Pair<List<? extends PortForwardingRule>, Integer> listPortForwardingRules(ListPortForwardingRulesCmd cmd);
boolean applyPortForwardingRules(long ipAdddressId, Account caller) throws ResourceUnavailableException; boolean applyPortForwardingRules(long ipAdddressId, Account caller) throws ResourceUnavailableException;

View File

@ -18,13 +18,13 @@ package com.cloud.network.security;
import java.util.List; import java.util.List;
import com.cloud.api.commands.AuthorizeSecurityGroupIngressCmd;
import com.cloud.api.commands.AuthorizeSecurityGroupEgressCmd; import com.cloud.api.commands.AuthorizeSecurityGroupEgressCmd;
import com.cloud.api.commands.AuthorizeSecurityGroupIngressCmd;
import com.cloud.api.commands.CreateSecurityGroupCmd; import com.cloud.api.commands.CreateSecurityGroupCmd;
import com.cloud.api.commands.DeleteSecurityGroupCmd; import com.cloud.api.commands.DeleteSecurityGroupCmd;
import com.cloud.api.commands.ListSecurityGroupsCmd; import com.cloud.api.commands.ListSecurityGroupsCmd;
import com.cloud.api.commands.RevokeSecurityGroupIngressCmd;
import com.cloud.api.commands.RevokeSecurityGroupEgressCmd; import com.cloud.api.commands.RevokeSecurityGroupEgressCmd;
import com.cloud.api.commands.RevokeSecurityGroupIngressCmd;
import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.PermissionDeniedException;
import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceInUseException;

View File

@ -34,6 +34,7 @@ import com.cloud.network.Network.Provider;
import com.cloud.network.Network.Service; import com.cloud.network.Network.Service;
import com.cloud.user.Account; import com.cloud.user.Account;
import com.cloud.user.User; import com.cloud.user.User;
import com.cloud.utils.Pair;
public interface VpcService { public interface VpcService {
@ -190,7 +191,7 @@ public interface VpcService {
* @param listPrivateGatewaysCmd * @param listPrivateGatewaysCmd
* @return * @return
*/ */
public List<PrivateGateway> listPrivateGateway(ListPrivateGatewaysCmd listPrivateGatewaysCmd); public Pair<List<PrivateGateway>, Integer> listPrivateGateway(ListPrivateGatewaysCmd listPrivateGatewaysCmd);
/** /**
* @param routeId * @param routeId
@ -223,7 +224,7 @@ public interface VpcService {
* @param listStaticRoutesCmd * @param listStaticRoutesCmd
* @return * @return
*/ */
public List<? extends StaticRoute> listStaticRoutes(ListStaticRoutesCmd cmd); public Pair<List<? extends StaticRoute>, Integer> listStaticRoutes(ListStaticRoutesCmd cmd);
/** /**
* @param id * @param id

View File

@ -24,6 +24,7 @@ import com.cloud.exception.NetworkRuleConflictException;
import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.RemoteAccessVpn; import com.cloud.network.RemoteAccessVpn;
import com.cloud.network.VpnUser; import com.cloud.network.VpnUser;
import com.cloud.utils.Pair;
public interface RemoteAccessVpnService { public interface RemoteAccessVpnService {
@ -37,8 +38,8 @@ public interface RemoteAccessVpnService {
List<? extends VpnUser> listVpnUsers(long vpnOwnerId, String userName); List<? extends VpnUser> listVpnUsers(long vpnOwnerId, String userName);
boolean applyVpnUsers(long vpnOwnerId, String userName); boolean applyVpnUsers(long vpnOwnerId, String userName);
List<? extends RemoteAccessVpn> searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd); Pair<List<? extends RemoteAccessVpn>, Integer> searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd);
List<? extends VpnUser> searchForVpnUsers(ListVpnUsersCmd cmd); Pair<List<? extends VpnUser>, Integer> searchForVpnUsers(ListVpnUsersCmd cmd);
List<? extends RemoteAccessVpn> listRemoteAccessVpns(long networkId); List<? extends RemoteAccessVpn> listRemoteAccessVpns(long networkId);

View File

@ -184,7 +184,7 @@ public interface ManagementService {
* @param cmd * @param cmd
* @return List of DomainRouters. * @return List of DomainRouters.
*/ */
List<? extends VirtualRouter> searchForRouters(ListRoutersCmd cmd); Pair<List<? extends VirtualRouter>, Integer> searchForRouters(ListRoutersCmd cmd);
/** /**
* Obtains a list of IP Addresses by the specified search criteria. Can search by: "userId", "dataCenterId", * Obtains a list of IP Addresses by the specified search criteria. Can search by: "userId", "dataCenterId",
@ -194,7 +194,7 @@ public interface ManagementService {
* the command that wraps the search criteria * the command that wraps the search criteria
* @return List of IPAddresses * @return List of IPAddresses
*/ */
List<? extends IpAddress> searchForIPAddresses(ListPublicIpAddressesCmd cmd); Pair<List<? extends IpAddress>, Integer> searchForIPAddresses(ListPublicIpAddressesCmd cmd);
/** /**
* Obtains a list of all guest OS. * Obtains a list of all guest OS.
@ -235,7 +235,7 @@ public interface ManagementService {
* @param c * @param c
* @return List of Alerts * @return List of Alerts
*/ */
List<? extends Alert> searchForAlerts(ListAlertsCmd cmd); Pair<List<? extends Alert>, Integer> searchForAlerts(ListAlertsCmd cmd);
/** /**
* list all the capacity rows in capacity operations table * list all the capacity rows in capacity operations table
@ -363,7 +363,7 @@ public interface ManagementService {
* the command specifying the account and start date parameters * the command specifying the account and start date parameters
* @return the list of async jobs that match the criteria * @return the list of async jobs that match the criteria
*/ */
List<? extends AsyncJob> searchForAsyncJobs(ListAsyncJobsCmd cmd); Pair<List<? extends AsyncJob>, Integer> searchForAsyncJobs(ListAsyncJobsCmd cmd);
/** /**
* Generates a random password that will be used (initially) by newly created and started virtual machines * Generates a random password that will be used (initially) by newly created and started virtual machines

View File

@ -21,6 +21,7 @@ import java.util.Map;
import com.cloud.api.commands.ListTagsCmd; import com.cloud.api.commands.ListTagsCmd;
import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.server.ResourceTag.TaggedResourceType;
import com.cloud.utils.Pair;
public interface TaggedResourceService { public interface TaggedResourceService {
@ -46,7 +47,7 @@ public interface TaggedResourceService {
* @param listTagsCmd * @param listTagsCmd
* @return * @return
*/ */
List<? extends ResourceTag> listTags(ListTagsCmd listTagsCmd); Pair<List<? extends ResourceTag>, Integer> listTags(ListTagsCmd listTagsCmd);
/** /**
* @param resourceIds * @param resourceIds

View File

@ -32,6 +32,7 @@ import com.cloud.exception.PermissionDeniedException;
import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceAllocationException;
import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceInUseException;
import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.ResourceUnavailableException;
import com.cloud.utils.Pair;
public interface StorageService{ public interface StorageService{
/** /**
@ -114,7 +115,7 @@ public interface StorageService{
Volume migrateVolume(Long volumeId, Long storagePoolId) throws ConcurrentOperationException; Volume migrateVolume(Long volumeId, Long storagePoolId) throws ConcurrentOperationException;
List<? extends Volume> searchForVolumes(ListVolumesCmd cmd); Pair<List<? extends Volume>, Integer> searchForVolumes(ListVolumesCmd cmd);
/** /**
* Uploads the volume to secondary storage * Uploads the volume to secondary storage

View File

@ -28,6 +28,7 @@ import com.cloud.exception.ResourceAllocationException;
import com.cloud.storage.Snapshot; import com.cloud.storage.Snapshot;
import com.cloud.storage.Volume; import com.cloud.storage.Volume;
import com.cloud.user.Account; import com.cloud.user.Account;
import com.cloud.utils.Pair;
public interface SnapshotService { public interface SnapshotService {
@ -39,7 +40,7 @@ public interface SnapshotService {
* @return list of snapshots * @return list of snapshots
* @throws PermissionDeniedException * @throws PermissionDeniedException
*/ */
List<? extends Snapshot> listSnapshots(ListSnapshotsCmd cmd); Pair<List<? extends Snapshot>, Integer> listSnapshots(ListSnapshotsCmd cmd);
/** /**
* Delete specified snapshot from the specified. If no other policies are assigned it calls destroy snapshot. This * Delete specified snapshot from the specified. If no other policies are assigned it calls destroy snapshot. This

View File

@ -191,9 +191,9 @@ public interface AccountService {
public String[] createApiKeyAndSecretKey(RegisterCmd cmd); public String[] createApiKeyAndSecretKey(RegisterCmd cmd);
List<? extends Account> searchForAccounts(ListAccountsCmd cmd); Pair<List<? extends Account>, Integer> searchForAccounts(ListAccountsCmd cmd);
List<? extends UserAccount> searchForUsers(ListUsersCmd cmd) Pair<List<? extends UserAccount>, Integer> searchForUsers(ListUsersCmd cmd)
throws PermissionDeniedException; throws PermissionDeniedException;
UserAccount getUserByApiKey(String apiKey); UserAccount getUserByApiKey(String apiKey);

View File

@ -22,6 +22,7 @@ import com.cloud.api.commands.ListDomainChildrenCmd;
import com.cloud.api.commands.ListDomainsCmd; import com.cloud.api.commands.ListDomainsCmd;
import com.cloud.domain.Domain; import com.cloud.domain.Domain;
import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.PermissionDeniedException;
import com.cloud.utils.Pair;
public interface DomainService { public interface DomainService {
@ -39,10 +40,10 @@ public interface DomainService {
boolean deleteDomain(long domainId, Boolean cleanup); boolean deleteDomain(long domainId, Boolean cleanup);
List<? extends Domain> searchForDomains(ListDomainsCmd cmd) Pair<List<? extends Domain>, Integer> searchForDomains(ListDomainsCmd cmd)
throws PermissionDeniedException; throws PermissionDeniedException;
List<? extends Domain> searchForDomainChildren(ListDomainChildrenCmd cmd) Pair<List<? extends Domain>, Integer> searchForDomainChildren(ListDomainChildrenCmd cmd)
throws PermissionDeniedException; throws PermissionDeniedException;
} }

View File

@ -53,6 +53,7 @@ import com.cloud.storage.Volume;
import com.cloud.template.VirtualMachineTemplate; import com.cloud.template.VirtualMachineTemplate;
import com.cloud.user.Account; import com.cloud.user.Account;
import com.cloud.uservm.UserVm; import com.cloud.uservm.UserVm;
import com.cloud.utils.Pair;
import com.cloud.utils.exception.ExecutionException; import com.cloud.utils.exception.ExecutionException;
public interface UserVmService { public interface UserVmService {
@ -378,7 +379,7 @@ public interface UserVmService {
* the API command that wraps the search criteria * the API command that wraps the search criteria
* @return List of UserVMs. * @return List of UserVMs.
*/ */
List<? extends UserVm> searchForUserVMs(ListVMsCmd cmd); Pair<List<? extends UserVm>, Integer> searchForUserVMs(ListVMsCmd cmd);
HypervisorType getHypervisorTypeOfUserVM(long vmid); HypervisorType getHypervisorTypeOfUserVM(long vmid);

View File

@ -322,7 +322,8 @@ public class ApiDBUtils {
} }
public static List<UserVmVO> searchForUserVMs(Criteria c, List<Long> permittedAccounts) { public static List<UserVmVO> searchForUserVMs(Criteria c, List<Long> permittedAccounts) {
return _userVmMgr.searchForUserVMs(c, _accountDao.findById(Account.ACCOUNT_ID_SYSTEM), null, false, permittedAccounts, false, null, null); return _userVmMgr.searchForUserVMs(c, _accountDao.findById(Account.ACCOUNT_ID_SYSTEM),
null, false, permittedAccounts, false, null, null).first();
} }
public static List<? extends StoragePoolVO> searchForStoragePools(Criteria c) { public static List<? extends StoragePoolVO> searchForStoragePools(Criteria c) {

View File

@ -80,9 +80,9 @@ public class ApiResponseSerializer {
jsonStr = unescape(jsonStr); jsonStr = unescape(jsonStr);
if (count != null && count != 0) { if (count != null && count != 0) {
sb.append("{ \"" + ApiConstants.COUNT + "\":" + ((ListResponse) result).getCount() + " ,\"" + responses.get(0).getObjectName() + "\" : [ " + jsonStr); sb.append("{ \"" + ApiConstants.COUNT + "\":" + count + " ,\"" + responses.get(0).getObjectName() + "\" : [ " + jsonStr);
} }
for (int i = 1; i < count; i++) { for (int i = 1; i < ((ListResponse) result).getResponses().size(); i++) {
jsonStr = gson.toJson(responses.get(i)); jsonStr = gson.toJson(responses.get(i));
jsonStr = unescape(jsonStr); jsonStr = unescape(jsonStr);
sb.append(", " + jsonStr); sb.append(", " + jsonStr);

View File

@ -66,6 +66,8 @@ import com.cloud.user.Account;
import com.cloud.user.AccountManager; import com.cloud.user.AccountManager;
import com.cloud.user.DomainManager; import com.cloud.user.DomainManager;
import com.cloud.user.UserContext; import com.cloud.user.UserContext;
import com.cloud.utils.IdentityProxy;
import com.cloud.utils.Pair;
import com.cloud.utils.Ternary; import com.cloud.utils.Ternary;
import com.cloud.utils.component.Inject; import com.cloud.utils.component.Inject;
import com.cloud.utils.component.Manager; import com.cloud.utils.component.Manager;
@ -206,7 +208,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma
} }
@Override @Override
public List<? extends FirewallRule> listFirewallRules(ListFirewallRulesCmd cmd) { public Pair<List<? extends FirewallRule>, Integer> listFirewallRules(ListFirewallRulesCmd cmd) {
Long ipId = cmd.getIpAddressId(); Long ipId = cmd.getIpAddressId();
Long id = cmd.getId(); Long id = cmd.getId();
Map<String, String> tags = cmd.getTags(); Map<String, String> tags = cmd.getTags();
@ -272,7 +274,8 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma
sc.setParameters("purpose", Purpose.Firewall); sc.setParameters("purpose", Purpose.Firewall);
return _firewallDao.search(sc, filter); Pair<List<FirewallRuleVO>, Integer> result = _firewallDao.searchAndCount(sc, filter);
return new Pair<List<? extends FirewallRule>, Integer>(result.first(), result.second());
} }
@Override @Override

View File

@ -95,6 +95,8 @@ import com.cloud.user.DomainService;
import com.cloud.user.UserContext; import com.cloud.user.UserContext;
import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.AccountDao;
import com.cloud.uservm.UserVm; import com.cloud.uservm.UserVm;
import com.cloud.utils.IdentityProxy;
import com.cloud.utils.Pair;
import com.cloud.utils.Ternary; import com.cloud.utils.Ternary;
import com.cloud.utils.component.Inject; import com.cloud.utils.component.Inject;
import com.cloud.utils.component.Manager; import com.cloud.utils.component.Manager;
@ -1237,7 +1239,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
} }
@Override @Override
public List<LoadBalancerVO> searchForLoadBalancers(ListLoadBalancerRulesCmd cmd) { public Pair<List<? extends LoadBalancer>, Integer> searchForLoadBalancers(ListLoadBalancerRulesCmd cmd) {
Long ipId = cmd.getPublicIpId(); Long ipId = cmd.getPublicIpId();
Long zoneId = cmd.getZoneId(); Long zoneId = cmd.getZoneId();
Long id = cmd.getId(); Long id = cmd.getId();
@ -1328,7 +1330,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
} }
} }
return _lbDao.search(sc, searchFilter); Pair<List<LoadBalancerVO>, Integer> result = _lbDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends LoadBalancer>, Integer>(result.first(), result.second());
} }
@Override @Override

View File

@ -61,6 +61,8 @@ import com.cloud.user.AccountManager;
import com.cloud.user.DomainManager; import com.cloud.user.DomainManager;
import com.cloud.user.UserContext; import com.cloud.user.UserContext;
import com.cloud.uservm.UserVm; import com.cloud.uservm.UserVm;
import com.cloud.utils.IdentityProxy;
import com.cloud.utils.Pair;
import com.cloud.utils.Ternary; import com.cloud.utils.Ternary;
import com.cloud.utils.component.Inject; import com.cloud.utils.component.Inject;
import com.cloud.utils.component.Manager; import com.cloud.utils.component.Manager;
@ -686,7 +688,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
} }
@Override @Override
public List<? extends PortForwardingRule> listPortForwardingRules(ListPortForwardingRulesCmd cmd) { public Pair<List<? extends PortForwardingRule>, Integer> listPortForwardingRules(ListPortForwardingRulesCmd cmd) {
Long ipId = cmd.getIpAddressId(); Long ipId = cmd.getIpAddressId();
Long id = cmd.getId(); Long id = cmd.getId();
Map<String, String> tags = cmd.getTags(); Map<String, String> tags = cmd.getTags();
@ -752,7 +754,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
sc.setParameters("purpose", Purpose.PortForwarding); sc.setParameters("purpose", Purpose.PortForwarding);
return _portForwardingDao.search(sc, filter); Pair<List<PortForwardingRuleVO>, Integer> result = _portForwardingDao.searchAndCount(sc, filter);
return new Pair<List<? extends PortForwardingRule>, Integer>(result.first(), result.second());
} }
@Override @Override
@ -902,7 +905,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
} }
@Override @Override
public List<? extends FirewallRule> searchStaticNatRules(Long ipId, Long id, Long vmId, Long start, Long size, String accountName, Long domainId, Long projectId, boolean isRecursive, boolean listAll) { public Pair<List<? extends FirewallRule>, Integer> searchStaticNatRules(Long ipId, Long id, Long vmId, Long start, Long size, String accountName, Long domainId, Long projectId, boolean isRecursive, boolean listAll) {
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
List<Long> permittedAccounts = new ArrayList<Long>(); List<Long> permittedAccounts = new ArrayList<Long>();
@ -950,7 +953,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
sc.setJoinParameters("ipSearch", "associatedWithVmId", vmId); sc.setJoinParameters("ipSearch", "associatedWithVmId", vmId);
} }
return _firewallDao.search(sc, filter); Pair<List<FirewallRuleVO>, Integer> result = _firewallDao.searchAndCount(sc, filter);
return new Pair<List<? extends FirewallRule>, Integer>(result.first(), result.second());
} }
@Override @Override

View File

@ -51,6 +51,8 @@ import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.user.Account; import com.cloud.user.Account;
import com.cloud.user.AccountManager; import com.cloud.user.AccountManager;
import com.cloud.user.UserContext; import com.cloud.user.UserContext;
import com.cloud.utils.IdentityProxy;
import com.cloud.utils.Pair;
import com.cloud.utils.Ternary; import com.cloud.utils.Ternary;
import com.cloud.utils.component.Inject; import com.cloud.utils.component.Inject;
import com.cloud.utils.component.Manager; import com.cloud.utils.component.Manager;
@ -346,7 +348,7 @@ public class NetworkACLManagerImpl implements Manager,NetworkACLManager{
@Override @Override
public List<? extends FirewallRule> listNetworkACLs(ListNetworkACLsCmd cmd) { public Pair<List<? extends FirewallRule>,Integer> listNetworkACLs(ListNetworkACLsCmd cmd) {
Long networkId = cmd.getNetworkId(); Long networkId = cmd.getNetworkId();
Long id = cmd.getId(); Long id = cmd.getId();
String trafficType = cmd.getTrafficType(); String trafficType = cmd.getTrafficType();
@ -411,7 +413,8 @@ public class NetworkACLManagerImpl implements Manager,NetworkACLManager{
sc.setParameters("purpose", Purpose.NetworkACL); sc.setParameters("purpose", Purpose.NetworkACL);
return _firewallDao.search(sc, filter); Pair<List<FirewallRuleVO>, Integer> result = _firewallDao.searchAndCount(sc, filter);
return new Pair<List<? extends FirewallRule>, Integer>(result.first(), result.second());
} }

View File

@ -95,6 +95,7 @@ import com.cloud.user.ResourceLimitService;
import com.cloud.user.User; import com.cloud.user.User;
import com.cloud.user.UserContext; import com.cloud.user.UserContext;
import com.cloud.utils.NumbersUtil; import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
import com.cloud.utils.Ternary; import com.cloud.utils.Ternary;
import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.component.Inject; import com.cloud.utils.component.Inject;
@ -1387,7 +1388,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
} }
@Override @Override
public List<PrivateGateway> listPrivateGateway(ListPrivateGatewaysCmd cmd) { public Pair<List<PrivateGateway>, Integer> listPrivateGateway(ListPrivateGatewaysCmd cmd) {
String ipAddress = cmd.getIpAddress(); String ipAddress = cmd.getIpAddress();
String vlan = cmd.getVlan(); String vlan = cmd.getVlan();
Long vpcId = cmd.getVpcId(); Long vpcId = cmd.getVpcId();
@ -1441,14 +1442,14 @@ public class VpcManagerImpl implements VpcManager, Manager{
if (vlan != null) { if (vlan != null) {
sc.setJoinParameters("networkSearch", "vlan", BroadcastDomainType.Vlan.toUri(vlan)); sc.setJoinParameters("networkSearch", "vlan", BroadcastDomainType.Vlan.toUri(vlan));
} }
List<VpcGatewayVO> vos = _vpcGatewayDao.search(sc, searchFilter); Pair<List<VpcGatewayVO>, Integer> vos = _vpcGatewayDao.searchAndCount(sc, searchFilter);
List<PrivateGateway> privateGtws = new ArrayList<PrivateGateway>(vos.size()); List<PrivateGateway> privateGtws = new ArrayList<PrivateGateway>(vos.first().size());
for (VpcGateway vo : vos) { for (VpcGateway vo : vos.first()) {
privateGtws.add(getPrivateGatewayProfile(vo)); privateGtws.add(getPrivateGatewayProfile(vo));
} }
return privateGtws; return new Pair<List<PrivateGateway>, Integer>(privateGtws, vos.second());
} }
@Override @Override
@ -1608,7 +1609,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
} }
@Override @Override
public List<? extends StaticRoute> listStaticRoutes(ListStaticRoutesCmd cmd) { public Pair<List<? extends StaticRoute>, Integer> listStaticRoutes(ListStaticRoutesCmd cmd) {
Long id = cmd.getId(); Long id = cmd.getId();
Long gatewayId = cmd.getGatewayId(); Long gatewayId = cmd.getGatewayId();
Long vpcId = cmd.getVpcId(); Long vpcId = cmd.getVpcId();
@ -1673,10 +1674,11 @@ public class VpcManagerImpl implements VpcManager, Manager{
count++; count++;
} }
} }
return _staticRouteDao.search(sc, searchFilter); Pair<List<StaticRouteVO>, Integer> result = _staticRouteDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends StaticRoute>, Integer>(result.first(), result.second());
} }
protected void detectRoutesConflict(StaticRoute newRoute) throws NetworkRuleConflictException { protected void detectRoutesConflict(StaticRoute newRoute) throws NetworkRuleConflictException {
List<? extends StaticRoute> routes = _staticRouteDao.listByGatewayIdAndNotRevoked(newRoute.getVpcGatewayId()); List<? extends StaticRoute> routes = _staticRouteDao.listByGatewayIdAndNotRevoked(newRoute.getVpcGatewayId());
assert (routes.size() >= 1) : "For static routes, we now always first persist the route and then check for " + assert (routes.size() >= 1) : "For static routes, we now always first persist the route and then check for " +

View File

@ -497,10 +497,9 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
} }
@Override @Override
public List<VpnUserVO> searchForVpnUsers(ListVpnUsersCmd cmd) { public Pair<List<? extends VpnUser>, Integer> searchForVpnUsers(ListVpnUsersCmd cmd) {
String username = cmd.getUsername(); String username = cmd.getUsername();
Long id = cmd.getId(); Long id = cmd.getId();
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
List<Long> permittedAccounts = new ArrayList<Long>(); List<Long> permittedAccounts = new ArrayList<Long>();
@ -532,11 +531,12 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
sc.setParameters("username", username); sc.setParameters("username", username);
} }
return _vpnUsersDao.search(sc, searchFilter); Pair<List<VpnUserVO>, Integer> result = _vpnUsersDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends VpnUser>, Integer>(result.first(), result.second());
} }
@Override @Override
public List<RemoteAccessVpnVO> searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd) { public Pair<List<? extends RemoteAccessVpn>, Integer> searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd) {
// do some parameter validation // do some parameter validation
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
Long ipAddressId = cmd.getPublicIpId(); Long ipAddressId = cmd.getPublicIpId();
@ -579,7 +579,8 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
sc.setParameters("serverAddressId", ipAddressId); sc.setParameters("serverAddressId", ipAddressId);
} }
return _remoteAccessVpnDao.search(sc, filter); Pair<List<RemoteAccessVpnVO>, Integer> result = _remoteAccessVpnDao.searchAndCount(sc, filter);
return new Pair<List<? extends RemoteAccessVpn>, Integer> (result.first(), result.second());
} }
@Override @Override

View File

@ -98,6 +98,7 @@ import com.cloud.api.commands.UpdateVMGroupCmd;
import com.cloud.api.commands.UpgradeSystemVMCmd; import com.cloud.api.commands.UpgradeSystemVMCmd;
import com.cloud.api.commands.UploadCustomCertificateCmd; import com.cloud.api.commands.UploadCustomCertificateCmd;
import com.cloud.api.response.ExtractResponse; import com.cloud.api.response.ExtractResponse;
import com.cloud.async.AsyncJob;
import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobExecutor;
import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobManager;
import com.cloud.async.AsyncJobResult; import com.cloud.async.AsyncJobResult;
@ -159,11 +160,13 @@ import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
import com.cloud.info.ConsoleProxyInfo; import com.cloud.info.ConsoleProxyInfo;
import com.cloud.keystore.KeystoreManager; import com.cloud.keystore.KeystoreManager;
import com.cloud.network.IPAddressVO; import com.cloud.network.IPAddressVO;
import com.cloud.network.IpAddress;
import com.cloud.network.LoadBalancerVO; import com.cloud.network.LoadBalancerVO;
import com.cloud.network.NetworkVO; import com.cloud.network.NetworkVO;
import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.LoadBalancerDao;
import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkDao;
import com.cloud.network.router.VirtualRouter;
import com.cloud.org.Cluster; import com.cloud.org.Cluster;
import com.cloud.org.Grouping.AllocationState; import com.cloud.org.Grouping.AllocationState;
import com.cloud.projects.Project; import com.cloud.projects.Project;
@ -1612,7 +1615,7 @@ public class ManagementServerImpl implements ManagementServer {
} }
@Override @Override
public List<DomainRouterVO> searchForRouters(ListRoutersCmd cmd) { public Pair<List<? extends VirtualRouter>, Integer> searchForRouters(ListRoutersCmd cmd) {
Long id = cmd.getId(); Long id = cmd.getId();
String name = cmd.getRouterName(); String name = cmd.getRouterName();
String state = cmd.getState(); String state = cmd.getState();
@ -1707,11 +1710,12 @@ public class ManagementServerImpl implements ManagementServer {
sc.setParameters("vpcId", vpcId); sc.setParameters("vpcId", vpcId);
} }
return _routerDao.search(sc, searchFilter); Pair<List<DomainRouterVO>, Integer> result = _routerDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends VirtualRouter>, Integer>(result.first(), result.second());
} }
@Override @Override
public List<IPAddressVO> searchForIPAddresses(ListPublicIpAddressesCmd cmd) { public Pair<List<? extends IpAddress>, Integer> searchForIPAddresses(ListPublicIpAddressesCmd cmd) {
Object keyword = cmd.getKeyword(); Object keyword = cmd.getKeyword();
Long physicalNetworkId = cmd.getPhysicalNetworkId(); Long physicalNetworkId = cmd.getPhysicalNetworkId();
Long associatedNetworkId = cmd.getAssociatedNetworkId(); Long associatedNetworkId = cmd.getAssociatedNetworkId();
@ -1858,7 +1862,8 @@ public class ManagementServerImpl implements ManagementServer {
sc.setParameters("associatedNetworkIdEq", associatedNetworkId); sc.setParameters("associatedNetworkIdEq", associatedNetworkId);
} }
return _publicIpAddressDao.search(sc, searchFilter); Pair<List<IPAddressVO>, Integer> result = _publicIpAddressDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends IpAddress>, Integer>(result.first(), result.second());
} }
@Override @Override
@ -2076,7 +2081,7 @@ public class ManagementServerImpl implements ManagementServer {
} }
@Override @Override
public List<? extends Alert> searchForAlerts(ListAlertsCmd cmd) { public Pair<List<? extends Alert>, Integer> searchForAlerts(ListAlertsCmd cmd) {
Filter searchFilter = new Filter(AlertVO.class, "lastSent", false, cmd.getStartIndex(), cmd.getPageSizeVal()); Filter searchFilter = new Filter(AlertVO.class, "lastSent", false, cmd.getStartIndex(), cmd.getPageSizeVal());
SearchCriteria<AlertVO> sc = _alertDao.createSearchCriteria(); SearchCriteria<AlertVO> sc = _alertDao.createSearchCriteria();
@ -2103,7 +2108,8 @@ public class ManagementServerImpl implements ManagementServer {
sc.addAnd("type", SearchCriteria.Op.EQ, type); sc.addAnd("type", SearchCriteria.Op.EQ, type);
} }
return _alertDao.search(sc, searchFilter); Pair<List<AlertVO>, Integer> result =_alertDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends Alert>, Integer>(result.first(), result.second());
} }
@Override @Override
@ -2539,7 +2545,7 @@ public class ManagementServerImpl implements ManagementServer {
} }
@Override @Override
public List<AsyncJobVO> searchForAsyncJobs(ListAsyncJobsCmd cmd) { public Pair<List<? extends AsyncJob>, Integer> searchForAsyncJobs(ListAsyncJobsCmd cmd) {
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
@ -2609,7 +2615,8 @@ public class ManagementServerImpl implements ManagementServer {
sc.addAnd("created", SearchCriteria.Op.GTEQ, startDate); sc.addAnd("created", SearchCriteria.Op.GTEQ, startDate);
} }
return _jobDao.search(sc, searchFilter); Pair<List<AsyncJobVO>, Integer> result = _jobDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends AsyncJob>, Integer> (result.first(), result.second());
} }
@ActionEvent(eventType = EventTypes.EVENT_SSVM_START, eventDescription = "starting secondary storage Vm", async = true) @ActionEvent(eventType = EventTypes.EVENT_SSVM_START, eventDescription = "starting secondary storage Vm", async = true)

View File

@ -3825,7 +3825,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
} }
@Override @Override
public List<VolumeVO> searchForVolumes(ListVolumesCmd cmd) { public Pair<List<? extends Volume>, Integer> searchForVolumes(ListVolumesCmd cmd) {
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
List<Long> permittedAccounts = new ArrayList<Long>(); List<Long> permittedAccounts = new ArrayList<Long>();
@ -3937,8 +3937,10 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
// Only return volumes that are not destroyed // Only return volumes that are not destroyed
sc.setParameters("state", Volume.State.Destroy); sc.setParameters("state", Volume.State.Destroy);
Pair<List<VolumeVO>, Integer> volumes = _volumeDao.searchAndCount(sc, searchFilter);
return _volumeDao.search(sc, searchFilter); return new Pair<List<? extends Volume>, Integer>(volumes.first(), volumes.second());
} }
@Override @Override

View File

@ -853,7 +853,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
} }
@Override @Override
public List<SnapshotVO> listSnapshots(ListSnapshotsCmd cmd) { public Pair<List<? extends Snapshot>, Integer> listSnapshots(ListSnapshotsCmd cmd) {
Long volumeId = cmd.getVolumeId(); Long volumeId = cmd.getVolumeId();
String name = cmd.getSnapshotName(); String name = cmd.getSnapshotName();
Long id = cmd.getId(); Long id = cmd.getId();
@ -954,7 +954,8 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
sc.setParameters("snapshotTypeNEQ", Snapshot.Type.TEMPLATE.ordinal()); sc.setParameters("snapshotTypeNEQ", Snapshot.Type.TEMPLATE.ordinal());
} }
return _snapshotDao.search(sc, searchFilter); Pair<List<SnapshotVO>, Integer> result = _snapshotDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends Snapshot>, Integer>(result.first(), result.second());
} }

View File

@ -322,7 +322,7 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager
} }
@Override @Override
public List<? extends ResourceTag> listTags(ListTagsCmd cmd) { public Pair<List<? extends ResourceTag>, Integer> listTags(ListTagsCmd cmd) {
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
List<Long> permittedAccounts = new ArrayList<Long>(); List<Long> permittedAccounts = new ArrayList<Long>();
String key = cmd.getKey(); String key = cmd.getKey();
@ -334,54 +334,56 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager
Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject =
new Ternary<Long, Boolean, ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null); new Ternary<Long, Boolean, ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
_accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(),
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, false);
Long domainId = domainIdRecursiveListProject.first();
Boolean isRecursive = domainIdRecursiveListProject.second();
ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
Filter searchFilter = new Filter(ResourceTagVO.class, "resourceType", false, cmd.getStartIndex(), cmd.getPageSizeVal());
SearchBuilder<ResourceTagVO> sb = _resourceTagDao.createSearchBuilder();
_accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
sb.and("key", sb.entity().getKey(), SearchCriteria.Op.EQ); _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(),
sb.and("value", sb.entity().getValue(), SearchCriteria.Op.EQ); cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, false);
Long domainId = domainIdRecursiveListProject.first();
if (resourceId != null) { Boolean isRecursive = domainIdRecursiveListProject.second();
sb.and().op("resourceId", sb.entity().getResourceId(), SearchCriteria.Op.EQ); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
sb.or("resourceUuid", sb.entity().getResourceUuid(), SearchCriteria.Op.EQ); Filter searchFilter = new Filter(ResourceTagVO.class, "resourceType", false, cmd.getStartIndex(), cmd.getPageSizeVal());
sb.cp();
} SearchBuilder<ResourceTagVO> sb = _resourceTagDao.createSearchBuilder();
_accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
sb.and("resourceType", sb.entity().getResourceType(), SearchCriteria.Op.EQ);
sb.and("customer", sb.entity().getCustomer(), SearchCriteria.Op.EQ); sb.and("key", sb.entity().getKey(), SearchCriteria.Op.EQ);
sb.and("value", sb.entity().getValue(), SearchCriteria.Op.EQ);
// now set the SC criteria...
SearchCriteria<ResourceTagVO> sc = sb.create(); if (resourceId != null) {
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); sb.and().op("resourceId", sb.entity().getResourceId(), SearchCriteria.Op.EQ);
sb.or("resourceUuid", sb.entity().getResourceUuid(), SearchCriteria.Op.EQ);
if (key != null) { sb.cp();
sc.setParameters("key", key); }
}
sb.and("resourceType", sb.entity().getResourceType(), SearchCriteria.Op.EQ);
if (value != null) { sb.and("customer", sb.entity().getCustomer(), SearchCriteria.Op.EQ);
sc.setParameters("value", value);
} // now set the SC criteria...
SearchCriteria<ResourceTagVO> sc = sb.create();
if (resourceId != null) { _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
sc.setParameters("resourceId", resourceId);
sc.setParameters("resourceUuid", resourceId); if (key != null) {
} sc.setParameters("key", key);
}
if (resourceType != null) {
sc.setParameters("resourceType", resourceType); if (value != null) {
} sc.setParameters("value", value);
}
if (customerName != null) {
sc.setParameters("customer", customerName); if (resourceId != null) {
} sc.setParameters("resourceId", resourceId);
sc.setParameters("resourceUuid", resourceId);
return _resourceTagDao.search(sc, searchFilter); }
if (resourceType != null) {
sc.setParameters("resourceType", resourceType);
}
if (customerName != null) {
sc.setParameters("customer", customerName);
}
Pair<List<ResourceTagVO>, Integer> result = _resourceTagDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends ResourceTag>, Integer> (result.first(), result.second());
} }
@Override @Override

View File

@ -1980,7 +1980,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag
} }
@Override @Override
public List<AccountVO> searchForAccounts(ListAccountsCmd cmd) { public Pair<List<? extends Account>, Integer> searchForAccounts(ListAccountsCmd cmd) {
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
Long domainId = cmd.getDomainId(); Long domainId = cmd.getDomainId();
Long accountId = cmd.getId(); Long accountId = cmd.getId();
@ -2095,11 +2095,12 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag
} }
} }
return _accountDao.search(sc, searchFilter); Pair<List<AccountVO>, Integer> result = _accountDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends Account>, Integer>(result.first(), result.second());
} }
@Override @Override
public List<UserAccountVO> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException { public Pair<List<? extends UserAccount>, Integer> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException {
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
Long domainId = cmd.getDomainId(); Long domainId = cmd.getDomainId();
@ -2129,7 +2130,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag
if (id != null && id == 1) { if (id != null && id == 1) {
// system user should NOT be searchable // system user should NOT be searchable
List<UserAccountVO> emptyList = new ArrayList<UserAccountVO>(); List<UserAccountVO> emptyList = new ArrayList<UserAccountVO>();
return emptyList; return new Pair<List<? extends UserAccount>, Integer>(emptyList, 0);
} else if (id != null) { } else if (id != null) {
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
} else { } else {
@ -2192,7 +2193,8 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag
sc.setParameters("state", state); sc.setParameters("state", state);
} }
return _userAccountDao.search(sc, searchFilter); Pair<List<UserAccountVO>, Integer> result = _userAccountDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends UserAccount>, Integer>(result.first(), result.second());
} }
@Override @Override

View File

@ -47,6 +47,7 @@ import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.AccountDao;
import com.cloud.utils.Pair;
import com.cloud.utils.component.Inject; import com.cloud.utils.component.Inject;
import com.cloud.utils.component.Manager; import com.cloud.utils.component.Manager;
import com.cloud.utils.db.DB; import com.cloud.utils.db.DB;
@ -349,7 +350,7 @@ public class DomainManagerImpl implements DomainManager, DomainService, Manager
} }
@Override @Override
public List<DomainVO> searchForDomains(ListDomainsCmd cmd) { public Pair<List<? extends Domain>, Integer> searchForDomains(ListDomainsCmd cmd) {
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
Long domainId = cmd.getId(); Long domainId = cmd.getId();
boolean listAll = cmd.listAll(); boolean listAll = cmd.listAll();
@ -407,11 +408,12 @@ public class DomainManagerImpl implements DomainManager, DomainService, Manager
// return only Active domains to the API // return only Active domains to the API
sc.setParameters("state", Domain.State.Active); sc.setParameters("state", Domain.State.Active);
return _domainDao.search(sc, searchFilter); Pair<List<DomainVO>, Integer> result = _domainDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends Domain>, Integer>(result.first(), result.second());
} }
@Override @Override
public List<DomainVO> searchForDomainChildren(ListDomainChildrenCmd cmd) throws PermissionDeniedException { public Pair<List<? extends Domain>, Integer> searchForDomainChildren(ListDomainChildrenCmd cmd) throws PermissionDeniedException {
Long domainId = cmd.getId(); Long domainId = cmd.getId();
String domainName = cmd.getDomainName(); String domainName = cmd.getDomainName();
Boolean isRecursive = cmd.isRecursive(); Boolean isRecursive = cmd.isRecursive();
@ -433,12 +435,12 @@ public class DomainManagerImpl implements DomainManager, DomainService, Manager
} }
Filter searchFilter = new Filter(DomainVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); Filter searchFilter = new Filter(DomainVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
List<DomainVO> domainList = searchForDomainChildren(searchFilter, domainId, domainName, keyword, path, true); Pair<List<DomainVO>, Integer> result = searchForDomainChildren(searchFilter, domainId, domainName, keyword, path, true);
return domainList; return new Pair<List<? extends Domain>, Integer>(result.first(), result.second());
} }
private List<DomainVO> searchForDomainChildren(Filter searchFilter, Long domainId, String domainName, Object keyword, String path, boolean listActiveOnly) { private Pair<List<DomainVO>, Integer> searchForDomainChildren(Filter searchFilter, Long domainId, String domainName, Object keyword, String path, boolean listActiveOnly) {
SearchCriteria<DomainVO> sc = _domainDao.createSearchCriteria(); SearchCriteria<DomainVO> sc = _domainDao.createSearchCriteria();
if (keyword != null) { if (keyword != null) {
@ -465,7 +467,7 @@ public class DomainManagerImpl implements DomainManager, DomainService, Manager
sc.addAnd("state", SearchCriteria.Op.EQ, Domain.State.Active); sc.addAnd("state", SearchCriteria.Op.EQ, Domain.State.Active);
} }
return _domainDao.search(sc, searchFilter); return _domainDao.searchAndCount(sc, searchFilter);
} }
} }

View File

@ -96,9 +96,9 @@ public interface UserVmManager extends VirtualMachineGuru<UserVmVO>, UserVmServi
* @param listAll TODO * @param listAll TODO
* @param listProjectResourcesCriteria TODO * @param listProjectResourcesCriteria TODO
* @param tags TODO * @param tags TODO
* @return List of UserVMs. * @return List of UserVMs + count
*/ */
List<UserVmVO> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags); Pair<List<UserVmVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags);
String getChecksum(Long hostId, String templatePath); String getChecksum(Long hostId, String templatePath);

View File

@ -2996,7 +2996,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
} }
@Override @Override
public List<UserVmVO> searchForUserVMs(ListVMsCmd cmd) { public Pair<List<? extends UserVm>, Integer> searchForUserVMs(ListVMsCmd cmd) {
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
List<Long> permittedAccounts = new ArrayList<Long>(); List<Long> permittedAccounts = new ArrayList<Long>();
String hypervisor = cmd.getHypervisor(); String hypervisor = cmd.getHypervisor();
@ -3045,11 +3045,13 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
} }
c.addCriteria(Criteria.ISADMIN, _accountMgr.isAdmin(caller.getType())); c.addCriteria(Criteria.ISADMIN, _accountMgr.isAdmin(caller.getType()));
return searchForUserVMs(c, caller, domainId, isRecursive, permittedAccounts, listAll, listProjectResourcesCriteria, tags); Pair<List<UserVmVO>, Integer> result = searchForUserVMs(c, caller, domainId, isRecursive,
permittedAccounts, listAll, listProjectResourcesCriteria, tags);
return new Pair<List<? extends UserVm>, Integer>(result.first(), result.second());
} }
@Override @Override
public List<UserVmVO> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, public Pair<List<UserVmVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive,
List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) { List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
Filter searchFilter = new Filter(UserVmVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); Filter searchFilter = new Filter(UserVmVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit());
@ -3240,7 +3242,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
} }
sc.setParameters("hostIdIN", (Object[]) hostIds); sc.setParameters("hostIdIN", (Object[]) hostIds);
} else { } else {
return new ArrayList<UserVmVO>(); return new Pair<List<UserVmVO>, Integer>(new ArrayList<UserVmVO>(), 0);
} }
} }
} }
@ -3248,8 +3250,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
if (storageId != null) { if (storageId != null) {
sc.setJoinParameters("volumeSearch", "poolId", storageId); sc.setJoinParameters("volumeSearch", "poolId", storageId);
} }
s_logger.debug("THE WHERE CLAUSE IS:" + sc.getWhereClause());
return _vmDao.search(sc, searchFilter); return _vmDao.searchAndCount(sc, searchFilter);
} }
@Override @Override

View File

@ -298,13 +298,13 @@ public class MockAccountManagerImpl implements Manager, AccountManager, AccountS
} }
@Override @Override
public List<? extends Account> searchForAccounts(ListAccountsCmd cmd) { public Pair<List<? extends Account>, Integer> searchForAccounts(ListAccountsCmd cmd) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@Override @Override
public List<? extends UserAccount> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException { public Pair<List<? extends UserAccount>, Integer> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }

View File

@ -29,6 +29,7 @@ import com.cloud.domain.Domain;
import com.cloud.domain.DomainVO; import com.cloud.domain.DomainVO;
import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.PermissionDeniedException;
import com.cloud.utils.component.Manager; import com.cloud.utils.component.Manager;
import com.cloud.utils.Pair;
@Local(value = { DomainManager.class }) @Local(value = { DomainManager.class })
public class MockDomainManagerImpl implements Manager, DomainManager { public class MockDomainManagerImpl implements Manager, DomainManager {
@ -58,14 +59,14 @@ public class MockDomainManagerImpl implements Manager, DomainManager {
} }
@Override @Override
public List<? extends Domain> searchForDomains(ListDomainsCmd cmd) public Pair<List<? extends Domain>, Integer> searchForDomains(ListDomainsCmd cmd)
throws PermissionDeniedException { throws PermissionDeniedException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@Override @Override
public List<? extends Domain> searchForDomainChildren( public Pair<List<? extends Domain>, Integer> searchForDomainChildren(
ListDomainChildrenCmd cmd) throws PermissionDeniedException { ListDomainChildrenCmd cmd) throws PermissionDeniedException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;

View File

@ -192,7 +192,7 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana
} }
@Override @Override
public List<UserVmVO> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) { public Pair<List<UserVmVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@ -401,7 +401,7 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana
} }
@Override @Override
public List<? extends UserVm> searchForUserVMs(ListVMsCmd cmd) { public Pair<List<? extends UserVm>, Integer> searchForUserVMs(ListVMsCmd cmd) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }

View File

@ -49,6 +49,7 @@ import com.cloud.network.vpc.VpcService;
import com.cloud.offering.NetworkOffering; import com.cloud.offering.NetworkOffering;
import com.cloud.user.Account; import com.cloud.user.Account;
import com.cloud.user.User; import com.cloud.user.User;
import com.cloud.utils.Pair;
import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.component.Manager; import com.cloud.utils.component.Manager;
import com.cloud.vm.DomainRouterVO; import com.cloud.vm.DomainRouterVO;
@ -244,7 +245,7 @@ public class MockVpcManagerImpl implements VpcManager, Manager{
* @see com.cloud.network.vpc.VpcService#listPrivateGateway(com.cloud.api.commands.ListPrivateGatewaysCmd) * @see com.cloud.network.vpc.VpcService#listPrivateGateway(com.cloud.api.commands.ListPrivateGatewaysCmd)
*/ */
@Override @Override
public List<PrivateGateway> listPrivateGateway(ListPrivateGatewaysCmd listPrivateGatewaysCmd) { public Pair<List<PrivateGateway>, Integer> listPrivateGateway(ListPrivateGatewaysCmd listPrivateGatewaysCmd) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@ -289,7 +290,7 @@ public class MockVpcManagerImpl implements VpcManager, Manager{
* @see com.cloud.network.vpc.VpcService#listStaticRoutes(com.cloud.api.commands.ListStaticRoutesCmd) * @see com.cloud.network.vpc.VpcService#listStaticRoutes(com.cloud.api.commands.ListStaticRoutesCmd)
*/ */
@Override @Override
public List<? extends StaticRoute> listStaticRoutes(ListStaticRoutesCmd cmd) { public Pair<List<? extends StaticRoute>, Integer> listStaticRoutes(ListStaticRoutesCmd cmd) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }

View File

@ -22,6 +22,8 @@ import java.util.Map;
import javax.naming.ConfigurationException; import javax.naming.ConfigurationException;
import com.cloud.utils.Pair;
/** /**
* a uniform method for persisting and finding db entities. * a uniform method for persisting and finding db entities.
**/ **/
@ -260,4 +262,11 @@ public interface GenericDao<T, ID extends Serializable> {
* @return * @return
*/ */
Class<T> getEntityBeanType(); Class<T> getEntityBeanType();
/**
* @param sc
* @param filter
* @return
*/
Pair<List<T>, Integer> searchAndCount(SearchCriteria<T> sc, Filter filter);
} }

View File

@ -130,6 +130,7 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
protected StringBuilder _discriminatorClause; protected StringBuilder _discriminatorClause;
protected Map<String, Object> _discriminatorValues; protected Map<String, Object> _discriminatorValues;
protected String _selectByIdSql; protected String _selectByIdSql;
protected String _count;
protected Field _idField; protected Field _idField;
@ -201,6 +202,7 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
final SqlGenerator generator = new SqlGenerator(_entityBeanType); final SqlGenerator generator = new SqlGenerator(_entityBeanType);
_partialSelectSql = generator.buildSelectSql(false); _partialSelectSql = generator.buildSelectSql(false);
_count = generator.buildCountSql();
_partialQueryCacheSelectSql = generator.buildSelectSql(true); _partialQueryCacheSelectSql = generator.buildSelectSql(true);
_embeddedFields = generator.getEmbeddedFields(); _embeddedFields = generator.getEmbeddedFields();
_insertSqls = generator.buildInsertSqls(); _insertSqls = generator.buildInsertSqls();
@ -1211,6 +1213,13 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
public List<T> search(final SearchCriteria<T> sc, final Filter filter) { public List<T> search(final SearchCriteria<T> sc, final Filter filter) {
return search(sc, filter, null, false); return search(sc, filter, null, false);
} }
@Override @DB(txn=false)
public Pair<List<T>, Integer> searchAndCount(final SearchCriteria<T> sc, final Filter filter) {
List<T> objects = search(sc, filter, null, false);
Integer count = getCount(sc);
return new Pair<List<T>, Integer>(objects, count);
}
@Override @DB(txn=false) @Override @DB(txn=false)
public List<T> search(final SearchCriteria<T> sc, final Filter filter, final boolean enable_query_cache) { public List<T> search(final SearchCriteria<T> sc, final Filter filter, final boolean enable_query_cache) {
@ -1769,4 +1778,71 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
factory.setCallback(0, sc); factory.setCallback(0, sc);
return sc; return sc;
} }
public Integer getCount(SearchCriteria<T> sc) {
String clause = sc != null ? sc.getWhereClause() : null;
if (clause != null && clause.length() == 0) {
clause = null;
}
final StringBuilder str = createCountSelect(sc, clause != null);
if (clause != null) {
str.append(clause);
}
Collection<JoinBuilder<SearchCriteria<?>>> joins = null;
if (sc != null) {
joins = sc.getJoins();
if (joins != null) {
addJoins(str, joins);
}
}
List<Object> groupByValues = addGroupBy(str, sc);
final Transaction txn = Transaction.currentTxn();
final String sql = str.toString();
PreparedStatement pstmt = null;
try {
pstmt = txn.prepareAutoCloseStatement(sql);
int i = 0;
if (clause != null) {
for (final Pair<Attribute, Object> value : sc.getValues()) {
prepareAttribute(++i, pstmt, value.first(), value.second());
}
}
if (joins != null) {
i = addJoinAttributes(i, pstmt, joins);
}
if (groupByValues != null) {
for (Object value : groupByValues) {
pstmt.setObject(i++, value);
}
}
final ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
return rs.getInt(1);
}
return 0;
} catch (final SQLException e) {
throw new CloudRuntimeException("DB Exception on: " + pstmt, e);
} catch (final Throwable e) {
throw new CloudRuntimeException("Caught: " + pstmt, e);
}
}
@DB(txn=false)
protected StringBuilder createCountSelect(SearchCriteria<?> sc, final boolean whereClause) {
StringBuilder sql = new StringBuilder(_count);
if (!whereClause) {
sql.delete(sql.length() - (_discriminatorClause == null ? 6 : 4), sql.length());
}
return sql;
}
} }

View File

@ -659,4 +659,11 @@ public class SqlGenerator {
public Field[] getEmbeddedFields() { public Field[] getEmbeddedFields() {
return _embeddeds.toArray(new Field[_embeddeds.size()]); return _embeddeds.toArray(new Field[_embeddeds.size()]);
} }
public String buildCountSql() {
StringBuilder sql = new StringBuilder();
return sql.append("SELECT COUNT(*) FROM ").append(buildTableReferences()).
append(" WHERE ").append(buildDiscriminatorClause().first()).toString();
}
} }