package org.ovirt.engine.api.restapi.resource.gluster; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.GlusterBrick; import org.ovirt.engine.api.model.GlusterBricks; import org.ovirt.engine.api.resource.StatisticsResource; import org.ovirt.engine.api.resource.gluster.GlusterBrickResource; import org.ovirt.engine.api.restapi.logging.Messages; import org.ovirt.engine.api.restapi.resource.AbstractBackendActionableResource; import org.ovirt.engine.api.restapi.resource.BackendStatisticsResource; import org.ovirt.engine.api.restapi.resource.BrickStatisticalQuery; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeAdvancedDetails; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.queries.gluster.GlusterVolumeAdvancedDetailsParameters; import org.ovirt.engine.core.compat.Guid; public class BackendGlusterBrickResource extends AbstractBackendActionableResource<GlusterBrick, GlusterBrickEntity> implements GlusterBrickResource { private BackendGlusterBricksResource parent; public BackendGlusterBrickResource(String brickId, BackendGlusterBricksResource parent) { this(brickId); setParent(parent); } public BackendGlusterBrickResource(String brickId) { super(brickId, GlusterBrick.class, GlusterBrickEntity.class); } @Override public GlusterBrick get() { return performGet(VdcQueryType.GetGlusterBrickById, new IdQueryParameters(guid)); } @Override protected GlusterBrick addParents(GlusterBrick model) { parent.addParents(model); return model; } protected String getClusterId() { return getParent().getParent().getParent().getParent().get().getId(); } protected String getVolumeId() { return getParent().getParent().getId(); } @Override public Response replace(Action action) { throw new WebFaultException(null, localize(Messages.GLUSTER_VOLUME_REPLACE_BRICK_NOT_SUPPORTED), Response.Status.SERVICE_UNAVAILABLE); } public BackendGlusterBricksResource getParent() { return parent; } public void setParent(BackendGlusterBricksResource parent) { this.parent = parent; } @Override protected GlusterBrick doPopulate(GlusterBrick model, GlusterBrickEntity entity) { return parent.populateAdvancedDetails(model, entity); } @Override public StatisticsResource getStatisticsResource() { EntityIdResolver<Guid> resolver = new QueryIdResolver<Guid>(VdcQueryType.GetGlusterBrickById, IdQueryParameters.class) { @Override public GlusterBrickEntity lookupEntity(Guid id) throws BackendFailureException { GlusterBrickEntity brickEntity = getEntity(GlusterBrickEntity.class, VdcQueryType.GetGlusterBrickById, new IdQueryParameters(id), null, true); GlusterVolumeEntity volumeEntity = getEntity(GlusterVolumeEntity.class, VdcQueryType.GetGlusterVolumeById, new IdQueryParameters(brickEntity.getVolumeId()), null, true); GlusterVolumeAdvancedDetails detailsEntity = getEntity(GlusterVolumeAdvancedDetails.class, VdcQueryType.GetGlusterVolumeAdvancedDetails, new GlusterVolumeAdvancedDetailsParameters(volumeEntity.getClusterId(), volumeEntity.getId(), brickEntity.getId(), true), null, true); brickEntity.setBrickDetails(detailsEntity.getBrickDetails().get(0)); return brickEntity; } }; BrickStatisticalQuery query = new BrickStatisticalQuery(resolver , newModel(id)); return inject(new BackendStatisticsResource<>(GlusterBrickEntity.class, guid, query)); } @Override public Response remove() { get(); GlusterBrick brick = new GlusterBrick(); brick.setId(id); GlusterBricks bricks = new GlusterBricks(); bricks.getGlusterBricks().add(brick); Action action = new Action(); action.setBricks(bricks); return parent.remove(action); } }