package org.rapidoid.config; import org.rapidoid.RapidoidThing; import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Since; import org.rapidoid.collection.Coll; import org.rapidoid.env.Env; import org.rapidoid.env.RapidoidEnv; import org.rapidoid.lambda.Mapper; import org.rapidoid.log.Log; import org.rapidoid.log.LogLevel; import org.rapidoid.scan.ClasspathUtil; import org.rapidoid.u.U; import org.rapidoid.util.Msc; import java.util.Map; /* * #%L * rapidoid-commons * %% * Copyright (C) 2014 - 2017 Nikolche Mihajlovski and contributors * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ @Authors("Nikolche Mihajlovski") @Since("2.0.0") public class Conf extends RapidoidThing { private static final String CONFIG_NAME = Msc.isPlatform() ? "rapidoid" : "config"; public static final Config ROOT = new ConfigImpl(CONFIG_NAME, true); private static final Map<String, Config> SECTIONS = Coll.autoExpandingMap(new Mapper<String, Config>() { @Override public Config map(String name) throws Exception { return createSection(name); } }); public static final Config USERS = section("users"); public static final Config JOBS = section("jobs"); public static final Config OAUTH = section("oauth"); public static final Config JDBC = section("jdbc"); public static final Config HIBERNATE = section("hibernate"); public static final Config C3P0 = section("c3p0"); public static final Config HIKARI = section("hikari"); public static final Config APP = section("app"); public static final Config GUI = section("gui"); public static final Config HTTP = section("http"); public static final Config REVERSE_PROXY = section("reverse-proxy"); public static final Config NET = section("net"); public static final Config ON = section("on"); public static final Config ADMIN = section("admin"); public static final Config TOKEN = section("token"); public static final Config PROXY = section("proxy"); public static final Config LOG = section("log"); public static final Config API = section("api"); public static final Config PAGES = section("pages"); public static final Config BENCHMARK = section("benchmark"); static void applyConfig(Config config) { RapidoidEnv.touch(); if (Env.isInitialized()) { if (!Env.production()) { Log.options().fancy(true); } } if (config == ROOT) { String root = Env.root(); if (Msc.dockerized()) { U.must(U.notEmpty(root), "The root must be configured in a Dockerized environment!"); if (!APP.has("jar")) APP.set("jar", Msc.path(root, "app.jar")); } String appJar = APP.entry("jar").str().getOrNull(); if (U.notEmpty(appJar)) { ClasspathUtil.appJar(appJar); } boolean fancy = LOG.entry("fancy").bool().or(Msc.hasConsole()); if (fancy) { Log.options().fancy(true); } String logLevel = LOG.entry("level").or("info"); Log.setLogLevel(LogLevel.valueOf(logLevel.toUpperCase())); } } public static synchronized void reset() { ROOT.reset(); } public static synchronized Config section(String name) { return SECTIONS.get(name); } public static synchronized Config section(Class<?> clazz) { return section(clazz.getSimpleName()); } private static Config createSection(String name) { return ROOT.sub(name); } public static boolean isInitialized() { return ROOT.isInitialized(); } public static void setFilenameBase(String filenameBase) { ROOT.setFilenameBase(filenameBase); } public static void setPath(String path) { ROOT.setPath(path); } }