From 67beda5244cabbd49571ef4388da128b3221dc4a Mon Sep 17 00:00:00 2001 From: abhishek Date: Mon, 8 Nov 2010 10:07:54 -0800 Subject: [PATCH] adding the logic to list and search zones and domains based on the user (normal,admin,domain admin) --- core/src/com/cloud/dc/dao/DataCenterDao.java | 2 ++ .../com/cloud/dc/dao/DataCenterDaoImpl.java | 14 +++++++- core/src/com/cloud/domain/dao/DomainDao.java | 5 ++- .../com/cloud/domain/dao/DomainDaoImpl.java | 14 +++++++- .../ConfigurationManagerImpl.java | 4 +++ .../cloud/server/ManagementServerImpl.java | 33 ++++++++++++------- 6 files changed, 58 insertions(+), 14 deletions(-) diff --git a/core/src/com/cloud/dc/dao/DataCenterDao.java b/core/src/com/cloud/dc/dao/DataCenterDao.java index f55c2229760..1c64f333a45 100644 --- a/core/src/com/cloud/dc/dao/DataCenterDao.java +++ b/core/src/com/cloud/dc/dao/DataCenterDao.java @@ -62,4 +62,6 @@ public interface DataCenterDao extends GenericDao { List findZonesByDomainId(Long domainId); List listPublicZones(); + + List findChildZones(Object[] ids); } diff --git a/core/src/com/cloud/dc/dao/DataCenterDaoImpl.java b/core/src/com/cloud/dc/dao/DataCenterDaoImpl.java index 65f73b757a3..1374f81b0b0 100644 --- a/core/src/com/cloud/dc/dao/DataCenterDaoImpl.java +++ b/core/src/com/cloud/dc/dao/DataCenterDaoImpl.java @@ -54,7 +54,8 @@ public class DataCenterDaoImpl extends GenericDaoBase implem protected SearchBuilder NameSearch; protected SearchBuilder ListZonesByDomainIdSearch; - protected SearchBuilder PublicZonesSearch; + protected SearchBuilder PublicZonesSearch; + protected SearchBuilder ChildZonesSearch; protected static final DataCenterIpAddressDaoImpl _ipAllocDao = ComponentLocator.inject(DataCenterIpAddressDaoImpl.class); protected static final DataCenterLinkLocalIpAddressDaoImpl _LinkLocalIpAllocDao = ComponentLocator.inject(DataCenterLinkLocalIpAddressDaoImpl.class); @@ -78,6 +79,13 @@ public class DataCenterDaoImpl extends GenericDaoBase implem return listBy(sc); } + @Override + public List findChildZones(Object[] ids){ + SearchCriteria sc = ChildZonesSearch.create(); + sc.setParameters("domainid", ids); + return listBy(sc); + } + @Override public List listPublicZones(){ SearchCriteria sc = PublicZonesSearch.create(); @@ -239,6 +247,10 @@ public class DataCenterDaoImpl extends GenericDaoBase implem PublicZonesSearch.and("domainId", PublicZonesSearch.entity().getDomainId(), SearchCriteria.Op.NULL); PublicZonesSearch.done(); + ChildZonesSearch = createSearchBuilder(); + ChildZonesSearch.and("domainid", ChildZonesSearch.entity().getDomainId(), SearchCriteria.Op.IN); + ChildZonesSearch.done(); + _tgMacAddress = _tgs.get("macAddress"); assert _tgMacAddress != null : "Couldn't get mac address table generator"; } diff --git a/core/src/com/cloud/domain/dao/DomainDao.java b/core/src/com/cloud/domain/dao/DomainDao.java index 8671655d0f4..70e9a3c2f2a 100644 --- a/core/src/com/cloud/domain/dao/DomainDao.java +++ b/core/src/com/cloud/domain/dao/DomainDao.java @@ -18,6 +18,8 @@ package com.cloud.domain.dao; +import java.util.List; + import com.cloud.domain.DomainVO; import com.cloud.utils.db.GenericDao; @@ -26,5 +28,6 @@ public interface DomainDao extends GenericDao { public DomainVO create(DomainVO domain); public DomainVO findDomainByPath(String domainPath); public boolean isChildDomain(Long parentId, Long childId); - DomainVO findImmediateChildForParent(Long parentId); + DomainVO findImmediateChildForParent(Long parentId); + List findAllChildren(String path); } diff --git a/core/src/com/cloud/domain/dao/DomainDaoImpl.java b/core/src/com/cloud/domain/dao/DomainDaoImpl.java index 7c7e33682b8..8d144242f3f 100644 --- a/core/src/com/cloud/domain/dao/DomainDaoImpl.java +++ b/core/src/com/cloud/domain/dao/DomainDaoImpl.java @@ -42,6 +42,7 @@ public class DomainDaoImpl extends GenericDaoBase implements Dom protected SearchBuilder ParentDomainNameLikeSearch; protected SearchBuilder DomainPairSearch; protected SearchBuilder ImmediateChildDomainSearch; + protected SearchBuilder FindAllChildrenSearch; public DomainDaoImpl () { DomainNameLikeSearch = createSearchBuilder(); @@ -59,7 +60,11 @@ public class DomainDaoImpl extends GenericDaoBase implements Dom ImmediateChildDomainSearch = createSearchBuilder(); ImmediateChildDomainSearch.and("parent", ImmediateChildDomainSearch.entity().getParent(), SearchCriteria.Op.EQ); - ImmediateChildDomainSearch.done(); + ImmediateChildDomainSearch.done(); + + FindAllChildrenSearch = createSearchBuilder(); + FindAllChildrenSearch.and("path", FindAllChildrenSearch.entity().getPath(), SearchCriteria.Op.LIKE); + FindAllChildrenSearch.done(); } public void update(Long id, String domainName) { @@ -203,6 +208,13 @@ public class DomainDaoImpl extends GenericDaoBase implements Dom return (listBy(sc).size() > 0 ? listBy(sc).get(0) : null);//may need to revisit for multiple children case } + @Override + public List findAllChildren(String path){ + SearchCriteria sc = FindAllChildrenSearch.create(); + sc.setParameters("path", path); + return listBy(sc); + } + @Override public boolean isChildDomain(Long parentId, Long childId) { if ((parentId == null) || (childId == null)) { diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index f0664902f38..ad9fad5adb0 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -1209,6 +1209,10 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura String tags = cmd.getTags(); Long domainId = Long.valueOf(DomainVO.ROOT_DOMAIN); // disk offering always gets created under the root domain.Bug # 6055 + if(!isCustomized && numGibibytes == null){ + throw new InvalidParameterValueException("Disksize is required for non-customized disk offering"); + } + return createDiskOffering(domainId, name, description, numGibibytes, tags, isCustomized); } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 23dca680781..3e44518d2ea 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -1369,18 +1369,29 @@ 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; - } +// 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 allChildDomainIds = new ArrayList(); + //create list of domainIds for search + for(DomainVO domain : allChildDomains){ + allChildDomainIds.add(domain.getId()); } + //now make a search for zones based on this + List childZones = _dcDao.findChildZones((allChildDomainIds.toArray())); + dcs.addAll(childZones); } //add all public zones too dcs.addAll(_dcDao.listPublicZones());