From cc93e7508ceb3bcbe21bbe0e3c18ebf6b7070c45 Mon Sep 17 00:00:00 2001 From: abhishek Date: Mon, 8 Nov 2010 12:15:53 -0800 Subject: [PATCH] refactoring old code and fixing some regression bugs (UI had an issue listing domains). Also fixed the listing of domain specific zones at vm creation for a domain admin (listing everything upto root in that domain + listing all the children based on a path search) --- core/src/com/cloud/domain/dao/DomainDao.java | 2 +- .../com/cloud/domain/dao/DomainDaoImpl.java | 6 ++-- .../cloud/server/ManagementServerImpl.java | 34 +++++++++---------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/src/com/cloud/domain/dao/DomainDao.java b/core/src/com/cloud/domain/dao/DomainDao.java index 70e9a3c2f2a..37678ff2ec4 100644 --- a/core/src/com/cloud/domain/dao/DomainDao.java +++ b/core/src/com/cloud/domain/dao/DomainDao.java @@ -29,5 +29,5 @@ public interface DomainDao extends GenericDao { public DomainVO findDomainByPath(String domainPath); public boolean isChildDomain(Long parentId, Long childId); DomainVO findImmediateChildForParent(Long parentId); - List findAllChildren(String path); + List findAllChildren(String path, Long parentId); } diff --git a/core/src/com/cloud/domain/dao/DomainDaoImpl.java b/core/src/com/cloud/domain/dao/DomainDaoImpl.java index 8d144242f3f..901ed42f1e1 100644 --- a/core/src/com/cloud/domain/dao/DomainDaoImpl.java +++ b/core/src/com/cloud/domain/dao/DomainDaoImpl.java @@ -64,6 +64,7 @@ public class DomainDaoImpl extends GenericDaoBase implements Dom FindAllChildrenSearch = createSearchBuilder(); FindAllChildrenSearch.and("path", FindAllChildrenSearch.entity().getPath(), SearchCriteria.Op.LIKE); + FindAllChildrenSearch.and("id", FindAllChildrenSearch.entity().getId(), SearchCriteria.Op.NEQ); FindAllChildrenSearch.done(); } @@ -209,9 +210,10 @@ public class DomainDaoImpl extends GenericDaoBase implements Dom } @Override - public List findAllChildren(String path){ + public List findAllChildren(String path, Long parentId){ SearchCriteria sc = FindAllChildrenSearch.create(); - sc.setParameters("path", path); + sc.setParameters("path", "%"+path+"%"); + sc.setParameters("id", parentId); return listBy(sc); } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 3e44518d2ea..9fbcf20c558 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -1369,21 +1369,8 @@ public class ManagementServerImpl implements ManagementServer { } //this covers till leaf if(domainRecord != null){ -// DomainVO localParent = domainRecord; -// DomainVO immediateChild = null; -// while(true){ -// //find immediate child domain -// immediateChild = _domainDao.findImmediateChildForParent(localParent.getId()); -// if(immediateChild != null){ -// dcs.addAll(_dcDao.findZonesByDomainId(immediateChild.getId())); -// localParent = immediateChild;//traverse down the list -// }else{ -// break; -// } -// } - //find all children for this domain based on a like search by path - List allChildDomains = _domainDao.findAllChildren(domainRecord.getPath()); + List allChildDomains = _domainDao.findAllChildren(domainRecord.getPath(), domainRecord.getId()); List allChildDomainIds = new ArrayList(); //create list of domainIds for search for(DomainVO domain : allChildDomains){ @@ -3422,13 +3409,18 @@ public class ManagementServerImpl implements ManagementServer { public List searchForDomains(ListDomainsCmd cmd) throws PermissionDeniedException { Long domainId = cmd.getId(); Account account = UserContext.current().getAccount(); + + if(account == null || account.getType() == Account.ACCOUNT_TYPE_ADMIN){ + return _domainDao.listAll(); + } + 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(); + }else { + domainId = account.getDomainId(); } } @@ -3464,7 +3456,7 @@ public class ManagementServerImpl implements ManagementServer { sc.setParameters("id", domainId); } - return _domainDao.search(sc, searchFilter); + return _domainDao.search(sc, searchFilter); } @Override @@ -3485,7 +3477,13 @@ public class ManagementServerImpl implements ManagementServer { } } - SearchCriteria sc = _domainDao.createSearchCriteria(); + return searchForDomainChildren(searchFilter, domainId, domainName, + keyword); + } + + private List searchForDomainChildren(Filter searchFilter, + Long domainId, String domainName, Object keyword) { + SearchCriteria sc = _domainDao.createSearchCriteria(); if (keyword != null) { SearchCriteria ssc = _domainDao.createSearchCriteria();