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}