All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.n2oapp.framework.api.config.ConfigBuilder Maven / Gradle / Ivy

There is a newer version: 7.28.2
Show newest version
package net.n2oapp.framework.api.config;

import org.apache.commons.io.IOUtils;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;

/**
 * Конструктор конфигурации клиента N2O приложения
 * @param  Тип конфигурации
 */
public interface ConfigBuilder {

    /**
     * Установить информацию о пользователе
     * @param user Пользователь
     * @return Конструктор
     */
    default ConfigBuilder user(Object user) {
        return add("user", user);
    }

    /**
     * Установить информацию о меню
     * @param menu Меню
     * @return Конструктор
     */
    default ConfigBuilder menu(Object menu) {
        return add("menu", menu);
    }

    /**
     * Установить сообщения локализации
     * @param resourceBundle Бандл ресурсов
     * @param messageSource Источник сообщений
     * @return Конструктор
     */
    default ConfigBuilder messages(ResourceBundle resourceBundle,
                                   MessageSourceAccessor messageSource) {
        return messages(resourceBundle, messageSource, LocaleContextHolder.getLocale());
    }

    /**
     * Установить сообщения локализации
     * @param resourceBundle Бандл ресурсов
     * @param messageSource Исчтоник сообщений
     * @param locale Локаль
     * @return Конструктор
     */
    default ConfigBuilder messages(ResourceBundle resourceBundle,
                                   MessageSourceAccessor messageSource,
                                   Locale locale) {
        Map messages = new LinkedHashMap<>();
        for (String key : resourceBundle.keySet()) {
            messages.put(key, messageSource.getMessage(key, locale));
        }
        return add("messages", messages);
    }

    /**
     * Добавить свойство
     * @param property Имя свойтсва
     * @param value Значение свойтсва
     * @return Конструктор
     */
    ConfigBuilder add(String property, Object value);

    /**
     * Добавить свойства
     * @param values Свойства
     * @return Конструктор
     */
    ConfigBuilder addAll(Map values);

    /**
     * Прочитать конфигурацию из файла поверх существующей
     * @param file Файл
     * @return Конструктор
     */
    default ConfigBuilder read(File file) {
        return read(new FileSystemResource(file));
    }

    /**
     * Прочитать конфигурацию из ресурса поверх существующей
     * @param resource Ресурс
     * @return Конструктор
     */
    default ConfigBuilder read(Resource resource) {
        try {
            return read(resource.getInputStream());
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
    }

    /**
     * Прочитать конфигурацию из входящего потока поверх существующей
     * @param content Входящий поток содержащий json
     * @return Конструктор
     */
    default ConfigBuilder read(InputStream content) {
        try {
            return read(IOUtils.toString(content, StandardCharsets.UTF_8));
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
    }

    /**
     * Прочитать конфигурацию из строки поверх существующей
     * @param content Строка содержащая json
     * @return Конструктор
     */
    ConfigBuilder read(String content);

    /**
     * Записать конфигурацию
     * @param out Писатель
     */
    void write(Writer out);

    /**
     * Записать конфигурацию в файл
     * @param file Файл
     */
    void write(File file);

    /**
     * Получить конфигурацию
     * @return Конфигурация
     */
    T get();

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy