package ru.hflabs.rcd.task.performer.synchronization; import com.google.common.collect.ImmutableList; import ru.hflabs.rcd.model.task.TaskParameterDefinition; import ru.hflabs.rcd.model.task.TaskResultStatus; import ru.hflabs.rcd.task.performer.ParametersHolder; import ru.hflabs.rcd.task.performer.TaskResultDetails; import java.util.Collection; import java.util.Collections; /** * Класс <class>SynchronizationResult</class> реализует декоратор результатов задачи синхронизации справоников * * @see ParametersHolder */ public class SynchronizationResult extends ParametersHolder { /** Общее количество синхронизированных справочников */ public static final transient TaskParameterDefinition<Integer> TOTAL_COUNT = new TaskParameterDefinition<>("totalCount", 0); /** Количество справочников, которые прошли синхронизацию */ public static final transient TaskParameterDefinition<Integer> SUCCESS_COUNT = new TaskParameterDefinition<>("successCount", 0); /** Количество справочников, которые не прошли синхронизацию */ public static final transient TaskParameterDefinition<Integer> ERROR_COUNT = new TaskParameterDefinition<>("errorCount", 0); /** Коллекция синхронизированных справочников */ public static final transient TaskParameterDefinition<Collection<Dictionary>> DICTIONARIES = new TaskParameterDefinition<>("dictionaries", null); public SynchronizationResult() { super(); } public SynchronizationResult(Collection<Dictionary> dictionaries) { this(dictionaries, Collections.<Dictionary>emptyList()); } public SynchronizationResult(Collection<Dictionary> successDictionaries, Collection<Dictionary> errorDictionaries) { setSuccessCount(successDictionaries.size()); setErrorCount(errorDictionaries.size()); setTotalCount(successDictionaries.size() + errorDictionaries.size()); setDictionaries( ImmutableList.<Dictionary>builder() .addAll(successDictionaries) .addAll(errorDictionaries) .build() ); } public void setTotalCount(int count) { injectParameter(TOTAL_COUNT.name, count); } public void setSuccessCount(int count) { injectParameter(SUCCESS_COUNT.name, count); } public void setErrorCount(int count) { injectParameter(ERROR_COUNT.name, count); } public void setDictionaries(Collection<Dictionary> dictionaries) { injectParameter(DICTIONARIES.name, dictionaries); } /** * Класс <class>Dictionary</class> содержит результат синхронизации справочника * * @see SynchronizationResult */ public static class Dictionary extends TaskResultDetails { /** Название группы */ public static final transient TaskParameterDefinition<String> GROUP_NAME = new TaskParameterDefinition<>("groupName", null); /** Название справочника */ public static final transient TaskParameterDefinition<String> DICTIONARY_NAME = new TaskParameterDefinition<>("dictionaryName", null); public Dictionary(TaskResultStatus status, String groupName, String dictionaryName) { setStatus(status); setGroupName(groupName); setDictionaryName(dictionaryName); } public Dictionary(String groupName, String dictionaryName, Throwable exception) { this(TaskResultStatus.ERROR, groupName, dictionaryName); injectThrowable(exception); } public String getGroupName() { return retrieveParameter(GROUP_NAME.name, String.class, GROUP_NAME.value); } public void setGroupName(String groupName) { injectParameter(GROUP_NAME.name, groupName); } public String getDictionaryName() { return retrieveParameter(DICTIONARY_NAME.name, String.class, DICTIONARY_NAME.value); } public void setDictionaryName(String dictionaryName) { injectParameter(DICTIONARY_NAME.name, dictionaryName); } } }