/* * Copyright (C) 2004-2015 L2J Server * * This file is part of L2J Server. * * L2J Server is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * L2J Server is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package com.l2jserver.util; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.Properties; import java.util.logging.Logger; /** * Simplifies loading of property files and adds logging if a non existing property is requested. * @author NosBit */ public final class PropertiesParser { private static final Logger _log = Logger.getLogger(PropertiesParser.class.getName()); private final Properties _properties = new Properties(); private final File _file; public PropertiesParser(String name) { this(new File(name)); } public PropertiesParser(File file) { _file = file; try (FileInputStream fileInputStream = new FileInputStream(file)) { try (InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, Charset.defaultCharset())) { _properties.load(inputStreamReader); } } catch (Exception e) { _log.warning("[" + _file.getName() + "] There was an error loading config reason: " + e.getMessage()); } } public boolean containskey(String key) { return _properties.containsKey(key); } private String getValue(String key) { String value = _properties.getProperty(key); return value != null ? value.trim() : null; } public boolean getBoolean(String key, boolean defaultValue) { String value = getValue(key); if (value == null) { _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue); return defaultValue; } if (value.equalsIgnoreCase("true")) { return true; } else if (value.equalsIgnoreCase("false")) { return false; } else { _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"boolean\" using default value: " + defaultValue); return defaultValue; } } public byte getByte(String key, byte defaultValue) { String value = getValue(key); if (value == null) { _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue); return defaultValue; } try { return Byte.parseByte(value); } catch (NumberFormatException e) { _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"byte\" using default value: " + defaultValue); return defaultValue; } } public short getShort(String key, short defaultValue) { String value = getValue(key); if (value == null) { _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue); return defaultValue; } try { return Short.parseShort(value); } catch (NumberFormatException e) { _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"short\" using default value: " + defaultValue); return defaultValue; } } public int getInt(String key, int defaultValue) { String value = getValue(key); if (value == null) { _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue); return defaultValue; } try { return Integer.parseInt(value); } catch (NumberFormatException e) { _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"int\" using default value: " + defaultValue); return defaultValue; } } public long getLong(String key, long defaultValue) { String value = getValue(key); if (value == null) { _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue); return defaultValue; } try { return Long.parseLong(value); } catch (NumberFormatException e) { _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"long\" using default value: " + defaultValue); return defaultValue; } } public float getFloat(String key, float defaultValue) { String value = getValue(key); if (value == null) { _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue); return defaultValue; } try { return Float.parseFloat(value); } catch (NumberFormatException e) { _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"float\" using default value: " + defaultValue); return defaultValue; } } public double getDouble(String key, double defaultValue) { String value = getValue(key); if (value == null) { _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue); return defaultValue; } try { return Double.parseDouble(value); } catch (NumberFormatException e) { _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"double\" using default value: " + defaultValue); return defaultValue; } } public String getString(String key, String defaultValue) { String value = getValue(key); if (value == null) { _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue); return defaultValue; } return value; } public > T getEnum(String key, Class clazz, T defaultValue) { String value = getValue(key); if (value == null) { _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue); return defaultValue; } try { return Enum.valueOf(clazz, value); } catch (IllegalArgumentException e) { _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be enum value of \"" + clazz.getSimpleName() + "\" using default value: " + defaultValue); return defaultValue; } } }