Ravi Nori has uploaded a new change for review. Change subject: restapi : Add /tags sub-collection for Template resource ......................................................................
restapi : Add /tags sub-collection for Template resource Add ability to add/retrieve and delete tags for templates using rest api. Change-Id: I32e2d449f7154c50bc7511e143ed82c995a3fa4e Bug-Url: https://bugzilla.redhat.com/852086 Signed-off-by: Ravi Nori <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachTemplatesToTagCommand.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DetachTemplateFromTagCommand.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTagsByTemplateIdQuery.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TemplatesTagMapBase.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/TagsTemplateMap.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/TagsTemplateMapId.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetTagsByTemplateIdParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/TagDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/TagDAODbFacadeImpl.java M backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/LinkHelperTest.java M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/TemplateResource.java M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java M backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd M backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateTagsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendAssignedTagsResourceTest.java A backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateTagsResourceTest.java 22 files changed, 434 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/77/24577/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachTemplatesToTagCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachTemplatesToTagCommand.java new file mode 100644 index 0000000..ed4a649 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachTemplatesToTagCommand.java @@ -0,0 +1,45 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.AttachEntityToTagParameters; +import org.ovirt.engine.core.common.businessentities.TagsTemplateMap; +import org.ovirt.engine.core.common.businessentities.VmTemplate; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; + +public class AttachTemplatesToTagCommand<T extends AttachEntityToTagParameters> extends TemplatesTagMapBase<T> { + + public AttachTemplatesToTagCommand(T parameters) { + super(parameters); + } + + @Override + protected void executeCommand() { + if (getTagId() != null) { + for (Guid templateGuid : getTemplatesList()) { + VmTemplate template = DbFacade.getInstance().getVmTemplateDao().get(templateGuid); + if (DbFacade.getInstance().getTagDao().getTagTemplateByTagIdAndByTemplateId(getTagId(), templateGuid) == null) { + if (template != null) { + appendCustomValue("TemplatesNames", template.getName(), ", "); + } + TagsTemplateMap map = new TagsTemplateMap(getTagId(), templateGuid); + DbFacade.getInstance().getTagDao().attachTemplateToTag(map); + noActionDone = false; + } else { + if (template != null) { + appendCustomValue("TemplatesNamesExists", template.getName(), ", "); + } + } + } + } + setSucceeded(true); + } + + @Override + public AuditLogType getAuditLogTypeValue() { + if (noActionDone) { + return AuditLogType.USER_ATTACH_TAG_TO_TEMPLATE_EXISTS; + } + return getSucceeded() ? AuditLogType.USER_ATTACH_TAG_TO_TEMPLATE : AuditLogType.USER_ATTACH_TAG_TO_TEMPLATE_FAILED; + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DetachTemplateFromTagCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DetachTemplateFromTagCommand.java new file mode 100644 index 0000000..ee33018 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DetachTemplateFromTagCommand.java @@ -0,0 +1,34 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.AttachEntityToTagParameters; +import org.ovirt.engine.core.common.businessentities.VmTemplate; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; + +public class DetachTemplateFromTagCommand<T extends AttachEntityToTagParameters> extends TemplatesTagMapBase<T> { + + public DetachTemplateFromTagCommand(T parameters) { + super(parameters); + } + + @Override + protected void executeCommand() { + for (Guid templateGuid : getTemplatesList()) { + if (getTagId() != null + && DbFacade.getInstance().getTagDao().getTagTemplateByTagIdAndByTemplateId(getTagId(), templateGuid) != null) { + VmTemplate template = DbFacade.getInstance().getVmTemplateDao().get(templateGuid); + if (template != null) { + appendCustomValue("TemplatesNames", template.getName(), ", "); + } + DbFacade.getInstance().getTagDao().detachTemplateFromTag(getTagId(), templateGuid); + setSucceeded(true); + } + } + } + + @Override + public AuditLogType getAuditLogTypeValue() { + return getSucceeded() ? AuditLogType.USER_DETACH_TEMPLATE_FROM_TAG : AuditLogType.USER_DETACH_TEMPLATE_FROM_TAG_FAILED; + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTagsByTemplateIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTagsByTemplateIdQuery.java new file mode 100644 index 0000000..ced0f6d --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTagsByTemplateIdQuery.java @@ -0,0 +1,18 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.queries.GetTagsByTemplateIdParameters; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; + +public class GetTagsByTemplateIdQuery<P extends GetTagsByTemplateIdParameters> extends + QueriesCommandBase<P> { + public GetTagsByTemplateIdQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + getQueryReturnValue().setReturnValue( + DbFacade.getInstance().getTagDao() + .getAllForTemplate(getParameters().getTemplateId())); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TemplatesTagMapBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TemplatesTagMapBase.java new file mode 100644 index 0000000..54946fa --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TemplatesTagMapBase.java @@ -0,0 +1,15 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.action.AttachEntityToTagParameters; +import org.ovirt.engine.core.compat.Guid; + +public abstract class TemplatesTagMapBase<T extends AttachEntityToTagParameters> extends TagsCommandBase<T> { + protected java.util.ArrayList<Guid> getTemplatesList() { + return getParameters().getEntitiesId(); + } + + public TemplatesTagMapBase(T parameters) { + super(parameters); + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java index db043c9..fd41033 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java @@ -511,6 +511,11 @@ USER_ATTACH_TAG_TO_USER_GROUP_EXISTS(453), USER_ATTACH_TAG_TO_VM_EXISTS(454), USER_ATTACH_TAG_TO_VDS_EXISTS(455), + USER_ATTACH_TAG_TO_TEMPLATE(456), + USER_ATTACH_TAG_TO_TEMPLATE_FAILED(457), + USER_DETACH_TEMPLATE_FROM_TAG(458), + USER_DETACH_TEMPLATE_FROM_TAG_FAILED(459), + USER_ATTACH_TAG_TO_TEMPLATE_EXISTS(460), USER_MOVE_TAG(555), USER_MOVE_TAG_FAILED(556), USER_LOGGED_IN_VM(456), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java index bc781ea..2de7d26 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java @@ -169,6 +169,8 @@ AttachVdsToTag(511, false, QuotaDependency.NONE), DetachVdsFromTag(512, false, QuotaDependency.NONE), UpdateTagsVmMapDefaultDisplayType(515, false, QuotaDependency.NONE), + AttachTemplatesToTag(516, false, QuotaDependency.NONE), + DetachTemplateFromTag(517, false, QuotaDependency.NONE), // Quota AddQuota(601, ActionGroup.CONFIGURE_QUOTA, false, QuotaDependency.NONE), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/TagsTemplateMap.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/TagsTemplateMap.java new file mode 100644 index 0000000..99f2b11 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/TagsTemplateMap.java @@ -0,0 +1,76 @@ +package org.ovirt.engine.core.common.businessentities; + +import org.ovirt.engine.core.common.utils.ObjectUtils; +import org.ovirt.engine.core.compat.Guid; + +import java.io.Serializable; + +public class TagsTemplateMap implements Serializable { + private static final long serialVersionUID = 4061390921955269261L; + + private TagsTemplateMapId id; + + private Integer defaultDisplayType; + + public TagsTemplateMap() { + id = new TagsTemplateMapId(); + defaultDisplayType = 0; + } + + public TagsTemplateMap(Guid tag_id, Guid template_id) { + this(); + this.id.tagId = tag_id; + this.id.templateId = template_id; + } + + public Guid gettag_id() { + return this.id.tagId; + } + + public void settag_id(Guid value) { + this.id.tagId = value; + } + + public Guid gettemplate_id() { + return this.id.templateId; + } + + public void settemplate_id(Guid value) { + this.id.templateId = value; + } + + public Integer getDefaultDisplayType() { + return this.defaultDisplayType; + } + + public void setDefaultDisplayType(Integer value) { + this.defaultDisplayType = value; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id.tagId == null) ? 0 : id.tagId.hashCode()); + result = prime * result + ((id.templateId == null) ? 0 : id.templateId.hashCode()); + result = prime * result + ((defaultDisplayType == null) ? 0 : defaultDisplayType.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TagsTemplateMap other = (TagsTemplateMap) obj; + return (ObjectUtils.objectsEqual(id.tagId, other.id.tagId) + && ObjectUtils.objectsEqual(id.templateId, other.id.templateId) + && ObjectUtils.objectsEqual(defaultDisplayType, other.defaultDisplayType)); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/TagsTemplateMapId.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/TagsTemplateMapId.java new file mode 100644 index 0000000..bf4f927 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/TagsTemplateMapId.java @@ -0,0 +1,21 @@ +package org.ovirt.engine.core.common.businessentities; + +import org.ovirt.engine.core.compat.Guid; + +import java.io.Serializable; + +public class TagsTemplateMapId implements Serializable { + private static final long serialVersionUID = 3806639687244222549L; + + Guid tagId; + Guid templateId; + + public TagsTemplateMapId() { + } + + public TagsTemplateMapId(Guid tagId, Guid templateId) { + super(); + this.tagId = tagId; + this.templateId = templateId; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetTagsByTemplateIdParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetTagsByTemplateIdParameters.java new file mode 100644 index 0000000..e079695 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetTagsByTemplateIdParameters.java @@ -0,0 +1,18 @@ +package org.ovirt.engine.core.common.queries; + +public class GetTagsByTemplateIdParameters extends VdcQueryParametersBase { + private static final long serialVersionUID = -8537901288950684062L; + + public GetTagsByTemplateIdParameters(String templateId) { + _templateId = templateId; + } + + private String _templateId; + + public String getTemplateId() { + return _templateId; + } + + public GetTagsByTemplateIdParameters() { + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index cbc567d..7c9cd1e 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -150,6 +150,7 @@ GetTagsByUserGroupId, GetTagsByUserId, GetTagsByVmId, + GetTagsByTemplateId, GetTagsByVdsId, // System diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/TagDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/TagDAO.java index 960af1c..c3f585d 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/TagDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/TagDAO.java @@ -3,6 +3,7 @@ import java.util.List; import org.ovirt.engine.core.common.businessentities.Tags; +import org.ovirt.engine.core.common.businessentities.TagsTemplateMap; import org.ovirt.engine.core.common.businessentities.TagsUserGroupMap; import org.ovirt.engine.core.common.businessentities.TagsUserMap; import org.ovirt.engine.core.common.businessentities.TagsVdsMap; @@ -97,6 +98,15 @@ List<Tags> getAllForVm(String ids); /** + * Retrieves the list of tags for the given Template ids. + * + * @param ids + * the Template ids + * @return the list of tags + */ + List<Tags> getAllForTemplate(String ids); + + /** * Retrieves the list of VM tags for the given tag ids. * * @param ids @@ -183,5 +193,11 @@ List<TagsVmMap> getTagVmMapByVmIdAndDefaultTag(Guid vmid); + TagsTemplateMap getTagTemplateByTagIdAndByTemplateId(Guid tagId, Guid templateId); + + void attachTemplateToTag(TagsTemplateMap tagVmMap); + + void detachTemplateFromTag(Guid tagId, Guid vmId); + List<TagsVmPoolMap> getVmPoolTagsByVmPoolIdAndAdElementId(Guid vmPoolId, Guid adElementId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/TagDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/TagDAODbFacadeImpl.java index 2397ba5..8d722e2 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/TagDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/TagDAODbFacadeImpl.java @@ -5,6 +5,7 @@ import java.util.List; import org.ovirt.engine.core.common.businessentities.Tags; +import org.ovirt.engine.core.common.businessentities.TagsTemplateMap; import org.ovirt.engine.core.common.businessentities.TagsType; import org.ovirt.engine.core.common.businessentities.TagsUserGroupMap; import org.ovirt.engine.core.common.businessentities.TagsUserMap; @@ -149,6 +150,23 @@ @SuppressWarnings("unchecked") @Override public List<Tags> getAllForVm(String ids) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("vm_ids", ids); + + return getCallsHandler() + .executeReadList("GetTagsByVmId", TagRowMapper.instance, parameterSource); + } + + /** + * In the database both TemplateTags and VmTags share the same tables and + * functions + * @param ids + * the Template ids + * @return + */ + @SuppressWarnings("unchecked") + @Override + public List<Tags> getAllForTemplate(String ids) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_ids", ids); @@ -399,6 +417,51 @@ "GetnVmTagsByVmIdAndDefaultTag", mapper, parameterSource); } + /** + * In the database both Template and Vm Tags share the same tables and functions + * @param tagId + * @param vmId + * @return + */ + @Override + public TagsTemplateMap getTagTemplateByTagIdAndByTemplateId(Guid tagId, Guid vmId) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("tag_id", tagId).addValue( + "vm_id", vmId); + + RowMapper<TagsTemplateMap> mapper = new RowMapper<TagsTemplateMap>() { + @Override + public TagsTemplateMap mapRow(ResultSet rs, int rowNum) throws SQLException { + TagsTemplateMap entity = new TagsTemplateMap(); + entity.settag_id(getGuidDefaultEmpty(rs, "tag_id")); + entity.settemplate_id(getGuidDefaultEmpty(rs, "vm_id")); + entity.setDefaultDisplayType((Integer) rs.getObject("DefaultDisplayType")); + return entity; + } + }; + + return getCallsHandler() + .executeRead("GetTagVmByTagIdAndByvmId", mapper, parameterSource); + } + + @Override + public void attachTemplateToTag(TagsTemplateMap tagTemplateMap) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("tag_id", + tagTemplateMap.gettag_id()).addValue("vm_id", tagTemplateMap.gettemplate_id()).addValue("DefaultDisplayType", + tagTemplateMap.getDefaultDisplayType()); + + getCallsHandler() + .executeModification("Inserttags_vm_map", parameterSource); + } + + @Override + public void detachTemplateFromTag(Guid tagId, Guid vmId) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("tag_id", tagId).addValue( + "vm_id", vmId); + + getCallsHandler() + .executeModification("Deletetags_vm_map", parameterSource); + } + @SuppressWarnings("unchecked") @Override public List<TagsVmPoolMap> getVmPoolTagsByVmPoolIdAndAdElementId(Guid vmPoolId, Guid adElementId) { diff --git a/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/LinkHelperTest.java b/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/LinkHelperTest.java index 5a6db35..fe00d14 100644 --- a/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/LinkHelperTest.java +++ b/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/LinkHelperTest.java @@ -85,6 +85,7 @@ private static final String TAG_HREF = BASE_PATH + "/tags/" + TAG_ID; private static final String VM_TAG_HREF = BASE_PATH + "/vms/" + VM_ID + "/tags/" + TAG_ID; private static final String HOST_TAG_HREF = BASE_PATH + "/hosts/" + HOST_ID + "/tags/" + TAG_ID; + private static final String TEMPLATE_TAG_HREF = BASE_PATH + "/templates/" + TEMPLATE_ID + "/tags/" + TAG_ID; private static final String USER_TAG_HREF = BASE_PATH + "/users/" + USER_ID + "/tags/" + TAG_ID; private static final String CLUSTER_NETWORK_HREF = BASE_PATH + "/clusters/" + CLUSTER_ID + "/networks/" + NETWORK_ID; private static final String FILE_HREF = BASE_PATH + "/storagedomains/" + STORAGE_DOMAIN_ID + "/files/" + FILE_ID; @@ -283,6 +284,18 @@ } @Test + public void testTemplateTagLinks() throws Exception { + Tag tag = new Tag(); + tag.setId(TAG_ID); + tag.setTemplate(new Template()); + tag.getTemplate().setId(TEMPLATE_ID); + + LinkHelper.addLinks(setUpUriExpectations(), tag); + + assertEquals(TEMPLATE_TAG_HREF, tag.getHref()); + } + + @Test public void testUserTagLinks() throws Exception { Tag tag = new Tag(); tag.setId(TAG_ID); diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/TemplateResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/TemplateResource.java index 4a9e74b..1add460 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/TemplateResource.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/TemplateResource.java @@ -54,6 +54,9 @@ @Path("nics") public DevicesResource<NIC, Nics> getNicsResource(); + @Path("tags") + public AssignedTagsResource getTagsResource(); + @Path("permissions") public AssignedPermissionsResource getPermissionsResource(); diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java index f6a4b55..a48d254 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java @@ -303,6 +303,7 @@ map.add(AssignedTagResource.class, AssignedTagsResource.class, Host.class); map.add(AssignedTagResource.class, AssignedTagsResource.class, User.class); map.add(AssignedTagResource.class, AssignedTagsResource.class, VM.class); + map.add(AssignedTagResource.class, AssignedTagsResource.class, Template.class); map.add(AssignedTagResource.class, AssignedTagsResource.class, Group.class); TYPES.put(Tag.class, map); diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd index d847be4..fe04139 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd @@ -3211,6 +3211,7 @@ <xs:sequence> <xs:element ref="host" minOccurs="0"/> <xs:element ref="vm" minOccurs="0"/> + <xs:element ref="template" minOccurs="0"/> <xs:element ref="user" minOccurs="0"/> <xs:element ref="group" minOccurs="0"/> <xs:element name="parent" type="TagParent" minOccurs="0"/> diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml index 2e40b16..124aa32 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml @@ -3614,6 +3614,46 @@ Content-Type: {value: application/xml|json, required: true} Expect: {value: 201-created, required: false} Correlation-Id: {value: 'any string', required: false} +- name: /templates/{template:id}/tags|rel=get + description: get the list of tags added to the template + request: + body: + parameterType: null + signatures: [] + urlparams: + max: {context: matrix, type: 'xs:int', value: 'max results', required: false} + headers: {} +- name: /templates/{template:id}/tags/{tag:id}|rel=get + description: get the details of the tag added to the template + request: + body: + parameterType: null + signatures: [] + urlparams: {} + headers: {} +- name: /templates/{template:id}/tags/{tag:id}|rel=delete + description: delete a tag added to the template + request: + body: + parameterType: null + signatures: [] + urlparams: + async: {context: matrix, type: 'xs:boolean', value: true|false, required: false} + headers: + Correlation-Id: {value: 'any string', required: false} +- name: /templates/{template:id}/tags|rel=add + description: add a new tag to the template + request: + body: + parameterType: Tag + signatures: + - mandatoryArguments: {tag.id|name: 'xs:string'} + description: add a new tag to the virtual machine + urlparams: {} + headers: + Content-Type: {value: application/xml|json, required: true} + Expect: {value: 201-created, required: false} + Correlation-Id: {value: 'any string', required: false} - name: /users|rel=get description: get the list of all users registered in the system request: diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java index 5118653..d18ec1a 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java @@ -15,6 +15,7 @@ import org.ovirt.engine.api.model.VirtIOSCSI; import org.ovirt.engine.api.resource.ActionResource; import org.ovirt.engine.api.resource.AssignedPermissionsResource; +import org.ovirt.engine.api.resource.AssignedTagsResource; import org.ovirt.engine.api.resource.CreationResource; import org.ovirt.engine.api.resource.DevicesResource; import org.ovirt.engine.api.resource.ReadOnlyDevicesResource; @@ -40,7 +41,7 @@ extends AbstractBackendActionableResource<Template, VmTemplate> implements TemplateResource { - static final String[] SUB_COLLECTIONS = { "disks", "nics", "cdroms", "permissions", "watchdogs" }; + static final String[] SUB_COLLECTIONS = { "disks", "nics", "cdroms", "tags", "permissions", "watchdogs" }; public BackendTemplateResource(String id) { super(id, Template.class, VmTemplate.class, SUB_COLLECTIONS); @@ -95,6 +96,11 @@ } @Override + public AssignedTagsResource getTagsResource() { + return inject(new BackendTemplateTagsResource(id)); + } + + @Override public AssignedPermissionsResource getPermissionsResource() { return inject(new BackendAssignedPermissionsResource(guid, VdcQueryType.GetPermissionsForObject, diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateTagsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateTagsResource.java new file mode 100644 index 0000000..9ed139b --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateTagsResource.java @@ -0,0 +1,35 @@ +package org.ovirt.engine.api.restapi.resource; + +import org.ovirt.engine.api.model.Tag; +import org.ovirt.engine.api.model.Template; +import org.ovirt.engine.api.resource.AssignedTagsResource; +import org.ovirt.engine.core.common.action.AttachEntityToTagParameters; +import org.ovirt.engine.core.common.action.TagsActionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.Tags; +import org.ovirt.engine.core.common.queries.GetTagsByTemplateIdParameters; +import org.ovirt.engine.core.common.queries.VdcQueryType; + +import java.util.List; + +public class BackendTemplateTagsResource + extends AbstractBackendAssignedTagsResource + implements AssignedTagsResource { + + public BackendTemplateTagsResource(String parentId) { + super(Template.class, parentId, VdcActionType.AttachTemplatesToTag, VdcActionType.DetachTemplateFromTag); + } + + public List<Tags> getCollection() { + return getBackendCollection(VdcQueryType.GetTagsByTemplateId, new GetTagsByTemplateIdParameters(parentId)); + } + + protected TagsActionParametersBase getAttachParams(String id) { + return new AttachEntityToTagParameters(asGuid(id), asList(asGuid(parentId))); + } + + @Override + protected Tag doPopulate(Tag model, Tags entity) { + return model; + } +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java index 2dd9677..7ee0620 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java @@ -35,7 +35,7 @@ extends AbstractBackendCollectionResource<Template, VmTemplate> implements TemplatesResource { - static final String[] SUB_COLLECTIONS = { "disks", "nics", "cdroms", "permissions", "watchdogs" }; + static final String[] SUB_COLLECTIONS = { "disks", "nics", "cdroms", "tags", "permissions", "watchdogs" }; public BackendTemplatesResource() { super(Template.class, VmTemplate.class, SUB_COLLECTIONS); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendAssignedTagsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendAssignedTagsResourceTest.java index 9522ecc..0b2c44c 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendAssignedTagsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendAssignedTagsResourceTest.java @@ -256,6 +256,7 @@ @Override protected void verifyModel(Tag model, int index) { super.verifyModel(model, index); + System.out.println("model.getHref() = "+ model.getHref()); assertFalse(model.getHref().startsWith(BASE_PATH + "/tags")); } } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateTagsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateTagsResourceTest.java new file mode 100644 index 0000000..c939baf --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateTagsResourceTest.java @@ -0,0 +1,18 @@ +package org.ovirt.engine.api.restapi.resource; + +import org.ovirt.engine.core.common.action.AttachEntityToTagParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.queries.GetTagsByTemplateIdParameters; +import org.ovirt.engine.core.common.queries.VdcQueryType; + +public class BackendTemplateTagsResourceTest extends AbstractBackendAssignedTagsResourceTest<BackendTemplateTagsResource> { + public BackendTemplateTagsResourceTest() { + super(new BackendTemplateTagsResource(PARENT_GUID.toString())); + parentIdName = "TemplateId"; + queryType = VdcQueryType.GetTagsByTemplateId; + queryParams = GetTagsByTemplateIdParameters.class; + attachAction = VdcActionType.AttachTemplatesToTag; + detachAction = VdcActionType.DetachTemplateFromTag; + attachParams = AttachEntityToTagParameters.class; + } +} -- To view, visit http://gerrit.ovirt.org/24577 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I32e2d449f7154c50bc7511e143ed82c995a3fa4e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ravi Nori <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
