package org.ovirt.engine.api.restapi.resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.api.model.BaseResource;
import org.ovirt.engine.api.model.Statistic;
import org.ovirt.engine.api.model.StatisticKind;
import org.ovirt.engine.api.model.StatisticUnit;
import org.ovirt.engine.api.model.ValueType;
import org.ovirt.engine.api.restapi.resource.BaseBackendResource.BackendFailureException;
import org.ovirt.engine.api.restapi.utils.StatisticResourceUtils;
import org.ovirt.engine.core.compat.Guid;
/**
* Subclasses encapsulate the subject-specific aspects of a statistical query
*/
public abstract class AbstractStatisticalQuery<R extends BaseResource, E> {
protected static final long Kb = 1024L;
protected static final long Mb = 1024 * Kb;
protected static final BigDecimal CENT = new BigDecimal(100);
protected static final StatisticKind GAUGE = StatisticKind.GAUGE;
protected static final StatisticKind COUNTER = StatisticKind.COUNTER;
protected static final StatisticUnit NONE = StatisticUnit.NONE;
protected static final StatisticUnit PERCENT = StatisticUnit.PERCENT;
protected static final StatisticUnit BYTES = StatisticUnit.BYTES;
protected static final StatisticUnit BYTES_PER_SECOND = StatisticUnit.BYTES_PER_SECOND;
protected static final StatisticUnit BITS_PER_SECOND = StatisticUnit.BITS_PER_SECOND;
protected static final ValueType INTEGER = ValueType.INTEGER;
protected static final ValueType DECIMAL = ValueType.DECIMAL;
protected Class<R> parentType;
protected R parent;
protected AbstractBackendResource<R, E>.EntityIdResolver<Guid> entityResolver;
public AbstractStatisticalQuery(Class<R> parentType,
R parent,
AbstractBackendResource<R, E>.EntityIdResolver<Guid> entityResolver) {
this.parentType = parentType;
this.parent = parent;
this.entityResolver = entityResolver;
}
public Class<R> getParentType() {
return parentType;
}
public E resolve(Guid id) throws BackendFailureException {
return entityResolver.resolve(id);
}
public Statistic setDatum(Statistic statistic, BigDecimal datum) {
return StatisticResourceUtils.setDatum(statistic, datum);
}
public Statistic setDatum(Statistic statistic, String datum) {
return StatisticResourceUtils.setDatum(statistic, datum);
}
public Statistic setDatum(Statistic statistic, Long datum) {
return StatisticResourceUtils.setDatum(statistic, datum);
}
public Statistic setDatum(Statistic statistic, Double datum) {
return StatisticResourceUtils.setDatum(statistic, datum);
}
public Statistic setDatum(Statistic statistic, long datum) {
return StatisticResourceUtils.setDatum(statistic, datum);
}
public Statistic setDatum(Statistic statistic, double datum) {
return StatisticResourceUtils.setDatum(statistic, datum);
}
public abstract List<Statistic> getStatistics(E entity);
public abstract Statistic adopt(Statistic statistic);
public static Statistic create(String name,
String description,
StatisticKind kind,
StatisticUnit unit,
ValueType valueType) {
return StatisticResourceUtils.create(name, description, kind, unit, valueType);
}
public static Statistic clone(Statistic s) {
return create(s.getName(), s.getDescription(), s.getKind(), s.getUnit(), s.getType());
}
public List<Statistic> asList(Statistic...statistics) {
List<Statistic> list = new ArrayList<>();
for (Statistic statistic : statistics) {
list.add(adopt(statistic));
}
return list;
}
}