/*
* This file is part of muCommander, http://www.mucommander.com
* Copyright (C) 2002-2016 Maxence Bernard
*
* muCommander is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* muCommander 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.mucommander.commons.conf;
/**
* An event which indicates that configuration has been modified.
* <p>
* The event is passed to every {@link ConfigurationListener} object which registered to receive such events using the
* {@link Configuration}'s {@link Configuration#addConfigurationListener(ConfigurationListener) addConfigurationListener} method.
* Each such listener object gets this <code>ConfigurationEvent</code> when the event occurs.
* </p>
* @see ConfigurationListener
* @see Configuration
* @author Nicolas Rinaudo
*/
public class ConfigurationEvent {
// - Instance variables --------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------------------------
/** Name of the variable that has been modified. */
private final String name;
/** Variable's new value. */
private final String value;
/** Configuration to which the event relates. */
private final Configuration configuration;
// - Initialisation ------------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------------------------
/**
* Creates a new configuration event.
* <p>
* The event will describe a modification of variable <code>name</code> in configuration
* <code>configuration</code>, and indicate that it has been set to <code>value</code>.
* </p>
* <p>
* <code>null</code> is an accepted value for parameter <code>value</code>, and will be
* interpreted to mean that the variable has been deleted.
* </p>
* @param configuration configuration to which the event relates.
* @param name name of the variable that was modified.
* @param value value of the variable that was modified.
*/
public ConfigurationEvent(Configuration configuration, String name, String value) {
this.name = name;
this.value = value;
this.configuration = configuration;
}
// - Variable access -----------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------------------------
/**
* Returns the configuration to which the event relates.
* @return the configuration to which the event relates.
*/
public Configuration getConfiguration() {
return configuration;
}
/**
* Returns the name of the variable that was modified.
* <p>
* The returned value will be the variable's fully qualified name. If, for example, the
* modified variable is <code>test.somevar</code>, this is what this method will return,
* not <code>somevar</code>.
* </p>
* @return the name of the variable that was modified.
*/
public String getVariable() {
return name;
}
/**
* Returns the new value for the modified variable.
* <p>
* If the variable has been deleted, this method will return <code>null</code>.
* </p>
* @return the new value for the modified variable.
*/
public String getValue() {
return value;
}
/**
* Returns the new value for the modified variable cast as an integer.
* <p>
* If the variable has been deleted, this method will return 0.
* </p>
* @return the new value for the modified variable.
* @throws NumberFormatException if {@link #getValue()} cannot be cast as an integer.
*/
public int getIntegerValue() throws NumberFormatException {
return ConfigurationSection.getIntegerValue(value);
}
/**
* Returns the new value for the modified variable cast as a float.
* <p>
* If the variable has been deleted, this method will return 0.
* </p>
* @return the new value for the modified variable.
* @throws NumberFormatException if {@link #getValue()} cannot be cast as a float
*/
public float getFloatValue() throws NumberFormatException {
return ConfigurationSection.getFloatValue(value);
}
/**
* Returns the new value for the modified variable cast as a boolean.
* <p>
* If the variable has been deleted, this method will return <code>false</code>.
* </p>
* @return the new value for the modified variable.
*/
public boolean getBooleanValue() {
return ConfigurationSection.getBooleanValue(value);
}
/**
* Returns the new value for the modified variable as a long.
* <p>
* If the variable has been deleted, this method will return 0.
* </p>
* @return the new value for the modified variable.
* @throws NumberFormatException if {@link #getValue()} cannot be cast as a long.
*/
public long getLongValue() throws NumberFormatException {
return ConfigurationSection.getLongValue(value);
}
/**
* Returns the new value for the modified variable cast as a double.
* <p>
* If the variable has been deleted, this method will return 0.
* </p>
* @return the new value for the modified variable.
* @throws NumberFormatException if {@link #getValue()} cannot be cast as a double.
*/
public double getDoubleValue() {
return ConfigurationSection.getDoubleValue(value);
}
/**
* Returns the new value for the modified variable cast as a {@link ValueList}.
* <p>
* If the variable has been deleted, this method will return null.
* </p>
* @param separator string used to tokenise the variable's value.
* @return the new value for the modified variable.
*/
public ValueList getListValue(String separator) {
return ConfigurationSection.getListValue(value, separator);
}
}