Skip to content

Commit b8661ee

Browse files
committed
Refactor
1 parent bd87ce5 commit b8661ee

5 files changed

Lines changed: 51 additions & 78 deletions

File tree

engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@
2626
import org.springframework.stereotype.Component;
2727

2828
import com.cloud.service.ServiceOfferingDetailsVO;
29-
import com.cloud.utils.db.GenericSearchBuilder;
30-
import com.cloud.utils.db.SearchCriteria;
31-
import com.cloud.utils.db.SearchCriteria.Op;
3229

3330
@Component
3431
public class ServiceOfferingDetailsDaoImpl extends ResourceDetailsDaoBase<ServiceOfferingDetailsVO> implements ServiceOfferingDetailsDao {
@@ -75,19 +72,6 @@ public String getDetail(Long serviceOfferingId, String key) {
7572
@Override
7673
public List<Long> findOfferingIdsByDomainIds(List<Long> domainIds) {
7774
Object[] dIds = domainIds.stream().map(s -> String.valueOf(s)).collect(Collectors.toList()).toArray();
78-
79-
GenericSearchBuilder<ServiceOfferingDetailsVO, Long> sb = createSearchBuilder(Long.class);
80-
sb.selectFields(sb.entity().getResourceId());
81-
sb.and("name", sb.entity().getName(), Op.EQ);
82-
sb.and().op("value", sb.entity().getValue(), Op.IN);
83-
sb.or("valueNull", sb.entity().getValue(), Op.NULL);
84-
sb.cp();
85-
sb.done();
86-
87-
SearchCriteria<Long> sc = sb.create();
88-
sc.setParameters("name", "domainid");
89-
sc.setParameters("value", dIds);
90-
91-
return customSearch(sc, null);
75+
return findResouceIdsByNameInAndValueIn(new Object[]{"domainid"}, dIds);
9276
}
9377
}

engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,5 @@ public interface ResourceDetailsDao<R extends ResourceDetail> extends GenericDao
9696

9797
public void addDetail(long resourceId, String key, String value, boolean display);
9898

99+
public List<Long> findResouceIdsByNameInAndValueIn(Object[] names, Object[] values);
99100
}

engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@
2323
import org.apache.cloudstack.api.ResourceDetail;
2424

2525
import com.cloud.utils.db.GenericDaoBase;
26+
import com.cloud.utils.db.GenericSearchBuilder;
2627
import com.cloud.utils.db.SearchBuilder;
2728
import com.cloud.utils.db.SearchCriteria;
2829
import com.cloud.utils.db.TransactionLegacy;
30+
import com.cloud.utils.db.SearchCriteria.Op;
2931

3032
public abstract class ResourceDetailsDaoBase<R extends ResourceDetail> extends GenericDaoBase<R, Long> implements ResourceDetailsDao<R> {
3133
private SearchBuilder<R> AllFieldsSearch;
@@ -182,4 +184,21 @@ public List<R> listDetails(long resourceId, boolean forDisplay) {
182184
List<R> results = search(sc, null);
183185
return results;
184186
}
187+
188+
@Override
189+
public List<Long> findResouceIdsByNameInAndValueIn(Object[] names, Object[] values) {
190+
GenericSearchBuilder<R, Long> sb = createSearchBuilder(Long.class);
191+
sb.selectFields(sb.entity().getResourceId());
192+
sb.and("name", sb.entity().getName(), Op.IN);
193+
sb.and().op("value", sb.entity().getValue(), Op.IN);
194+
sb.or("valueNull", sb.entity().getValue(), Op.NULL);
195+
sb.cp();
196+
sb.done();
197+
198+
SearchCriteria<Long> sc = sb.create();
199+
sc.setParameters("name", names);
200+
sc.setParameters("value", values);
201+
202+
return customSearch(sc, null);
203+
}
185204
}

engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDaoImpl.java

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@
2121
import java.util.List;
2222
import java.util.stream.Collectors;
2323

