package ru.hflabs.rcd.model; import com.google.common.collect.ImmutableMap; import ru.hflabs.rcd.model.change.History; import ru.hflabs.rcd.model.document.Dictionary; import ru.hflabs.rcd.model.document.Field; import ru.hflabs.rcd.model.document.Group; import ru.hflabs.rcd.model.document.MetaField; import ru.hflabs.rcd.model.notification.Notification; import ru.hflabs.rcd.model.rule.RecodeRule; import ru.hflabs.rcd.model.rule.RecodeRuleSet; import ru.hflabs.rcd.model.task.TaskDescriptor; import ru.hflabs.rcd.model.task.TaskResult; import java.util.Map; /** * Класс <class>ModelOrder</class> содержит информацию о зависимостях сущностей, которые <b>ВАЖЕН</b>ы при обходе слушателей * * @see org.springframework.core.Ordered#getOrder() */ public abstract class ModelOrder { /** Порядок по умолчанию */ public static final Integer DEFAULT_ORDER = -10000; /** Карта приоритетов */ private static final Map<Class<?>, Integer> ORDERS = ImmutableMap.<Class<?>, Integer>builder() // common .put(History.class, -5000) .put(Notification.class, -3000) // documents .put(Group.class, -2000) .put(Dictionary.class, -1900) .put(MetaField.class, -1800) .put(Field.class, -1700) .put(RecodeRuleSet.class, -1500) .put(RecodeRule.class, -1400) // tasks .put(TaskDescriptor.class, 0) .put(TaskResult.class, 0) .build(); protected ModelOrder() { // embedded constructor } /** * @param targetClass целевой класс сущности * @return Возвращает заданный приоритет сущности по ее классу */ public static Integer getOrder(Class<?> targetClass) { return ORDERS.containsKey(targetClass) ? ORDERS.get(targetClass) : DEFAULT_ORDER; } }