Skip to content

Commit e5fd64b

Browse files
committed
refactor tags
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent e2aac41 commit e5fd64b

File tree

4 files changed

+55
-25
lines changed

4 files changed

+55
-25
lines changed

engine/schema/src/main/java/com/cloud/tags/dao/ResourceTagDao.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,12 @@ public interface ResourceTagDao extends GenericDao<ResourceTagVO, Long> {
6363

6464
List<? extends ResourceTag> listByResourceUuid(String resourceUuid);
6565

66-
List<ResourceTagVO> listByResourceTypeKeyAndOwners(ResourceObjectType resourceType, String key,
67-
List<Long> accountIds, List<Long> domainIds, Filter filter);
66+
List<String> listByResourceTypeKeyPrefixAndOwners(ResourceObjectType resourceType, String key,
67+
List<Long> accountIds, List<Long> domainIds,
68+
Filter filter);
69+
70+
ResourceTagVO findByResourceTypeKeyPrefixAndValue(ResourceObjectType resourceType, String key, String value);
71+
72+
List<ResourceTagVO> listByResourceTypeIdAndKeyPrefix(ResourceObjectType resourceType, long resourceId, String key);
6873

69-
ResourceTagVO findByResourceTypeKeyAndValue(ResourceObjectType resourceType, String key, String value);
7074
}

engine/schema/src/main/java/com/cloud/tags/dao/ResourceTagsDaoImpl.java

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.cloud.tags.ResourceTagVO;
3232
import com.cloud.utils.db.Filter;
3333
import com.cloud.utils.db.GenericDaoBase;
34+
import com.cloud.utils.db.GenericSearchBuilder;
3435
import com.cloud.utils.db.SearchBuilder;
3536
import com.cloud.utils.db.SearchCriteria;
3637
import com.cloud.utils.db.SearchCriteria.Op;
@@ -124,12 +125,13 @@ public List<? extends ResourceTag> listByResourceUuid(String resourceUuid) {
124125
}
125126

