mirror of https://github.com/apache/cloudstack.git
refactor tags
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
parent
e2aac4110b
commit
e5fd64b835
|
|
@ -63,8 +63,12 @@ public interface ResourceTagDao extends GenericDao<ResourceTagVO, Long> {
|
|||
|
||||
List<? extends ResourceTag> listByResourceUuid(String resourceUuid);
|
||||
|
||||
List<ResourceTagVO> listByResourceTypeKeyAndOwners(ResourceObjectType resourceType, String key,
|
||||
List<Long> accountIds, List<Long> domainIds, Filter filter);
|
||||
List<String> listByResourceTypeKeyPrefixAndOwners(ResourceObjectType resourceType, String key,
|
||||
List<Long> accountIds, List<Long> domainIds,
|
||||
Filter filter);
|
||||
|
||||
ResourceTagVO findByResourceTypeKeyPrefixAndValue(ResourceObjectType resourceType, String key, String value);
|
||||
|
||||
List<ResourceTagVO> listByResourceTypeIdAndKeyPrefix(ResourceObjectType resourceType, long resourceId, String key);
|
||||
|
||||
ResourceTagVO findByResourceTypeKeyAndValue(ResourceObjectType resourceType, String key, String value);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import com.cloud.server.ResourceTag.ResourceObjectType;
|
|||
import com.cloud.tags.ResourceTagVO;
|
||||
import com.cloud.utils.db.Filter;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.GenericSearchBuilder;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.SearchCriteria.Op;
|
||||
|
|
@ -124,12 +125,13 @@ public class ResourceTagsDaoImpl extends GenericDaoBase<ResourceTagVO, Long> imp
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<ResourceTagVO> listByResourceTypeKeyAndOwners(ResourceObjectType resourceType, String key,
|
||||
List<Long> accountIds, List<Long> domainIds,
|
||||
Filter filter) {
|
||||
SearchBuilder<ResourceTagVO> sb = createSearchBuilder();
|
||||
public List<String> listByResourceTypeKeyPrefixAndOwners(ResourceObjectType resourceType, String key,
|
||||
List<Long> accountIds, List<Long> domainIds,
|
||||
Filter filter) {
|
||||
GenericSearchBuilder<ResourceTagVO, String> sb = createSearchBuilder(String.class);
|
||||
sb.select(null, SearchCriteria.Func.DISTINCT, sb.entity().getValue());
|
||||
sb.and("resourceType", sb.entity().getResourceType(), Op.EQ);
|
||||
sb.and("key", sb.entity().getKey(), Op.EQ);
|
||||
sb.and("key", sb.entity().getKey(), Op.LIKE);
|
||||
boolean accountIdsNotEmpty = CollectionUtils.isNotEmpty(accountIds);
|
||||
boolean domainIdsNotEmpty = CollectionUtils.isNotEmpty(domainIds);
|
||||
if (accountIdsNotEmpty || domainIdsNotEmpty) {
|
||||
|
|
@ -138,30 +140,45 @@ public class ResourceTagsDaoImpl extends GenericDaoBase<ResourceTagVO, Long> imp
|
|||
sb.cp();
|
||||
}
|
||||
sb.done();
|
||||
final SearchCriteria<ResourceTagVO> sc = sb.create();
|
||||
final SearchCriteria<String> sc = sb.create();
|
||||
sc.setParameters("resourceType", resourceType);
|
||||
sc.setParameters("key", key);
|
||||
sc.setParameters("key", key + "%");
|
||||
if (accountIdsNotEmpty) {
|
||||
sc.setParameters("account", accountIds.toArray());
|
||||
}
|
||||
if (domainIdsNotEmpty) {
|
||||
sc.setParameters("domain", domainIds.toArray());
|
||||
}
|
||||
return listBy(sc, filter);
|
||||
return customSearch(sc, filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceTagVO findByResourceTypeKeyAndValue(ResourceObjectType resourceType, String key,
|
||||
public ResourceTagVO findByResourceTypeKeyPrefixAndValue(ResourceObjectType resourceType, String key,
|
||||
String value) {
|
||||
SearchBuilder<ResourceTagVO> sb = createSearchBuilder();
|
||||
sb.and("resourceType", sb.entity().getResourceType(), Op.EQ);
|
||||
sb.and("key", sb.entity().getKey(), Op.EQ);
|
||||
sb.and("key", sb.entity().getKey(), Op.LIKE);
|
||||
sb.and("value", sb.entity().getValue(), Op.EQ);
|
||||
sb.done();
|
||||
final SearchCriteria<ResourceTagVO> sc = sb.create();
|
||||
sc.setParameters("resourceType", resourceType);
|
||||
sc.setParameters("key", key);
|
||||
sc.setParameters("key", key + "%");
|
||||
sc.setParameters("value", value);
|
||||
return findOneBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ResourceTagVO> listByResourceTypeIdAndKeyPrefix(ResourceObjectType resourceType, long resourceId,
|
||||
String key) {
|
||||
SearchBuilder<ResourceTagVO> sb = createSearchBuilder();
|
||||
sb.and("resourceType", sb.entity().getResourceType(), Op.EQ);
|
||||
sb.and("resourceId", sb.entity().getResourceId(), Op.EQ);
|
||||
sb.and("key", sb.entity().getKey(), Op.LIKE);
|
||||
sb.done();
|
||||
final SearchCriteria<ResourceTagVO> sc = sb.create();
|
||||
sc.setParameters("resourceType", resourceType);
|
||||
sc.setParameters("resourceId", resourceId);
|
||||
sc.setParameters("key", key + "%");
|
||||
return listBy(sc);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1186,14 +1186,8 @@ public class ServerAdapter extends ManagerBase {
|
|||
|
||||
@ApiAccess(command = ListTagsCmd.class)
|
||||
protected List<Tag> listTagsByInstanceId(final long instanceId) {
|
||||
ResourceTag vmResourceTag = resourceTagDao.findByKey(instanceId,
|
||||
ResourceTag.ResourceObjectType.UserVm, VM_TA_KEY);
|
||||
List<ResourceTagVO> tags = new ArrayList<>();
|
||||
if (vmResourceTag instanceof ResourceTagVO) {
|
||||
tags.add((ResourceTagVO)vmResourceTag);
|
||||
} else {
|
||||
tags.add(resourceTagDao.findById(vmResourceTag.getId()));
|
||||
}
|
||||
List<ResourceTagVO> tags = resourceTagDao.listByResourceTypeIdAndKeyPrefix(
|
||||
ResourceTag.ResourceObjectType.UserVm, instanceId, VM_TA_KEY);
|
||||
return ResourceTagVOToTagConverter.toTags(tags);
|
||||
}
|
||||
|
||||
|
|
@ -1759,10 +1753,10 @@ public class ServerAdapter extends ManagerBase {
|
|||
List<Tag> tags = new ArrayList<>(getDummyTags().values());
|
||||
Filter filter = new Filter(ResourceTagVO.class, "id", true, offset, limit);
|
||||
Pair<List<Long>, List<Long>> ownerDetails = getResourceOwnerFiltersWithDomainIds();
|
||||
List<ResourceTagVO> vmResourceTags = resourceTagDao.listByResourceTypeKeyAndOwners(
|
||||
List<String> vmResourceTags = resourceTagDao.listByResourceTypeKeyPrefixAndOwners(
|
||||
ResourceTag.ResourceObjectType.UserVm, VM_TA_KEY, ownerDetails.first(), ownerDetails.second(), filter);
|
||||
if (CollectionUtils.isNotEmpty(vmResourceTags)) {
|
||||
tags.addAll(ResourceTagVOToTagConverter.toTags(vmResourceTags));
|
||||
tags.addAll(ResourceTagVOToTagConverter.toTagsFromValues(vmResourceTags));
|
||||
}
|
||||
return tags;
|
||||
}
|
||||
|
|
@ -1774,7 +1768,7 @@ public class ServerAdapter extends ManagerBase {
|
|||
}
|
||||
Tag tag = getDummyTags().get(uuid);
|
||||
if (tag == null) {
|
||||
ResourceTagVO resourceTagVO = resourceTagDao.findByResourceTypeKeyAndValue(
|
||||
ResourceTagVO resourceTagVO = resourceTagDao.findByResourceTypeKeyPrefixAndValue(
|
||||
ResourceTag.ResourceObjectType.UserVm, VM_TA_KEY, uuid);
|
||||
accountService.checkAccess(CallContext.current().getCallingAccount(), null, false,
|
||||
resourceTagVO);
|
||||
|
|
|
|||
|
|
@ -61,7 +61,22 @@ public class ResourceTagVOToTagConverter {
|
|||
return tag;
|
||||
}
|
||||
|
||||
public static Tag toTag(String id) {
|
||||
String basePath = VeeamControlService.ContextPath.value();
|
||||
Tag tag = new Tag();
|
||||
tag.setId(id);
|
||||
tag.setName(id);
|
||||
tag.setDescription(String.format("Tag: %s", id));
|
||||
tag.setHref(basePath + TagsRouteHandler.BASE_ROUTE + "/" + id);
|
||||
tag.setParent(getRootTagRef());
|
||||
return tag;
|
||||
}
|
||||
|
||||
public static List<Tag> toTags(List<ResourceTagVO> vos) {
|
||||
return vos.stream().map(ResourceTagVOToTagConverter::toTag).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static List<Tag> toTagsFromValues(List<String> values) {
|
||||
return values.stream().map(ResourceTagVOToTagConverter::toTag).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue