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

app.config.Sys Maven / Gradle / Ivy

package app.config;

import java.nio.charset.StandardCharsets;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.logging.Level;
import java.util.regex.Pattern;

import app.controller.Main;
import app.model.Account;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import framework.Db.Setup;
import framework.Message;
import framework.Tool;
import framework.annotation.Config;
import framework.annotation.Help;
import framework.annotation.Mapping;
import framework.annotation.Separator;

/** not use primitive type because not apply property by optimized */
@SuppressWarnings("javadoc")
@SuppressFBWarnings("MS_SHOULD_BE_FINAL")
@Config({ "sys.config", "sys.message" })
public class Sys {

    public static class Log {
        @Help("log output folder")
        public static String folder = "/temp/";

        @Help("log filename pattern(DateTimeFormatter format, 'll' replace to level)")
        public static DateTimeFormatter file_pattern = Tool.getFormat("'ll_'uuuuMMdd'.log'", Locale.JAPAN);

        @Help("log line format(1: timestamp, 2: called method, 3: logger name, 4: level, 5: message, 6: exception, 7: request id, 8: session id, 9: application id, 10:remote address and port)")
        public static String format = "%9$08X|%8$08X|%7$08X@%10$s %1$tY-%1$tm-%1$tdT%1$tH:%1$tM:%1$tS.%1$tL %4$-6s[%3$s] %5$s %6$s%n";

        @Help("output file log level")
        public static Level level = Level.CONFIG;

        @Help("output console log level")
        public static Optional console_level = Optional.empty();

        @Help("Class prefixes of suppress log")
        @Separator(',')
        public static List ignore_prefixes = Tool.list("com.sun.");

        @Help("Class prefixes of skip stack trace")
        public static List skip_prefixes = Tool.list("java.", "framework.");

        @Help("shared lock if true else exclusive lock")
        public static boolean is_shared = true;

        @Help("eval log max output letters")
        public static int eval_max_letters = 100;

        @Help("request parameter max output letters")
        public static int parameter_max_letters = 50;

        @Help("package name compact to first character if true")
        public static boolean compact_package = true;
    }

    public static class Mail {
        @Help("SMTP Auth user")
        public static String user = "";
        @Help("SMTP Auth password")
        public static String password = "";
        @Help("SMTP host")
        public static String host = "smtp.gmail.com";
        @Help("ISO-2022-JP or UTF-8 in Japan")
        public static String charset = StandardCharsets.UTF_8.name();
        @Help("Mail encoding")
        public static String encoding = "base64";
        @Help("SMTP port")
        public static int port = 587;
        @Help("SMTP Auth enabled")
        public static boolean auth = true;
        @Help("SMTP Auth with tls")
        public static boolean startTls = true;
        @Help("Connection timeout")
        public static int connectionTimeout = 10 * 1000;
        @Help("Read timeout")
        public static int readTimeout = 10 * 1000;
        @Help("Debug output")
        public static boolean debug = true;
    }

    public static class Db {
        @Help("default database suffix")
        public static String suffix = "h2";

        @Help("datasource generator class")
        public static String datasource_class = "";

        @Help({ "database auto config", "CREATE: drop and create", "[UPDATE]: create if not exists", "RELOAD: delete and insert", "NONE: no operation" })
        public static Setup setup = Setup.UPDATE;

        @Help("session store db suffix")
        public static String session_suffix = suffix;

        @Help("h2 database connection string(inclucde id and password)")
        public static String h2 = "jdbc:h2:~/test";

        @Help("h2 tcp database connection string(inclucde id and password)")
        public static String h2tcp = "jdbc:h2:tcp://localhost/~/test";

        @Help("Oracle tcp database connection string(inclucde id and password)")
        public static String oracle = "jdbc:oracle:thin:system/manager@localhost:1521:orcl";

        @Help("MySQL tcp database connection string(inclucde id and password)")
        public static String mysql = "jdbc:mysql://localhost/test?user=root&password=&characterEncoding=utf8";

        @Help("Postgres tcp database connection string(inclucde id and password)")
        public static String postgres = "jdbc:postgresql://localhost:5432/postgres?user=postgres&password=¤tSchema=public";

        @Help("SQLServer tcp database connection string(inclucde id and password)")
        public static String sqlserver = "jdbc:sqlserver://localhost:1433;user=sa;password=;schema=dbo";
    }

    @Help("session cookie name")
    public static String session_name = "JavaWebSession";
    
    @Help("session timeout minutes(indefinite if negative value)")
    public static int session_timeout_minutes = 30;

    @Help("session cleaning interval milliseconds")
    public static long session_clean_millis = 30 * 1000;

    @Help("upload folder")
    public static String upload_folder = "/temp/";

    @Help("sql folder")
    public static String sql_folder = "/sql/";

    @Help({ "add http response headers", "X-UA-Compatible: IE=edge #IE version", "X-Content-Type-Options: nosniff #IE auto detect disabled",
            "X-Download-Options: noopen #IE direct open disabled",
            "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0|Expires: -1|Pragma: no-cache # cache disabled" })
    @Separator(value = '|', pair = ':')
    public static Map headers = Tool
        .map("X-UA-Compatible", "IE=edge", "Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0", "X-Content-Type-Options", "nosniff", "X-Download-Options", "noopen", "Pragma", "no-cache", "Expires", "-1");

    @Help("htdocs folder")
    public static String document_root_folder = "/view/";

    @Help("template folder")
    public static String template_folder = "/template/";

