package ru.yandex.market.graphouse.search;
import java.util.*;
/**
* @author Dmitry Andreev <a href="mailto:AndreevDm@yandex-team.ru"></a>
* @date 08/06/15
*/
public enum MetricStatus {
/**
* Статус по умолчанию при создании директории/метрики.
*/
SIMPLE,
/**
* Если директория (метрика) забанена, то
* - директория и все метрики в ней (метрика) перестаёт находиться в поиске (а следовательно и в графите)
* - значения метрик в директории (метрики) перестают приниматься и писаться в графит
* <p/
* Чтобы открыть деректорию(метрику), необходимо явно перевести в {@link #APPROVED}
*/
BAN,
APPROVED,
/**
* Если директория(метрика) скрыта, то
* - директория и все метрики в ней (метрика) перестаёт находиться в поиске (а следовательно и в графите)
* - как только появится новое значение метрика и все родительские директории будут открыты
* <p/>
*/
HIDDEN,
/**
* Директория автоматически скрывается, если все её дочерние директории и метрики не видимы {@link #visible}
* Как только появится новое значение для дочерней метрики, директория будет открыта {@link #SIMPLE}
* <p/>
* Метрика может быть автоматически скрыта в {@link ru.yandex.market.graphouse.AutoHideService}
* Аналогично, при появлении новых значений будет открыта {@link #SIMPLE}
*/
AUTO_HIDDEN;
public static final Map<MetricStatus, List<MetricStatus>> RESTRICTED_GRAPH_EDGES = new EnumMap<>(
MetricStatus.class
);
static {
RESTRICTED_GRAPH_EDGES.put(MetricStatus.BAN, Arrays.asList(MetricStatus.SIMPLE, MetricStatus.AUTO_HIDDEN));
RESTRICTED_GRAPH_EDGES.put(MetricStatus.HIDDEN, Collections.singletonList(MetricStatus.AUTO_HIDDEN));
RESTRICTED_GRAPH_EDGES.put(MetricStatus.APPROVED, Arrays.asList(MetricStatus.SIMPLE, MetricStatus.AUTO_HIDDEN));
}
/**
* Если <code>false</code>, то в поиске не будет отдаваться данная метрика (ни одна метрика из данной директории).
*/
public boolean visible() {
switch (this) {
case SIMPLE:
case APPROVED:
return true;
case BAN:
case HIDDEN:
case AUTO_HIDDEN:
return false;
default:
throw new IllegalStateException();
}
}
public boolean handmade() {
switch (this) {
case APPROVED:
case BAN:
case HIDDEN:
return true;
case SIMPLE:
case AUTO_HIDDEN:
return false;
default:
throw new IllegalStateException();
}
}
}