Java tutorial
/** * Copyright (c) 2014 Matthias Jaenicke <matthias.jaenicke@student.kit.edu>, * Matthias Plappert <undkc@student.kit.edu>, * Julien Duman <uncyc@student.kit.edu>, * Christian Dreher <uaeef@student.kit.edu>, * Wasilij Beskorovajnov <uajkm@student.kit.edu> and * Aydin Tekin <aydin.tekin@student.kit.edu> * * Released under the MIT license (refer to LICENSE.md) * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package edu.kit.iks.CryptographicsLib; import java.io.File; import java.io.IOException; import java.util.Locale; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdom2.input.SAXBuilder; import org.xnap.commons.i18n.I18n; import org.xnap.commons.i18n.I18nFactory; /** * This class allows to configure certain parameters of the application * at a central place. * * @author Matthias Plappert */ public class Configuration { /** * Shared instance for singleton */ static private Configuration sharedInstance = null; /** * The timeout after which a user is considered idle in milliseconds. */ private int idleTimeout = 5 * 60 * 1000; /** * The timeout after which the program resets itself after a user is * idle in milliseconds. */ private int resetTimeout = 60 * 1000; /** * Indicates if the debug mode is enabled. */ private boolean debugMode = false; /** * Indicates if the fullscreen mode is enabled. */ private boolean fullscreenMode = true; /** * Indicates if the look and feel is enabled. */ private boolean lookAndFeel = true; /** * Indicates if the mouse cursor is enabled. */ private boolean mouseCursor = false; /** * The language code. */ private String languageCode = "de"; /** * Marked as private to enforce singleton pattern. */ private Configuration(String path) { try { // Load document. SAXBuilder saxBuilder = new SAXBuilder(); Document document = saxBuilder.build(new File(path)); // Get root element. Element element = document.getRootElement(); for (Element child : element.getChildren()) { parseConfigElement(child); } } catch (JDOMException | IOException e) { // Could not read configuration. Use default values and print stack // trace. e.printStackTrace(); } } /** * Parses the values of the configuration XML. * @param child the current child element */ private void parseConfigElement(Element child) { String value = child.getValue(); String name = child.getName(); switch (name) { case "idleTimeout": this.idleTimeout = Integer.parseInt(value); break; case "resetTimeout": this.resetTimeout = Integer.parseInt(value); break; case "debugMode": this.debugMode = Boolean.parseBoolean(value); break; case "fullscreenMode": this.fullscreenMode = Boolean.parseBoolean(value); break; case "lookAndFeel": this.lookAndFeel = Boolean.parseBoolean(value); break; case "mouseCursor": this.mouseCursor = Boolean.parseBoolean(value); break; case "languageCode": this.languageCode = value; break; default: // Do not use the logger here since this happens very early // and the logger might not be configured yet. System.out.println("Unknown configuration element " + child.getName() + ". Skipping."); break; } } /** * Returns a shared instance (singleton pattern) * @return the shared instance */ static public Configuration getInstance() { if (sharedInstance == null) { sharedInstance = new Configuration("config.xml"); } return sharedInstance; } /** * Returns the time in milliseconds after that a user is considered idle. * @return the timeout in milliseconds */ public int getIdleTimeout() { return this.idleTimeout; } /** * Returns the time in milliseconds for the program reset after a user is * detected as idle. * @return the timeout in milliseconds */ public int getResetTimeout() { return this.resetTimeout; } /** * Returns true if the debug mode should be used. * @return true if the debug mode is enabled */ public boolean isDebugModeEnabled() { return this.debugMode; } /** * Returns true if the mouse cursor should be visible. This setting * will always return false if debug mode is disabled. * * @return true if the mouse cursor should be visible */ public boolean isMouseCursorEnabled() { if (this.isDebugModeEnabled()) { return this.mouseCursor; } else { return false; } } /** * Returns true if the look and feel should be enabled. This setting * will always return true if debug mode is disabled. * * @return true if the look and feel should be enabled */ public boolean isLookAndFeelEnabled() { if (this.isDebugModeEnabled()) { return this.lookAndFeel; } else { return true; } } /** * Returns true if the fullscreen mode should be enabled. This setting * will always return true if debug mode is disabled. * @return */ public boolean isFullscreenModeEnabled() { if (this.isDebugModeEnabled()) { return this.fullscreenMode; } else { return true; } } /** * Returns the language code used for localization. * @return the language code */ public String getLanguageCode() { return this.languageCode; } /** * Returns the I18n instance for the package the given * class is in * * @param className fully qualified class name (ClassName.class) * @return I18n instance to use the tr functions */ @SuppressWarnings("rawtypes") public I18n getI18n(Class className) { Locale loc = new Locale(this.getLanguageCode()); I18n i18n = I18nFactory.getI18n(className, loc); return i18n; } }