24-
import com.cloud.utils.db.GenericSearchBuilder;
25-
import com.cloud.utils.db.SearchCriteria;
26-
import com.cloud.utils.db.SearchCriteria.Op;
27-
2824
import org.apache.cloudstack.api.ApiConstants;
2925
import org.apache.cloudstack.resourcedetail.DiskOfferingDetailVO;
3026
import org.apache.cloudstack.resourcedetail.ResourceDetailsDaoBase;
@@ -75,21 +71,7 @@ public String getDetail(Long diskOfferingId, String key) {
7571
@Override
7672
public List<Long> findOfferingIdsByDomainIds(List<Long> domainIds) {
7773
Object[] dIds = domainIds.stream().map(s -> String.valueOf(s)).collect(Collectors.toList()).toArray();
78-
79-
GenericSearchBuilder<DiskOfferingDetailVO, Long> sb = createSearchBuilder(Long.class);
80-
sb.selectFields(sb.entity().getResourceId());
81-
sb.and("name", sb.entity().getName(), Op.EQ);
82-
sb.and().op("value", sb.entity().getValue(), Op.IN);
83-
sb.or("valueNull", sb.entity().getValue(), Op.NULL);
84-
sb.cp();
85-
sb.done();
86-
87-
SearchCriteria<Long> sc = sb.create();
88-
sc.setParameters("name", "domainid");
89-
sc.setParameters("value", dIds);
90-
91-
return customSearch(sc, null);
74+
return findResouceIdsByNameInAndValueIn(new Object[]{"domainid"}, dIds);
9275
}
93-
9476
}
9577

server/src/main/java/com/cloud/api/query/QueryManagerImpl.java

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2831,39 +2831,38 @@ private Pair<List<DiskOfferingJoinVO>, Integer> searchForDiskOfferingsInternal(L
28312831
Account caller = CallContext.current().getCallingAccount();
28322832
if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
28332833
Domain callerDomain = _domainDao.findById(caller.getDomainId());
2834-
List<Long> domainIds = _domainDao.getDomainParentIds(callerDomain.getId())
2835-
.stream().collect(Collectors.toList());
2836-
if (isRecursive) {
2837-
List<Long> childrenIds = _domainDao.getDomainChildrenIds(callerDomain.getPath());
2838-
if (childrenIds != null && !childrenIds.isEmpty())
2839-
domainIds.addAll(childrenIds);
2840-
}
2834+
List<Long> domainIds = findRelatedDomainIds(callerDomain, isRecursive);
28412835

28422836
List<Long> ids = _diskOfferingDetailsDao.findOfferingIdsByDomainIds(domainIds);
2843-
2844-
if (ids == null || ids.isEmpty()) {
2845-
SearchBuilder<DiskOfferingJoinVO> sb = _diskOfferingJoinDao.createSearchBuilder();
2846-
sb.or("domainId", sb.entity().getDomainId(), Op.NULL);
2847-
sb.done();
2848-
2849-
SearchCriteria<DiskOfferingJoinVO> scc = sb.create();
2850-
sc.addAnd("domainId", SearchCriteria.Op.SC, scc);
2851-
} else {
2852-
SearchBuilder<DiskOfferingJoinVO> sb = _diskOfferingJoinDao.createSearchBuilder();
2837+
SearchBuilder<DiskOfferingJoinVO> sb = _diskOfferingJoinDao.createSearchBuilder();
2838+
if (ids != null && !ids.isEmpty()) {
28532839
sb.and("id", sb.entity().getId(), Op.IN);
2854-
sb.or("domainId", sb.entity().getDomainId(), Op.NULL);
2855-
sb.done();
2840+
}
2841+
sb.or("domainId", sb.entity().getDomainId(), Op.NULL);
2842+
sb.done();
28562843

2857-
SearchCriteria<DiskOfferingJoinVO> scc = sb.create();
2844+
SearchCriteria<DiskOfferingJoinVO> scc = sb.create();
2845+
if (ids != null && !ids.isEmpty()) {
28582846
scc.setParameters("id", ids.toArray());
2859-
sc.addAnd("domainId", SearchCriteria.Op.SC, scc);
28602847
}
2848+
sc.addAnd("domainId", SearchCriteria.Op.SC, scc);
28612849
}
28622850

28632851
Pair<List<DiskOfferingJoinVO>, Integer> result = _diskOfferingJoinDao.searchAndCount(sc, searchFilter);
28642852
return new Pair<>(result.first(), result.second());
28652853
}
28662854

