package ru.hflabs.rcd.model.document; import com.google.common.base.Function; import ru.hflabs.rcd.model.path.DictionaryNamedPath; import ru.hflabs.rcd.model.path.FieldNamedPath; import ru.hflabs.rcd.model.path.MetaFieldNamedPath; /** * Класс <class>Contexts</class> реализует вспомогательные методы для создания контекстов документов * * @see DocumentContext */ public abstract class Contexts { /** Контекст справочника */ public static final Function<DocumentContext, Context<DictionaryNamedPath, Dictionary>> DICTIONARY_CONTEXT = new Function<DocumentContext, Context<DictionaryNamedPath, Dictionary>>() { @Override public Context<DictionaryNamedPath, Dictionary> apply(DocumentContext input) { return new NamedContext.DictionaryContext(input); } }; /** Контекст МЕТА-поля */ public static final Function<DocumentContext, Context<MetaFieldNamedPath, MetaField>> META_FIELD_CONTEXT = new Function<DocumentContext, Context<MetaFieldNamedPath, MetaField>>() { @Override public Context<MetaFieldNamedPath, MetaField> apply(DocumentContext input) { return new NamedContext.MetaFieldContext(input); } }; /** Контекст значения поля */ public static final Function<DocumentContext, Context<FieldNamedPath, Field>> FIELD_CONTEXT = new Function<DocumentContext, Context<FieldNamedPath, Field>>() { @Override public Context<FieldNamedPath, Field> apply(DocumentContext input) { return new NamedContext.FieldContext(input); } }; protected Contexts() { // embedded constructor } /** * Выполняет создание контекста документа по значению поля с установленными транзитивными зависимостями * * @param field значение поля * @return Возвращает контекст документа */ public static DocumentContext createDocumentContext(Field field) { MetaField metaField = field.getRelative(); assert metaField != null : "MetaField must be not NULL"; Dictionary dictionary = metaField.getRelative(); assert dictionary != null : "Dictionary must be not NULL"; Group group = dictionary.getRelative(); assert group != null : "Group must be not NULL"; return new DocumentContext(group, dictionary, metaField, field); } }