package org.ovirt.engine.api.restapi.resource; import org.ovirt.engine.api.model.Tag; import org.ovirt.engine.api.resource.TagResource; import org.ovirt.engine.core.common.action.MoveTagParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.TagsOperationParameters; import org.ovirt.engine.core.common.businessentities.tags; import org.ovirt.engine.core.common.queries.GetTagByTagIdParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendTagResource extends AbstractBackendSubResource<Tag, tags> implements TagResource { private BackendTagsResource parent; public BackendTagResource(String id, BackendTagsResource parent) { super(id, Tag.class, tags.class); this.parent = parent; } BackendTagsResource getParent() { return parent; } @Override public Tag get() { return performGet(VdcQueryType.GetTagByTagId, new GetTagByTagIdParameters(guid)); } @Override public Tag update(Tag incoming) { if (parent.isSetParentName(incoming)) { incoming.getParent().getTag().setId(parent.getParentId(incoming)); } if (isSetParent(incoming)) { moveTag(asGuid(incoming.getParent().getTag().getId())); } return performUpdate(incoming, new QueryIdResolver(VdcQueryType.GetTagByTagId, GetTagByTagIdParameters.class), VdcActionType.UpdateTag, new UpdateParametersProvider()); } protected void moveTag(Guid newParentId) { performAction(VdcActionType.MoveTag, new MoveTagParameters(guid, newParentId), Void.class); } protected boolean isSetParent(Tag tag) { return tag.isSetParent() && tag.getParent().isSetTag() && tag.getParent().getTag().isSetId(); } protected class UpdateParametersProvider implements ParametersProvider<Tag, tags> { @Override public VdcActionParametersBase getParameters(Tag incoming, tags entity) { return new TagsOperationParameters(map(incoming, entity)); } } }