mirror of
https://github.com/apache/cloudstack
synced 2026-08-06 10:48:12 +00:00
Refactoring listDomains to the new API framework. The search criteria are now retrieved from the command itself rather than creating an intermediate Criteria object first.
This commit is contained in:
parent
e55e6c283f
commit
9eeabb701a
@ -20,35 +20,21 @@ package com.cloud.api.commands;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.BaseCmd;
|
||||
import com.cloud.api.BaseListCmd;
|
||||
import com.cloud.api.Implementation;
|
||||
import com.cloud.api.Parameter;
|
||||
import com.cloud.api.ServerApiException;
|
||||
import com.cloud.api.response.DomainResponse;
|
||||
import com.cloud.domain.DomainVO;
|
||||
import com.cloud.server.Criteria;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.utils.Pair;
|
||||
|
||||
public class ListDomainsCmd extends BaseCmd {
|
||||
import com.cloud.serializer.SerializerHelper;
|
||||
|
||||
@Implementation(method="searchForDomains")
|
||||
public class ListDomainsCmd extends BaseListCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(ListDomainsCmd.class.getName());
|
||||
|
||||
private static final String s_name = "listdomainsresponse";
|
||||
private static final List<Pair<Enum, Boolean>> s_properties = new ArrayList<Pair<Enum, Boolean>>();
|
||||
|
||||
static {
|
||||
s_properties.add(new Pair<Enum, Boolean>(BaseCmd.Properties.ACCOUNT_OBJ, Boolean.FALSE));
|
||||
|
||||
s_properties.add(new Pair<Enum, Boolean>(BaseCmd.Properties.ID, Boolean.FALSE));
|
||||
s_properties.add(new Pair<Enum, Boolean>(BaseCmd.Properties.NAME, Boolean.FALSE));
|
||||
s_properties.add(new Pair<Enum, Boolean>(BaseCmd.Properties.DOMAIN_LEVEL, Boolean.FALSE));
|
||||
|
||||
s_properties.add(new Pair<Enum, Boolean>(BaseCmd.Properties.KEYWORD, Boolean.FALSE));
|
||||
s_properties.add(new Pair<Enum, Boolean>(BaseCmd.Properties.PAGE, Boolean.FALSE));
|
||||
s_properties.add(new Pair<Enum, Boolean>(BaseCmd.Properties.PAGESIZE, Boolean.FALSE));
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//////////////// API parameters /////////////////////
|
||||
@ -85,74 +71,28 @@ public class ListDomainsCmd extends BaseCmd {
|
||||
/////////////// API Implementation///////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return s_name;
|
||||
}
|
||||
public List<Pair<Enum, Boolean>> getProperties() {
|
||||
return s_properties;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Pair<String, Object>> execute(Map<String, Object> params) {
|
||||
Account account = (Account)params.get(BaseCmd.Properties.ACCOUNT_OBJ.getName());
|
||||
Long domainId = (Long)params.get(BaseCmd.Properties.ID.getName());
|
||||
String domainName = (String)params.get(BaseCmd.Properties.NAME.getName());
|
||||
Integer level = (Integer)params.get(BaseCmd.Properties.DOMAIN_LEVEL.getName());
|
||||
String keyword = (String)params.get(BaseCmd.Properties.KEYWORD.getName());
|
||||
Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName());
|
||||
Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName());
|
||||
}
|
||||
|
||||
if (account != null) {
|
||||
if (domainId != null) {
|
||||
if (!getManagementServer().isChildDomain(account.getDomainId(), domainId)) {
|
||||
throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, "Unable to list domains for domain id " + domainId + ", permission denied.");
|
||||
}
|
||||
} else {
|
||||
domainId = account.getDomainId();
|
||||
}
|
||||
@Override @SuppressWarnings("unchecked")
|
||||
public String getResponse() {
|
||||
List<DomainVO> domains = (List<DomainVO>)getResponseObject();
|
||||
|
||||
List<DomainResponse> response = new ArrayList<DomainResponse>();
|
||||
for (DomainVO domain : domains) {
|
||||
DomainResponse domainResponse = new DomainResponse();
|
||||
domainResponse.setDomainName(domain.getName());
|
||||
domainResponse.setId(domain.getId());
|
||||
domainResponse.setLevel(domain.getLevel());
|
||||
domainResponse.setParentDomainId(domain.getParent());
|
||||
// TODO: implement
|
||||
// domainResponse.setParentDomainName(findDomainIdById(domain.getParent()).getName());
|
||||
|
||||
response.add(domainResponse);
|
||||
}
|
||||
|
||||
Long startIndex = Long.valueOf(0);
|
||||
int pageSizeNum = 50;
|
||||
if (pageSize != null) {
|
||||
pageSizeNum = pageSize.intValue();
|
||||
}
|
||||
if (page != null) {
|
||||
int pageNum = page.intValue();
|
||||
if (pageNum > 0) {
|
||||
startIndex = Long.valueOf(pageSizeNum * (pageNum-1));
|
||||
}
|
||||
}
|
||||
Criteria c = new Criteria("id", Boolean.TRUE, startIndex, Long.valueOf(pageSizeNum));
|
||||
|
||||
if (keyword != null) {
|
||||
c.addCriteria(Criteria.KEYWORD, keyword);
|
||||
} else {
|
||||
c.addCriteria(Criteria.ID, domainId);
|
||||
c.addCriteria(Criteria.NAME, domainName);
|
||||
c.addCriteria(Criteria.LEVEL, level);
|
||||
}
|
||||
|
||||
List<DomainVO> domains = getManagementServer().searchForDomains(c);
|
||||
|
||||
List<Pair<String, Object>> domainTags = new ArrayList<Pair<String, Object>>();
|
||||
Object[] dTag = new Object[domains.size()];
|
||||
int i = 0;
|
||||
for (DomainVO domain : domains) {
|
||||
List<Pair<String, Object>> domainData = new ArrayList<Pair<String, Object>>();
|
||||
domainData.add(new Pair<String, Object>(BaseCmd.Properties.ID.getName(), Long.valueOf(domain.getId()).toString()));
|
||||
domainData.add(new Pair<String, Object>(BaseCmd.Properties.NAME.getName(), domain.getName()));
|
||||
domainData.add(new Pair<String, Object>(BaseCmd.Properties.LEVEL.getName(), domain.getLevel().toString()));
|
||||
|
||||
if (domain.getParent() != null){
|
||||
domainData.add(new Pair<String, Object>(BaseCmd.Properties.PARENT_DOMAIN_ID.getName(), domain.getParent().toString()));
|
||||
domainData.add(new Pair<String, Object>(BaseCmd.Properties.PARENT_DOMAIN_NAME.getName(),
|
||||
getManagementServer().findDomainIdById(domain.getParent()).getName()));
|
||||
}
|
||||
dTag[i++] = domainData;
|
||||
}
|
||||
Pair<String, Object> domainTag = new Pair<String, Object>("domain", dTag);
|
||||
domainTags.add(domainTag);
|
||||
return domainTags;
|
||||
return SerializerHelper.toSerializedString(response);
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,6 +37,7 @@ import com.cloud.api.commands.ListCapacityCmd;
|
||||
import com.cloud.api.commands.ListCfgsByCmd;
|
||||
import com.cloud.api.commands.ListClustersCmd;
|
||||
import com.cloud.api.commands.ListDiskOfferingsCmd;
|
||||
import com.cloud.api.commands.ListDomainsCmd;
|
||||
import com.cloud.api.commands.LockAccountCmd;
|
||||
import com.cloud.api.commands.LockUserCmd;
|
||||
import com.cloud.api.commands.RebootSystemVmCmd;
|
||||
@ -1355,10 +1356,10 @@ public interface ManagementServer {
|
||||
|
||||
/**
|
||||
* Search for domains owned by the given domainId/domainName (those parameters are wrapped
|
||||
* in a Criteria object.
|
||||
* in a command object.
|
||||
* @return list of domains owned by the given user
|
||||
*/
|
||||
List<DomainVO> searchForDomains(Criteria c);
|
||||
List<DomainVO> searchForDomains(ListDomainsCmd c) throws PermissionDeniedException;
|
||||
|
||||
List<DomainVO> searchForDomainChildren(Criteria c);
|
||||
|
||||
|
||||
@ -76,6 +76,7 @@ import com.cloud.api.commands.ListCapacityCmd;
|
||||
import com.cloud.api.commands.ListCfgsByCmd;
|
||||
import com.cloud.api.commands.ListClustersCmd;
|
||||
import com.cloud.api.commands.ListDiskOfferingsCmd;
|
||||
import com.cloud.api.commands.ListDomainsCmd;
|
||||
import com.cloud.api.commands.LockAccountCmd;
|
||||
import com.cloud.api.commands.LockUserCmd;
|
||||
import com.cloud.api.commands.PrepareForMaintenanceCmd;
|
||||
@ -6052,12 +6053,24 @@ public class ManagementServerImpl implements ManagementServer {
|
||||
return _consoleProxyDao.findById(instanceId);
|
||||
}
|
||||
|
||||
public List<DomainVO> searchForDomains(Criteria c) {
|
||||
Filter searchFilter = new Filter(DomainVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit());
|
||||
Long domainId = (Long) c.getCriteria(Criteria.ID);
|
||||
String domainName = (String) c.getCriteria(Criteria.NAME);
|
||||
Integer level = (Integer) c.getCriteria(Criteria.LEVEL);
|
||||
Object keyword = c.getCriteria(Criteria.KEYWORD);
|
||||
@Override
|
||||
public List<DomainVO> searchForDomains(ListDomainsCmd cmd) throws PermissionDeniedException {
|
||||
Long domainId = cmd.getId();
|
||||
Account account = (Account)UserContext.current().getAccountObject();
|
||||
if (account != null) {
|
||||
if (domainId != null) {
|
||||
if (!_domainDao.isChildDomain(account.getDomainId(), domainId)) {
|
||||
throw new PermissionDeniedException("Unable to list domains for domain id " + domainId + ", permission denied.");
|
||||
}
|
||||
} else {
|
||||
domainId = account.getDomainId();
|
||||
}
|
||||
}
|
||||
|
||||
Filter searchFilter = new Filter(DomainVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||
String domainName = cmd.getDomainName();
|
||||
Integer level = cmd.getLevel();
|
||||
Object keyword = cmd.getKeyword();
|
||||
|
||||
SearchBuilder<DomainVO> sb = _domainDao.createSearchBuilder();
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user