/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program 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 version 2 of the License.
*
* This program 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, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.communications.util.prefs;
/**
* This setup instruction will perform preprocessing to determine if the user should be prompted for the preference
* value or not. If a given boolean preference (called the "enablement preference") is <code>true</code>, then this
* instruction will leave the prompt message as-is thus prompting the user for a new value. If that enablement
* preference is <code>false</code>, then the prompt message will be set to <code>null</code> forcing this instruction's
* new preference value to be the default value.
*
* <p>Use this when there are a set of preferences that are configuration settings for a particular feature that can be
* enabled or disabled. If that feature is disabled (via the enablement preference), then the user should not be asked
* to configure that feature any further. If that feature is enabled, then it makes sense to ask the user to configure
* the rest of that feature's settings.</p>
*
* <p>This class derives from {@link DefaultSetupInstruction} so it will default to the existing preference value if one
* exists; otherwise, the original {@link #getDefaultValue()} is used.</p>
*
* @author John Mazzitelli
*/
public class PromptIfEnabledSetupInstruction extends DefaultSetupInstruction {
private final String m_enablementPreference;
private final boolean m_enablementPreferenceDefault;
/**
* The <code>enablement_preference</code> is the name of the boolean preference that will determine if this
* instruction will or will not prompt the user. The <code>enablement_preference_default</code> is the default value
* of the enablement preference if it is not defined (that is, if it is not set in the set of preferences given to
* this instruction via {@link #setPreferences(java.util.prefs.Preferences)}).
*
* @see SetupInstruction#SetupInstruction(String, String, SetupValidityChecker, String, String)
*/
public PromptIfEnabledSetupInstruction(String preference_name, String default_value,
SetupValidityChecker validity_checker, String prompt_message, String help_message,
String enablement_preference, boolean enablement_preference_default) throws IllegalArgumentException {
super(preference_name, default_value, validity_checker, prompt_message, help_message);
m_enablementPreference = enablement_preference;
m_enablementPreferenceDefault = enablement_preference_default;
}
/**
* If the enablement preference's value is <code>true</code>, then this method does nothing, but if it is <code>
* false</code>, this method will set the {@link #setPromptMessage(String) prompt} to <code>null</code> so the user
* isn't bothered to ask to configure this setting.
*
* @see SetupInstruction#preProcess()
*/
public void preProcess() {
super.preProcess();
if (!getPreferences().getBoolean(m_enablementPreference, m_enablementPreferenceDefault)) {
// the "feature" is not enabled, so we do not have to bother to prompt the user
setPromptMessage(null);
}
return;
}
}