    @Help("include file pattern to apply format")
    public static Pattern format_include_regex = Pattern.compile(".*\\.(html?|js|css)");

    @Help("exclude file pattern to apply format")
    public static Pattern format_exclude_regex = Pattern.compile(".*[.]min[.](html?|js|css)");

    @Help("scheduled job thread count")
    public static int job_threads = 1;

    @Help("login method: static java.util.Optional ?(java.lang.String loginId, java.lang.String password)")
    public static String login_method = Account.class.getName() + ".loginWithConfig";

    @Help("accounts data(loginId:password:name:roles|...)")
    @Separator('|')
    public static List accounts = Tool.list("admin:Adm1n:Administrator:Administrator:🎅", "user:U5er:User:User:👨");

    @Help("file extension of text type contents")
    @Separator('|')
    public static List text_extensions = Tool
        .list(".txt", ".htm", ".html", ".js", ".json", ".css", ".csv", ".tsv", ".xml", ".ini", ".yml", ".properties", ".php", ".java", ".jsp", ".xhtml");

    @Help("http port(disabled if empty)")
    @SuppressFBWarnings("MS_CANNOT_BE_FINAL")
    public static Optional http_port = Tool.of(80);

    @Help("https port(disabled if empty, standard value is 443)")
    public static Optional https_port = Tool.of();

    @Help("https private key(etc. host.key)")
    public static Optional https_key_file = Tool.of();

    @Help("https cert(etc. host.crt)")
    public static List https_cert_files = Tool.list();

    @Help("context path")
    public static String context_path = "/";

    @Help("h2 web interface port(disabled if empty)")
    public static Optional h2_web_port = Tool.of();

    @Help("h2 web interface access allowed remote client")
    public static boolean h2_web_allow_remote = false;

    @Help("h2 web interface using https")
    public static boolean h2_web_ssl = false;

    @Help("h2 tcp server port(disabled if empty)")
    public static Optional h2_tcp_port = Tool.of();

    @Help("h2 tcp server access allowed remote client")
    public static boolean h2_tcp_allow_remote = false;

    @Help("h2 tcp server using https")
    public static boolean h2_tcp_ssl = false;

    @Help("cluster node name suffix(for session cookie, It must be the same length in each cluster)")
    public static String cluster_suffix = "";

    @Help("job packages")
    public static List job_packages = Tool.list(Main.class.getPackage()
        .getName());
    
    @Help("separator of array to text")
    public static String array_separator = "\n,\n";

    @Help("prefix of array to text")
    public static String array_prefix = "[\n";

    @Help("suffix of array to text")
    public static String array_suffix = "\n]";

    @Help("Initial vector for Tool.enctypt and decrypt")
    public static String IV = "CYKJRWWIYWJHSLEU";

    @Help("Session store(StoreMemory or StoreDb or StoreRedis)")
    public static String session_store = "framework.Standalone$StoreMemory";

    @Help("host if use redis")
    public static String session_redis_host = "127.0.0.1";

    @Help("port if use redis")
    public static int session_redis_port = 6379;

    @Help("redirect url if not loggged in(not redirect if empty)")
    public static Optional redirect_if_not_login = Tool.of("/admin/login.html");

    @Help("Default pages")
    public static List default_pages = Tool.list("index.html", "index.htm");

    @Help("Aliases if key file is not exists")
    @Separator(pair = '=')
    public static Map aliases = Tool.map("/", "/index.html", "/index.html", "/admin/index.html");

    @Help("Default avator")
    public static String default_avator = "⛄";

    @Help("Request method change parameter key")
    public static String request_method_key = "_method";

    @Help("Background css")
    public static String background = "#23282d";

    @Help("Nendo start month")
    public static int nendo_start_month = 4;

    public enum Item implements Message {
        title,
        login,
        logout,
        error,
        loginId,
        password,
        update,
        insert,
        delete,
        before,
        after,
        back,
        quit,
        diff,
        index,
        compact,
        full,
        @Mapping("©2017, All Rights Reserved.")
        copyright,
        @Mapping("...")
        reader,
        run,
        clear,
        config,
        hash,
        @Mapping("Database Settings")
        dbSettings,
        @Mapping("Database Console")
        dbConsole,
        @Mapping("Administrator menu")
        adminTitle,
        reset,
        @Mapping("Account list")
        accountList,
        yes,
        no,
        @Mapping("OK")
        ok,
        route,
        file;

        @Override
        public String toString() {
            return message();
        }
    }

    public enum Alert implements Message {
        @Mapping("You do not have access rights. Please login with authorized account.")
        forbidden,
        @Mapping("Login ID or password is wrong.")
        loginFailed,
        @Mapping("System error!")
        error,
        @Mapping("Please enter from ${min} to ${value} characters.")
        size,
        @Mapping("Input error!")
        inputError,
        @Mapping("Invalid characer")
        letters,
        @Mapping("Input required")
        matches,
        @Mapping("Invalid pattern")
        required,
        @Mapping("Value is out of range")
        range,
        @Mapping("Time is out of range")
        time,
        @Mapping("Session Timeout, please login.")
        timeout,
        ;

        @Override
        public String toString() {
            return message();
        }
    }

    public enum Prompt implements Message {
        @Mapping("Please input user ID and password and press the login button.")
        login,;

        @Override
        public String toString() {
            return message();
        }
    }

    public enum Confirm implements Message {
        @Mapping("Do you want to log out?")
        logout,;

        @Override
        public String toString() {
            return message();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy