/*
* Application.java
*
* created: 19.8.2011
* charset: UTF-8
* license: MIT (X11) (See LICENSE file for full license)
*/
package cz.mp.k3bg;
import cz.mp.k3bg.log.DetailFormatter;
import cz.mp.k3bg.log.LoggerManager;
import cz.mp.util.app.Version;
import cz.mp.util.console.ConsoleCharset;
import java.io.File;
import java.nio.charset.Charset;
import java.nio.charset.IllegalCharsetNameException;
import java.nio.charset.UnsupportedCharsetException;
import java.util.Locale;
import java.util.logging.Logger;
/**
* Konstanty a základní informace o programu a jeho prostředí.
*
* @author Martin Pokorný
* @version 0.1
*/
public class Application {
/** Jméno tohoto programu. */
public static final String NAME = "k3bookgen";
/** Zkrácené jméno tohoto programu.
* Používá se ve jménech souborů a stylů. */
public static final String NAME_SHORT = "k3bg";
/**
* URL, domovské stránky programu.
*/
public static final String HOMEPAGE_URL =
"http://code.google.com/p/k3bookgen";
/** Jméno licence programu */
public static final String LICENCE_NAME = "MIT (X11)";
/** */
public static final boolean OS_IS_LINUX =
System.getProperty("os.name").toLowerCase().contains("linux");
/** */
public static final boolean OS_IS_WINDOWS =
System.getProperty("os.name").toLowerCase().contains("windows");
/** Výchozí kódování konce řádku. */
public static final String EOL =
System.getProperty("line.separator");
/** Výchozí kódování znaků textových souborů. */
public static final String DEFAULT_CHARSET =
System.getProperty("file.encoding");
/** Preferované kódování znaků; je <tt>{@value }</tt>. */
public static final String PREFERRED_CHARSET = "UTF-8";
/** Kódování znaků na konzoli. (Ve Windows je jiné než výchozí kódování) */
public static final String CONSOLE_DEFAULT_CHARSET =
ConsoleCharset.getName();
/** */
public static final String HOME_DIR =
System.getProperty("user.home");
/** */
public static final String USER_NAME =
System.getProperty("user.name");
/** */
public static final String JRE_VERSION =
System.getProperty("java.version");
/** */
public static final String JVM_VENDOR =
System.getProperty("java.vm.vendor");
/**
* Označení verze tohoto programu.
* (Např. 0.1 (2011-12-31))
*/
public static final String VERSION_FULL_NAME;
static {
Version v = new Version(Application.class.getPackage());
VERSION_FULL_NAME = v.toString();
}
/**
* Číslo verze programu. Klasické značení.
* Nemělo by obsahovat jiné znaky než '.' a číslice
* (Např. 0.1)
*/
public static final String VERSION_NUMBER;
static {
Version v = new Version(Application.class.getPackage());
VERSION_NUMBER = v.getSpecificationVersion();
}
/**
* Adresář pro konfiguraci a pod.
*
* <tt>{@value }</tt>
*/
public static final String CFG_DIR =
// ".";
HOME_DIR + File.separator + "." + NAME_SHORT;
static {
new File(CFG_DIR).mkdirs();
}
/**
* Výchozí cesta k souboru se záznamem činnosti.
*
* <tt>{@value }</tt>
*/
public static final String DEFAULT_LOG_FILE_NAME =
CFG_DIR + File.separator + NAME_SHORT + ".log";
// -----
/** */
private Application() {
}
// -----
private static final boolean DEBUG = false;
@SuppressWarnings("NonConstantLogger")
private static Logger logger;
// LoggerManager.getLogger(Application.class, DEBUG);
private static final boolean DEFAULT_DEBUG_ALL = false;
/** */
private static boolean globalDebug = DEFAULT_DEBUG_ALL;
/**
* Odložená inicializace loggeru, kvůli tomu, že
* LoggerManager používá konstatnty z této třídy...
* Hack.
* Volat před použitím loggeru(!).
*/
private static void initLogger() {
if (logger == null) {
logger = LoggerManager.getLogger(Application.class, DEBUG);
}
}
/**
*
*/
public static boolean isDebug() {
return globalDebug;
}
/**
*
*/
public static void setDebug(boolean debug) {
Application.globalDebug = debug;
initLogger(); // (! nutné před zalogováním)
logger.config(" debug mode = " + debug);
}
/**
*
*/
public static void logConfigInfo() {
initLogger(); // (! nutné před zalogováním)
logger.info(" version: " +
new Version(Application.class.getPackage()).toString());
logger.config(" log levels : " + DetailFormatter.getLegend());
logger.config(" log filename = " + LoggerManager.getLogFileName());
logger.config(" debug mode = " + isDebug());
logger.config(" default file encoding = " + DEFAULT_CHARSET);
try {
if (! Charset.forName(CONSOLE_DEFAULT_CHARSET)
.equals(Charset.forName(DEFAULT_CHARSET))) {
logger.config(" default console encoding = "
+ CONSOLE_DEFAULT_CHARSET);
}
} catch (IllegalCharsetNameException ex) {
logger.warning(ex.getMessage());
} catch (UnsupportedCharsetException ex) {
logger.warning(ex.getMessage());
}
logger.config(" default locale = " + Locale.getDefault());
}
} // Application