126127
@Override
127-
public List<ResourceTagVO> listByResourceTypeKeyAndOwners(ResourceObjectType resourceType, String key,
128-
List<Long> accountIds, List<Long> domainIds,
129-
Filter filter) {
130-
SearchBuilder<ResourceTagVO> sb = createSearchBuilder();
128+
public List<String> listByResourceTypeKeyPrefixAndOwners(ResourceObjectType resourceType, String key,
129+
List<Long> accountIds, List<Long> domainIds,
130+
Filter filter) {
131+
GenericSearchBuilder<ResourceTagVO, String> sb = createSearchBuilder(String.class);
132+
sb.select(null, SearchCriteria.Func.DISTINCT, sb.entity().getValue());
131133
sb.and("resourceType", sb.entity().getResourceType(), Op.EQ);
132-
sb.and("key", sb.entity().getKey(), Op.EQ);
134+
sb.and("key", sb.entity().getKey(), Op.LIKE);
133135
boolean accountIdsNotEmpty = CollectionUtils.isNotEmpty(accountIds);
134136
boolean domainIdsNotEmpty = CollectionUtils.isNotEmpty(domainIds);
135137
if (accountIdsNotEmpty || domainIdsNotEmpty) {
@@ -138,30 +140,45 @@ public List<ResourceTagVO> listByResourceTypeKeyAndOwners(ResourceObjectType res
138140
sb.cp();
139141
}
140142
sb.done();
141-
final SearchCriteria<ResourceTagVO> sc = sb.create();
143+
final SearchCriteria<String> sc = sb.create();
142144
sc.setParameters("resourceType", resourceType);
143-
sc.setParameters("key", key);
145+
sc.setParameters("key", key + "%");
144146
if (accountIdsNotEmpty) {
145147
sc.setParameters("account", accountIds.toArray());
146148
}
147149
if (domainIdsNotEmpty) {
148150
sc.setParameters("domain", domainIds.toArray());
149151
}
150-
return listBy(sc, filter);
152+
return customSearch(sc, filter);
151153
}
152154

153155
@Override
154-
public ResourceTagVO findByResourceTypeKeyAndValue(ResourceObjectType resourceType, String key,
156+
public ResourceTagVO findByResourceTypeKeyPrefixAndValue(ResourceObjectType resourceType, String key,
155157
String value) {
156158
SearchBuilder<ResourceTagVO> sb = createSearchBuilder();
157159
sb.and("resourceType", sb.entity().getResourceType(), Op.EQ);
158-
sb.and("key", sb.entity().getKey(), Op.EQ);
160+
sb.and("key", sb.entity().getKey(), Op.LIKE);
159161
sb.and("value", sb.entity().getValue(), Op.EQ);
160162
sb.done();
161163
final SearchCriteria<ResourceTagVO> sc = sb.create();
162164
sc.setParameters("resourceType", resourceType);
163-
sc.setParameters("key", key);
165+
sc.setParameters("key", key + "%");
164166
sc.setParameters("value", value);
165167
return findOneBy(sc);
166168
}
169+
170+
@Override
171+
public List<ResourceTagVO> listByResourceTypeIdAndKeyPrefix(ResourceObjectType resourceType, long resourceId,
172+
String key) {
173+
SearchBuilder<ResourceTagVO> sb = createSearchBuilder();
174+
sb.and("resourceType", sb.entity().getResourceType(), Op.EQ);
175+
sb.and("resourceId", sb.entity().getResourceId(), Op.EQ);
176+
sb.and("key", sb.entity().getKey(), Op.LIKE);
177+
sb.done();
178+
final SearchCriteria<ResourceTagVO> sc = sb.create();
179+
sc.setParameters("resourceType", resourceType);
180+
sc.setParameters("resourceId", resourceId);
181+
sc.setParameters("key", key + "%");
182+
return listBy(sc);
183+
}
167184
}

plugins/integrations/veeam-control-service/src/main/java/org/apache/cloudstack/veeam/adapter/ServerAdapter.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1186,14 +1186,8 @@ public VmAction shutdownInstance(String uuid, boolean async) {
11861186

11871187
@ApiAccess(command = ListTagsCmd.class)
11881188
protected List<Tag> listTagsByInstanceId(final long instanceId) {
1189-
ResourceTag vmResourceTag = resourceTagDao.findByKey(instanceId,
1190-
ResourceTag.ResourceObjectType.UserVm, VM_TA_KEY);
1191-
List<ResourceTagVO> tags = new ArrayList<>();
1192-
if (vmResourceTag instanceof ResourceTagVO) {
1193-
tags.add((ResourceTagVO)vmResourceTag);
1194-
} else {
1195-
tags.add(resourceTagDao.findById(vmResourceTag.getId()));
1196-
}
1189+
List<ResourceTagVO> tags = resourceTagDao.listByResourceTypeIdAndKeyPrefix(
1190+
ResourceTag.ResourceObjectType.UserVm, instanceId, VM_TA_KEY);
11971191
return ResourceTagVOToTagConverter.toTags(tags);
11981192
}
11991193

@@ -1759,10 +1753,10 @@ public List<Tag> listAllTags(final Long offset, final Long limit) {
17591753
List<Tag> tags = new ArrayList<>(getDummyTags().values());
17601754
Filter filter = new Filter(ResourceTagVO.class, "id", true, offset, limit);
17611755
Pair<List<Long>, List<Long>> ownerDetails = getResourceOwnerFiltersWithDomainIds();
1762-
List<ResourceTagVO> vmResourceTags = resourceTagDao.listByResourceTypeKeyAndOwners(
1756+
List<String> vmResourceTags = resourceTagDao.listByResourceTypeKeyPrefixAndOwners(
17631757
ResourceTag.ResourceObjectType.UserVm, VM_TA_KEY, ownerDetails.first(), ownerDetails.second(), filter);
17641758
if (CollectionUtils.isNotEmpty(vmResourceTags)) {
1765-
tags.addAll(ResourceTagVOToTagConverter.toTags(vmResourceTags));
1759+
tags.addAll(ResourceTagVOToTagConverter.toTagsFromValues(vmResourceTags));
17661760
}
17671761
return tags;
17681762
}
@@ -1774,7 +1768,7 @@ public Tag getTag(String uuid) {
17741768
}
17751769
Tag tag = getDummyTags().get(uuid);
17761770
if (tag == null) {
1777-
ResourceTagVO resourceTagVO = resourceTagDao.findByResourceTypeKeyAndValue(
1771+
ResourceTagVO resourceTagVO = resourceTagDao.findByResourceTypeKeyPrefixAndValue(
17781772
ResourceTag.ResourceObjectType.UserVm, VM_TA_KEY, uuid);
17791773
accountService.checkAccess(CallContext.current().getCallingAccount(), null, false,
17801774
resourceTagVO);

plugins/integrations/veeam-control-service/src/main/java/org/apache/cloudstack/veeam/api/converter/ResourceTagVOToTagConverter.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,22 @@ public static Tag toTag(ResourceTagVO vo) {
6161
return tag;
6262
}
6363

64+
public static Tag toTag(String id) {
65+
String basePath = VeeamControlService.ContextPath.value();
66+
Tag tag = new Tag();
67+
tag.setId(id);
68+
tag.setName(id);
69+
tag.setDescription(String.format("Tag: %s", id));
70+
tag.setHref(basePath + TagsRouteHandler.BASE_ROUTE + "/" + id);
71+
tag.setParent(getRootTagRef());
72+
return tag;
73+
}
74+
6475
public static List<Tag> toTags(List<ResourceTagVO> vos) {
6576
return vos.stream().map(ResourceTagVOToTagConverter::toTag).collect(Collectors.toList());
6677
}
78+
79+
public static List<Tag> toTagsFromValues(List<String> values) {
80+
return values.stream().map(ResourceTagVOToTagConverter::toTag).collect(Collectors.toList());
81+
}
6782
}

0 commit comments

Comments
 (0)