001/*
002 * Stallion Core: A Modern Web Framework
003 *
004 * Copyright (C) 2015 - 2016 Stallion Software LLC.
005 *
006 * This program is free software: you can redistribute it and/or modify it under the terms of the
007 * GNU General Public License as published by the Free Software Foundation, either version 2 of
008 * the License, or (at your option) any later version. This program is distributed in the hope that
009 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
011 * License for more details. You should have received a copy of the GNU General Public License
012 * along with this program.  If not, see <http://www.gnu.org/licenses/gpl-2.0.html>.
013 *
014 *
015 *
016 */
017
018package io.stallion.plugins;
019
020import io.stallion.Context;
021import io.stallion.services.Log;
022import io.stallion.settings.ISettings;
023import io.stallion.settings.SettingsLoader;
024
025import java.util.Map;
026
027import static io.stallion.utils.Literals.map;
028
029/**
030 * A base class for defining plugin settings. Uses hierarchical settings loader.
031 */
032public abstract class BasePluginSettings implements ISettings {
033    private static Map<String, BasePluginSettings> instanceByName = map();
034
035    public static  <T extends BasePluginSettings> T getInstance(Class<T> cls, String pluginName) {
036        BasePluginSettings instance = instanceByName.getOrDefault(pluginName, null);
037        if (instance == null) {
038            SettingsLoader loader = new SettingsLoader();
039            try {
040                instance = loader.loadSettings(pluginName, cls);
041                instanceByName.put(pluginName, instance);
042            } catch (Exception e) {
043                Log.exception(e, "Error loading plugin settings");
044            }
045        }
046        return (T)instance;
047    }
048}