/* * Copyright 1998-2016 Linux.org.ru * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ru.org.linux.util; import java.util.Map; public class ProfileHashtable { private final Map<String, Object> defaults; private final Map<String, String> settings; public ProfileHashtable(Map<String, Object> defaults, Map<String, String> settings) { this.defaults = defaults; this.settings = settings; if (this.settings == null || this.defaults == null) { throw new NullPointerException(); } } public String getString(String prop) { if (settings.get(prop) != null) { return settings.get(prop); } else { return (String) defaults.get(prop); } } public boolean getBoolean(String prop) { if (settings.get(prop) != null) { return Boolean.valueOf(settings.get(prop)); } else { Boolean value = (Boolean) defaults.get(prop); if (value == null) { throw new RuntimeException("unknown property '"+prop+"'; no default value"); } return value; } } public int getInt(String prop) { if (settings.get(prop) != null) { return Integer.parseInt(settings.get(prop)); } else { return (Integer) defaults.get(prop); } } public void setInt(String prop, Integer value) { if (value != null && value != getInt(prop)) { settings.put(prop, Integer.toString(value)); } } public void setString(String prop, String value) { if (value != null && !value.equals(getString(prop))) { settings.put(prop, value); } } public void setBoolean(String prop, boolean value) { if (value != getBoolean(prop)) { settings.put(prop, Boolean.toString(value)); } } public Map<String, String> getSettings() { return settings; } }