2855+
private List<Long> findRelatedDomainIds(Domain domain, boolean isRecursive) {
2856+
List<Long> domainIds = _domainDao.getDomainParentIds(domain.getId())
2857+
.stream().collect(Collectors.toList());
2858+
if (isRecursive) {
2859+
List<Long> childrenIds = _domainDao.getDomainChildrenIds(domain.getPath());
2860+
if (childrenIds != null && !childrenIds.isEmpty())
2861+
domainIds.addAll(childrenIds);
2862+
}
2863+
return domainIds;
2864+
}
2865+
28672866
@Override
28682867
public ListResponse<ServiceOfferingResponse> searchForServiceOfferings(ListServiceOfferingsCmd cmd) {
28692868
Pair<List<ServiceOfferingJoinVO>, Integer> result = searchForServiceOfferingsInternal(cmd);
@@ -3037,33 +3036,21 @@ private Pair<List<ServiceOfferingJoinVO>, Integer> searchForServiceOfferingsInte
30373036
// Fetch the offering ids from the details table since theres no smart way to filter them in the join ... yet!
30383037
if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
30393038
Domain callerDomain = _domainDao.findById(caller.getDomainId());
3040-
List<Long> domainIds = _domainDao.getDomainParentIds(callerDomain.getId())
3041-
.stream().collect(Collectors.toList());
3042-
if (isRecursive) {
3043-
List<Long> childrenIds = _domainDao.getDomainChildrenIds(callerDomain.getPath());
3044-
if (childrenIds != null && !childrenIds.isEmpty())
3045-
domainIds.addAll(childrenIds);
3046-
}
3039+
List<Long> domainIds = findRelatedDomainIds(callerDomain, isRecursive);
30473040

30483041
List<Long> ids = _srvOfferingDetailsDao.findOfferingIdsByDomainIds(domainIds);
3049-
3050-
if (ids == null || ids.isEmpty()) {
3051-
SearchBuilder<ServiceOfferingJoinVO> sb = _srvOfferingJoinDao.createSearchBuilder();
3052-
sb.or("domainId", sb.entity().getDomainId(), Op.NULL);
3053-
sb.done();
3054-
3055-
SearchCriteria<ServiceOfferingJoinVO> scc = sb.create();
3056-
sc.addAnd("domainId", SearchCriteria.Op.SC, scc);
3057-
} else {
3058-
SearchBuilder<ServiceOfferingJoinVO> sb = _srvOfferingJoinDao.createSearchBuilder();
3042+
SearchBuilder<ServiceOfferingJoinVO> sb = _srvOfferingJoinDao.createSearchBuilder();
3043+
if (ids != null && !ids.isEmpty()) {
30593044
sb.and("id", sb.entity().getId(), Op.IN);
3060-
sb.or("domainId", sb.entity().getDomainId(), Op.NULL);
3061-
sb.done();
3045+
}
3046+
sb.or("domainId", sb.entity().getDomainId(), Op.NULL);
3047+
sb.done();
30623048

3063-
SearchCriteria<ServiceOfferingJoinVO> scc = sb.create();
3049+
SearchCriteria<ServiceOfferingJoinVO> scc = sb.create();
3050+
if (ids != null && !ids.isEmpty()) {
30643051
scc.setParameters("id", ids.toArray());
3065-
sc.addAnd("domainId", SearchCriteria.Op.SC, scc);
30663052
}
3053+
sc.addAnd("domainId", SearchCriteria.Op.SC, scc);
30673054
}
30683055

30693056
if (currentVmOffering != null) {

0 commit comments

Comments
 (0)