diff --git a/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDao.java b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDao.java index b377e6c502a..f905ab98dd5 100644 --- a/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDao.java +++ b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDao.java @@ -16,10 +16,14 @@ // under the License. package com.cloud.service.dao; +import java.util.List; + import org.apache.cloudstack.resourcedetail.ResourceDetailsDao; import com.cloud.service.ServiceOfferingDetailsVO; import com.cloud.utils.db.GenericDao; public interface ServiceOfferingDetailsDao extends GenericDao, ResourceDetailsDao { + List findDomainIds(final long resourceId); + List findZoneIds(final long resourceId); } \ No newline at end of file diff --git a/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java index fa64389d7ec..66081e17198 100644 --- a/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java @@ -17,9 +17,12 @@ package com.cloud.service.dao; -import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.List; +import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.resourcedetail.ResourceDetailsDaoBase; +import org.springframework.stereotype.Component; import com.cloud.service.ServiceOfferingDetailsVO; @@ -31,4 +34,28 @@ public class ServiceOfferingDetailsDaoImpl extends ResourceDetailsDaoBase findDomainIds(long resourceId) { + final List domainIds = new ArrayList<>(); + for (final ServiceOfferingDetailsVO detail: findDetails(resourceId, ApiConstants.DOMAIN_ID)) { + final Long domainId = Long.valueOf(detail.getValue(), -1); + if (domainId != -1) { + domainIds.add(domainId); + } + } + return domainIds; + } + + @Override + public List findZoneIds(long resourceId) { + final List zoneIds = new ArrayList<>(); + for (final ServiceOfferingDetailsVO detail: findDetails(resourceId, ApiConstants.ZONE_ID)) { + final Long zoneId = Long.valueOf(detail.getValue(), -1); + if (zoneId != -1) { + zoneIds.add(zoneId); + } + } + return zoneIds; + } + } diff --git a/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java index 15da1be9ec1..df6018ccfe1 100644 --- a/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java @@ -16,7 +16,6 @@ // under the License. package com.cloud.storage.dao; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -151,26 +150,4 @@ public class DiskOfferingDaoImpl extends GenericDaoBase im return update(id, diskOffering); } - - private List filterOfferingsForDomain(final List offerings, Long domainId) { - List filteredOfferings = null; - if (offerings != null && !offerings.isEmpty() && domainId != null) { - filteredOfferings = new ArrayList<>(offerings); - for (int i = filteredOfferings.size() - 1; i >= 0; i--) { - DiskOfferingVO offering = offerings.get(i); - Map offeringDetails = detailsDao.listDetailsKeyPairs(offering.getId()); - if (!Strings.isNullOrEmpty(offeringDetails.get(ApiConstants.DOMAIN_ID_LIST))) { - String[] domainIdsArray = offeringDetails.get(ApiConstants.DOMAIN_ID_LIST).split(","); - List domainIds = new ArrayList<>(); - for (String dIdStr : domainIdsArray) { - domainIds.add(Long.valueOf(dIdStr.trim())); - } - if (!domainIds.contains(domainId)) { - filteredOfferings.remove(i); - } - } - } - } - return filteredOfferings; - } } diff --git a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDao.java index 68a8614c93b..e201ae27fdc 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDao.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDao.java @@ -16,11 +16,14 @@ // under the License. package org.apache.cloudstack.resourcedetail.dao; +import java.util.List; + import org.apache.cloudstack.resourcedetail.DiskOfferingDetailVO; import org.apache.cloudstack.resourcedetail.ResourceDetailsDao; import com.cloud.utils.db.GenericDao; public interface DiskOfferingDetailsDao extends GenericDao, ResourceDetailsDao { - + List findDomainIds(final long resourceId); + List findZoneIds(final long resourceId); } \ No newline at end of file diff --git a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDaoImpl.java index f13cc7bf8d8..e0fb6592a8d 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDaoImpl.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDaoImpl.java @@ -17,6 +17,10 @@ package org.apache.cloudstack.resourcedetail.dao; +import java.util.ArrayList; +import java.util.List; + +import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.resourcedetail.DiskOfferingDetailVO; import org.apache.cloudstack.resourcedetail.ResourceDetailsDaoBase; import org.springframework.stereotype.Component; @@ -28,4 +32,28 @@ public class DiskOfferingDetailsDaoImpl extends ResourceDetailsDaoBase findDomainIds(long resourceId) { + final List domainIds = new ArrayList<>(); + for (final DiskOfferingDetailVO detail: findDetails(resourceId, ApiConstants.DOMAIN_ID)) { + final Long domainId = Long.valueOf(detail.getValue(), -1); + if (domainId != -1) { + domainIds.add(domainId); + } + } + return domainIds; + } + + @Override + public List findZoneIds(long resourceId) { + final List zoneIds = new ArrayList<>(); + for (final DiskOfferingDetailVO detail: findDetails(resourceId, ApiConstants.ZONE_ID)) { + final Long zoneId = Long.valueOf(detail.getValue(), -1); + if (zoneId != -1) { + zoneIds.add(zoneId); + } + } + return zoneIds; + } } \ No newline at end of file diff --git a/server/src/main/java/com/cloud/acl/DomainChecker.java b/server/src/main/java/com/cloud/acl/DomainChecker.java index 531c033eb39..74092bdde69 100644 --- a/server/src/main/java/com/cloud/acl/DomainChecker.java +++ b/server/src/main/java/com/cloud/acl/DomainChecker.java @@ -16,7 +16,6 @@ // under the License. package com.cloud.acl; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -42,7 +41,6 @@ import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; import com.cloud.projects.ProjectManager; import com.cloud.projects.dao.ProjectAccountDao; -import com.cloud.service.ServiceOfferingDetailsVO; import com.cloud.service.dao.ServiceOfferingDetailsDao; import com.cloud.storage.LaunchPermissionVO; import com.cloud.storage.dao.LaunchPermissionDao; @@ -227,10 +225,7 @@ public class DomainChecker extends AdapterBase implements SecurityChecker { @Override public boolean checkAccess(Account account, ServiceOffering so) throws PermissionDeniedException { - final List soDomainIds = new ArrayList<>(); - for (final ServiceOfferingDetailsVO detail: serviceOfferingDetailsDao.findDetails(so.getId(), ApiConstants.DOMAIN_ID)) { - soDomainIds.add(Long.valueOf(detail.getValue())); - } + final List soDomainIds = serviceOfferingDetailsDao.findDomainIds(so.getId()); if (account == null || soDomainIds.isEmpty()) { //public offering return true; } else {