package org.ovirt.engine.api.restapi.resource; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.AffinityLabel; import org.ovirt.engine.api.resource.AffinityLabelHostsResource; import org.ovirt.engine.api.resource.AffinityLabelResource; import org.ovirt.engine.api.resource.AffinityLabelVmsResource; import org.ovirt.engine.core.common.action.LabelActionParameters; import org.ovirt.engine.core.common.action.LabelActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.Label; import org.ovirt.engine.core.common.businessentities.LabelBuilder; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendAffinityLabelResource extends AbstractBackendActionableResource<AffinityLabel, Label> implements AffinityLabelResource { public BackendAffinityLabelResource(String id) { super(id, AffinityLabel.class, org.ovirt.engine.core.common.businessentities.Label.class); } @Override public AffinityLabel get() { return addLinks(performGet(VdcQueryType.GetLabelById, new IdQueryParameters(guid))); } @Override public AffinityLabel update(AffinityLabel incoming) { QueryIdResolver<Guid> labelResolver = new QueryIdResolver<>(VdcQueryType.GetLabelById, IdQueryParameters.class); Label entity = getEntity(labelResolver, true); AffinityLabel label = performUpdate(incoming, entity, map(entity), labelResolver, VdcActionType.UpdateLabel, new UpdateParametersProvider()); return label; } @Override public Response remove() { return performAction(VdcActionType.RemoveLabel, new LabelActionParametersBase(guid)); } protected static class UpdateParametersProvider implements ParametersProvider<AffinityLabel, Label> { @Override public VdcActionParametersBase getParameters(AffinityLabel model, Label entity) { LabelBuilder newEntity = new LabelBuilder(entity); if (model.isSetReadOnly()) { newEntity.readOnly(model.isReadOnly()); } if (model.isSetName()) { newEntity.name(model.getName()); } return new LabelActionParameters(newEntity.build()); } } @Override public AffinityLabelVmsResource getVmsResource() { return inject(new BackendAffinityLabelVmsResource(id.toString())); } @Override public AffinityLabelHostsResource getHostsResource() { return inject(new BackendAffinityLabelHostsResource(id.toString())); } }