/** * License Agreement for OpenSearchServer * <p/> * Copyright (C) 2012-2016 Emmanuel Keller / Jaeksoft * <p/> * http://www.open-search-server.com * <p/> * This file is part of OpenSearchServer. * <p/> * OpenSearchServer 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. * <p/> * OpenSearchServer 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. * <p/> * You should have received a copy of the GNU General Public License * along with OpenSearchServer. * If not, see <http://www.gnu.org/licenses/>. **/ package com.jaeksoft.searchlib.util.properties; import com.jaeksoft.searchlib.SearchLibException; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; public class PropertyManager { private final HashMap<String, PropertyItem<?>> propertyMap; private final File propFile; private final Properties properties; public PropertyManager(File file) throws IOException { propFile = file; propertyMap = new HashMap<>(); properties = new Properties(); if (propFile.exists()) { FileInputStream inputStream = null; try { inputStream = new FileInputStream(propFile); properties.loadFromXML(inputStream); } catch (IOException e) { throw e; } finally { if (inputStream != null) inputStream.close(); } } } void add(PropertyItem<?> propertyItem) { propertyMap.put(propertyItem.getName(), propertyItem); } public void save() throws IOException { FileOutputStream fos = null; try { fos = new FileOutputStream(propFile); properties.storeToXML(fos, ""); } catch (IOException e) { throw e; } finally { if (fos != null) fos.close(); } } public PropertyItem<Integer> newIntegerProperty(String name, Integer defaultValue, Integer min, Integer max) throws NumberFormatException, IOException { PropertyItem<Integer> propertyItem = new PropertyItem<Integer>(this, name, defaultValue, min, max); String value = properties.getProperty(name); if (value != null) propertyItem.initValue(Integer.parseInt(value)); return propertyItem; } public PropertyItem<Boolean> newBooleanProperty(String name, Boolean defaultValue) { PropertyItem<Boolean> propertyItem = new PropertyItem<Boolean>(this, name, defaultValue, null, null); String value = properties.getProperty(name); if (value != null) propertyItem .initValue("1".equals(value) || "true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value)); return propertyItem; } public PropertyItem<String> newStringProperty(String name, String defaultValue) { PropertyItem<String> propertyItem = new PropertyItem<String>(this, name, defaultValue, null, null); String value = properties.getProperty(name); if (value != null) propertyItem.initValue(value); return propertyItem; } public void put(PropertyItem<?> propertyItem) throws IOException { propertyItem.put(properties); save(); } public void fillProperties(Map<String, Comparable> map) { for (PropertyItem<?> item : propertyMap.values()) map.put(item.getName(), item.getValue()); } public void setProperty(String name, Comparable value) throws IOException, SearchLibException { PropertyItem<?> item = propertyMap.get(name); if (item != null) item.setValueObject(value); } }