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

io.inugami.configuration.services.resolver.strategies.HomePluginConfigStrategy Maven / Gradle / Ivy

/* --------------------------------------------------------------------
 *  Inugami
 * --------------------------------------------------------------------
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 3.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see .
 */
package io.inugami.configuration.services.resolver.strategies;

import io.inugami.api.exceptions.TechnicalException;
import io.inugami.configuration.exceptions.NotPluginConfigurationException;
import io.inugami.configuration.models.EventConfig;
import io.inugami.configuration.models.plugins.EventsFileModel;
import io.inugami.configuration.models.plugins.PluginConfiguration;
import io.inugami.configuration.services.PluginConfigurationLoader;
import io.inugami.configuration.services.resolver.ConfigurationResolverException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.regex.Pattern;

/**
 * ClassLoaderPluginConfigStrategy
 *
 * @author patrick_guillerm
 * @since 27 déc. 2016
 */
public class HomePluginConfigStrategy implements PluginConfigResolverStrategy {

    // =========================================================================
    // ATTRIBUTES
    // =========================================================================
    private static final Logger LOGGER = LoggerFactory.getLogger(HomePluginConfigStrategy.class);

    private static final Pattern FILE_PATTERN = Pattern.compile("^plugin_.*.xml$");

    public final File homePath;

    private final PluginConfigurationLoader loader;

    // =========================================================================
    // CONSTRUCTOR
    // =========================================================================

    public HomePluginConfigStrategy(final PluginConfigurationLoader pluginLoader, final File homePath) {
        this.loader = pluginLoader;
        this.homePath = homePath;
    }

    // =========================================================================
    // METHODS
    // =========================================================================
    @Override
    public Optional> resolve() throws ConfigurationResolverException {
        Optional> result = Optional.empty();
        final List     config = process();
        if (config != null) {
            result = Optional.of(config);
        }
        return result;
    }

    @Override
    public Optional resolveEventFile(final PluginConfiguration config,
                                                  final EventsFileModel eventFile) throws ConfigurationResolverException {
        Optional result = Optional.empty();

        final Optional eventConfigFile = resolveEventConfigFile(eventFile);
        if (eventConfigFile.isPresent()) {
            try {
                result = loader.loadEventConfigFromFile(config.getGav(), eventConfigFile.get());
            } catch (final TechnicalException e) {
                throw new ConfigurationResolverException(e.getMessage(), e);
            }
        }

        return result;
    }

    private Optional resolveEventConfigFile(final EventsFileModel eventFile) {
        Optional result = Optional.empty();
        final String[] files  = homePath.list((dir, name) -> name.equals(eventFile.getName()));
        if ((files != null) && (files.length > 0)) {
            result = Optional.of(new File(homePath.getAbsolutePath() + File.separator + files[0]));
        }

        return result;
    }

    // =========================================================================
    // PRIVATE API
    // =========================================================================
    private List process() throws ConfigurationResolverException {
        List result = null;
        final List          files  = resolveFiles();
        if (files != null) {
            result = new ArrayList<>();
            for (final File file : files) {
                Optional config = Optional.empty();
                try {
                    config = loader.loadFromFile(file);
                } catch (final NotPluginConfigurationException except) {
                    LOGGER.error("found not plugin configuration file : type={} path:{}", except.getClassName(),
                                 except.getFile().getAbsolutePath());
                } catch (final TechnicalException e) {
                    throw new ConfigurationResolverException(e.getMessage(), e);
                }
                if (config.isPresent()) {
                    result.add(config.get());
                }
            }
        }

        return result;
    }

    protected List resolveFiles() {
        List     result = null;
        final String[] files  = homePath.list((dir, name) -> FILE_PATTERN.matcher(name).matches());
        if (files != null) {
            result = new ArrayList<>();
            for (final String name : files) {
                result.add(new File(homePath.getAbsolutePath() + File.separator + name));
            }
        }
        return result;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy