/*
* 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.gui.admin.config;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.rhq.core.domain.common.composite.SystemSetting;
import org.rhq.enterprise.gui.legacy.StringConstants;
import org.rhq.enterprise.gui.legacy.action.BaseValidatorForm;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.measurement.util.NumberConstants;
public class SystemConfigForm extends BaseValidatorForm {
private String baseUrl = "";
private String agentMaxQuietTimeAllowed = "";
private String agentMaxQuietTimeAllowedVal = "0";
private boolean enableAgentAutoUpdate = false;
private boolean enableDebugMode = false;
private boolean enableExperimentalFeatures = false;
private String helpUserId = "";
private String helpPassword = "";
private String maintIntervalVal = "0";
private String maintInterval = "";
private String rtPurgeVal = "0";
private String rtPurge = "";
private String alertPurgeVal = "0";
private String alertPurge = "";
private String eventPurgeVal = "0";
private String eventPurge = "";
private String traitPurgeVal = "0";
private String traitPurge = "";
private String availPurgeVal = "0";
private String availPurge = "";
private String baselineFrequencyVal = "0";
private String baselineFrequency = "";
private String baselineDataSetVal = "0";
private String baselineDataSet = "";
private String ldapUrl = "";
private boolean ldapSsl = false;
private String ldapLoginProperty = "";
private String ldapSearchBase = "";
private String ldapSearchFilter = "";
private String ldapGroupFilter = "";
private String ldapGroupMember = "";
private String ldapUsername = "";
private String ldapPassword = "";
private Boolean ldapEnabled = null;
private boolean reindex = false;
private boolean allowResourceGenericPropertiesUpgrade;
@Override
public String toString() {
StringBuilder buf = new StringBuilder(super.toString());
buf.append(" baseUrl=").append(baseUrl);
buf.append(" agentMaxQuietTimeAllowed=").append(agentMaxQuietTimeAllowed);
buf.append(" enableAgentAutoUpdate=").append(enableAgentAutoUpdate);
buf.append(" enableDebugMode=").append(enableDebugMode);
buf.append(" enableExperimentalFeatures=").append(enableExperimentalFeatures);
buf.append(" helpUserId=").append(helpUserId);
buf.append(" helpPassword=").append(helpPassword);
buf.append(" ldapEnabled=").append(ldapEnabled);
buf.append(" ldapUrl=").append(ldapUrl);
buf.append(" ldapSsl=").append(ldapSsl);
buf.append(" ldapLoginProperty=").append(ldapLoginProperty);
buf.append(" ldapSearchBase=").append(ldapSearchBase);
buf.append(" ldapSearchFilter=").append(ldapSearchFilter);
buf.append(" ldapUsername=").append(ldapUsername);
buf.append(" ldapPassword=").append(ldapPassword);
buf.append(" ldapGroupFilter=").append(ldapGroupFilter);
buf.append(" ldapGroupMember=").append(ldapGroupMember);
return buf.toString();
}
/*
* (non-Javadoc)
*
* @see org.apache.struts.action.ActionForm#reset(org.apache.struts.action.ActionMapping,
* javax.servlet.http.HttpServletRequest)
*/
@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {
agentMaxQuietTimeAllowed = "";
agentMaxQuietTimeAllowedVal = null;
enableAgentAutoUpdate = true;
enableDebugMode = false;
enableExperimentalFeatures = false;
helpUserId = "";
helpPassword = "";
maintInterval = "";
maintIntervalVal = null;
rtPurge = "";
rtPurgeVal = null;
alertPurge = "";
alertPurgeVal = null;
eventPurge = "";
eventPurgeVal = null;
traitPurge = "";
traitPurgeVal = null;
availPurge = "";
availPurgeVal = null;
baselineFrequency = "";
baselineFrequencyVal = null;
baselineDataSet = "";
baselineDataSetVal = null;
ldapEnabled = null;
ldapUrl = "";
ldapSsl = false;
ldapLoginProperty = "";
ldapSearchBase = "";
ldapSearchFilter = "";
ldapUsername = "";
ldapPassword = "";
ldapGroupFilter = "";
ldapGroupMember = "";
super.reset(mapping, request);
}
public void loadConfigProperties(Properties prop) {
baseUrl = prop.getProperty(RHQConstants.BaseURL);
helpUserId = prop.getProperty(RHQConstants.HelpUser);
helpPassword = prop.getProperty(RHQConstants.HelpUserPassword);
String agentMaxQuietTimeAllowedValStr = prop.getProperty(RHQConstants.AgentMaxQuietTimeAllowed);
Long agentMaxQuietTimeAllowedLong = new Long(agentMaxQuietTimeAllowedValStr);
agentMaxQuietTimeAllowed = findTimeUnit(agentMaxQuietTimeAllowedLong.longValue());
agentMaxQuietTimeAllowedVal = calcTimeUnit(agentMaxQuietTimeAllowedLong.longValue());
String enableAgentAutoUpdateStr = prop.getProperty(RHQConstants.EnableAgentAutoUpdate);
if (enableAgentAutoUpdateStr == null) {
enableAgentAutoUpdateStr = Boolean.FALSE.toString();
} else if (enableAgentAutoUpdateStr.equals("0")) {
enableAgentAutoUpdateStr = Boolean.FALSE.toString();
} else if (enableAgentAutoUpdateStr.equals("1")) {
enableAgentAutoUpdateStr = Boolean.TRUE.toString();
}
enableAgentAutoUpdate = Boolean.valueOf(enableAgentAutoUpdateStr).booleanValue();
String enableDebugModeStr = prop.getProperty(RHQConstants.EnableDebugMode);
if (enableDebugModeStr == null) {
enableDebugModeStr = Boolean.FALSE.toString();
} else if (enableDebugModeStr.equals("0")) {
enableDebugModeStr = Boolean.FALSE.toString();
} else if (enableDebugModeStr.equals("1")) {
enableDebugModeStr = Boolean.TRUE.toString();
}
enableDebugMode = Boolean.valueOf(enableDebugModeStr).booleanValue();
String enableExperimentalFeaturesStr = prop.getProperty(RHQConstants.EnableExperimentalFeatures);
if (enableExperimentalFeaturesStr == null) {
enableExperimentalFeaturesStr = Boolean.FALSE.toString();
} else if (enableExperimentalFeaturesStr.equals("0")) {
enableExperimentalFeaturesStr = Boolean.FALSE.toString();
} else if (enableExperimentalFeaturesStr.equals("1")) {
enableExperimentalFeaturesStr = Boolean.TRUE.toString();
}
enableExperimentalFeatures = Boolean.valueOf(enableExperimentalFeaturesStr).booleanValue();
String maintIntervalValStr = prop.getProperty(RHQConstants.DataMaintenance);
Long maintIntervalLong = new Long(maintIntervalValStr);
maintInterval = findTimeUnit(maintIntervalLong.longValue());
maintIntervalVal = calcTimeUnit(maintIntervalLong.longValue());
String nightlyReindexStr = prop.getProperty(RHQConstants.DataReindex);
if (nightlyReindexStr == null) {
nightlyReindexStr = Boolean.FALSE.toString();
} else if (nightlyReindexStr.equals("0")) {
nightlyReindexStr = Boolean.FALSE.toString();
} else if (nightlyReindexStr.equals("1")) {
nightlyReindexStr = Boolean.TRUE.toString();
}
reindex = Boolean.valueOf(nightlyReindexStr).booleanValue();
String rtPurgeValStr = prop.getProperty(RHQConstants.RtDataPurge);
Long rtPurgeLong = new Long(rtPurgeValStr);
rtPurge = findTimeUnit(rtPurgeLong.longValue());
rtPurgeVal = calcTimeUnit(rtPurgeLong.longValue());
String alertPurgeValStr = prop.getProperty(RHQConstants.AlertPurge);
Long alertPurgeLong = new Long(alertPurgeValStr);
alertPurge = findTimeUnit(alertPurgeLong.longValue());
alertPurgeVal = calcTimeUnit(alertPurgeLong.longValue());
String eventPurgeValStr = prop.getProperty(RHQConstants.EventPurge);
Long eventPurgeLong = new Long(eventPurgeValStr);
eventPurge = findTimeUnit(eventPurgeLong.longValue());
eventPurgeVal = calcTimeUnit(eventPurgeLong.longValue());
String traitPurgeValStr = prop.getProperty(RHQConstants.TraitPurge);
Long traitPurgeLong = new Long(traitPurgeValStr);
traitPurge = findTimeUnit(traitPurgeLong.longValue());
traitPurgeVal = calcTimeUnit(traitPurgeLong.longValue());
String availPurgeValStr = prop.getProperty(RHQConstants.AvailabilityPurge);
Long availPurgeLong = new Long(availPurgeValStr);
availPurge = findTimeUnit(availPurgeLong.longValue());
availPurgeVal = calcTimeUnit(availPurgeLong.longValue());
String baselineFrequencyValStr = prop.getProperty(RHQConstants.BaselineFrequency);
Long baselineFrequencyLong = new Long(baselineFrequencyValStr);
baselineFrequency = findTimeUnit(baselineFrequencyLong.longValue());
baselineFrequencyVal = calcTimeUnit(baselineFrequencyLong.longValue());
String baselineDataSetValStr = prop.getProperty(RHQConstants.BaselineDataSet);
Long baselineDataSetLong = new Long(baselineDataSetValStr);
baselineDataSet = findTimeUnit(baselineDataSetLong.longValue());
baselineDataSetVal = calcTimeUnit(baselineDataSetLong.longValue());
ldapUrl = prop.getProperty(RHQConstants.LDAPUrl);
ldapLoginProperty = prop.getProperty(RHQConstants.LDAPLoginProperty);
ldapSearchBase = prop.getProperty(RHQConstants.LDAPBaseDN);
ldapSearchFilter = prop.getProperty(RHQConstants.LDAPFilter);
ldapGroupFilter = prop.getProperty(RHQConstants.LDAPGroupFilter);
ldapGroupMember = prop.getProperty(RHQConstants.LDAPGroupMember);
ldapUsername = prop.getProperty(RHQConstants.LDAPBindDN);
ldapPassword = prop.getProperty(RHQConstants.LDAPBindPW);
String value = prop.getProperty(SystemSetting.USE_SSL_FOR_LDAP.getInternalName());
ldapSsl = Boolean.TRUE.toString().equals(value);
value = prop.getProperty(SystemSetting.LDAP_BASED_JAAS_PROVIDER.getInternalName());
ldapEnabled = (value != null) ? Boolean.valueOf(value) : false;
String resourceGenericPropertiesUpgradeAllowed = prop.getProperty(RHQConstants.AllowResourceGenericPropertiesUpgrade);
allowResourceGenericPropertiesUpgrade = Boolean.parseBoolean(resourceGenericPropertiesUpgradeAllowed);
}
/**
* find the proper time unit associated with the timeUnit
*
* @return time unit label
*/
private String findTimeUnit(long timeUnitInt) {
if ((timeUnitInt % NumberConstants.DAYS) == 0) {
return StringConstants.DAYS_LABEL;
} else if ((timeUnitInt % NumberConstants.HOURS) == 0) {
return StringConstants.HOURS_LABEL;
} else {
return StringConstants.MINUTES_LABEL;
}
}
/**
* find the proper time unit associated with the timeUnit
*
* @return time unit label
*/
private String calcTimeUnit(long timeUnitInt) {
if ((timeUnitInt % NumberConstants.DAYS) == 0) {
return String.valueOf(timeUnitInt / NumberConstants.DAYS);
} else if ((timeUnitInt % NumberConstants.HOURS) == 0) {
return String.valueOf(timeUnitInt / NumberConstants.HOURS);
} else {
return String.valueOf(timeUnitInt / NumberConstants.MINUTES);
}
}
/**
* find the proper time unit associated with the timeUnit
*
* @return time unit label
*/
private long convertToMillisecond(long val, String timeLabel) {
if (timeLabel.equalsIgnoreCase(StringConstants.DAYS_LABEL)) {
return val * NumberConstants.DAYS;
} else if (timeLabel.equalsIgnoreCase(StringConstants.HOURS_LABEL)) {
return val * NumberConstants.HOURS;
} else {
return val * NumberConstants.MINUTES;
}
}
public Properties saveConfigProperties(Properties prop) {
prop.setProperty(RHQConstants.BaseURL, baseUrl);
prop.setProperty(RHQConstants.HelpUser, helpUserId);
prop.setProperty(RHQConstants.HelpUserPassword, helpPassword);
prop.setProperty(RHQConstants.DataReindex, String.valueOf(reindex));
long agentMaxQuietTimeAllowedLong = convertToMillisecond(Integer.parseInt(agentMaxQuietTimeAllowedVal),
agentMaxQuietTimeAllowed);
prop.setProperty(RHQConstants.AgentMaxQuietTimeAllowed, String.valueOf(agentMaxQuietTimeAllowedLong));
prop.setProperty(RHQConstants.EnableAgentAutoUpdate, String.valueOf(enableAgentAutoUpdate));
prop.setProperty(RHQConstants.EnableDebugMode, String.valueOf(enableDebugMode));
prop.setProperty(RHQConstants.EnableExperimentalFeatures, String.valueOf(enableExperimentalFeatures));
long maintIntervalLong = convertToMillisecond(Integer.parseInt(maintIntervalVal), maintInterval);
prop.setProperty(RHQConstants.DataMaintenance, String.valueOf(maintIntervalLong));
long rtPurgeLong = convertToMillisecond(Long.parseLong(rtPurgeVal), rtPurge);
prop.setProperty(RHQConstants.RtDataPurge, String.valueOf(rtPurgeLong));
long alertPurgeLong = convertToMillisecond(Long.parseLong(alertPurgeVal), alertPurge);
prop.setProperty(RHQConstants.AlertPurge, String.valueOf(alertPurgeLong));
long eventPurgeLong = convertToMillisecond(Long.parseLong(eventPurgeVal), eventPurge);
prop.setProperty(RHQConstants.EventPurge, String.valueOf(eventPurgeLong));
long traitPurgeLong = convertToMillisecond(Long.parseLong(traitPurgeVal), traitPurge);
prop.setProperty(RHQConstants.TraitPurge, String.valueOf(traitPurgeLong));
long availPurgeLong = convertToMillisecond(Long.parseLong(availPurgeVal), availPurge);
prop.setProperty(RHQConstants.AvailabilityPurge, String.valueOf(availPurgeLong));
long baselineFrequencyLong = convertToMillisecond(Integer.parseInt(baselineFrequencyVal), baselineFrequency);
prop.setProperty(RHQConstants.BaselineFrequency, String.valueOf(baselineFrequencyLong));
long baselineDataSetLong = convertToMillisecond(Integer.parseInt(baselineDataSetVal), baselineDataSet);
prop.setProperty(RHQConstants.BaselineDataSet, String.valueOf(baselineDataSetLong));
prop.setProperty(RHQConstants.LDAPUrl, ldapUrl);
prop.setProperty(RHQConstants.LDAPLoginProperty, ldapLoginProperty);
prop.setProperty(RHQConstants.LDAPBaseDN, ldapSearchBase);
prop.setProperty(RHQConstants.LDAPFilter, ldapSearchFilter);
prop.setProperty(RHQConstants.LDAPGroupFilter, ldapGroupFilter);
prop.setProperty(RHQConstants.LDAPGroupMember, ldapGroupMember);
prop.setProperty(RHQConstants.LDAPBindDN, ldapUsername);
prop.setProperty(RHQConstants.LDAPBindPW, ldapPassword);
prop.setProperty(RHQConstants.LDAPProtocol, ldapSsl ? "ssl" : "");
prop.setProperty(SystemSetting.LDAP_BASED_JAAS_PROVIDER.getInternalName(),
(ldapEnabled != null) ? String.valueOf(ldapEnabled) : Boolean.FALSE.toString());
prop.setProperty(RHQConstants.AllowResourceGenericPropertiesUpgrade, String.valueOf(allowResourceGenericPropertiesUpgrade));
return prop;
}
public String getHelpPassword() {
return helpPassword;
}
public String getHelpUserId() {
return helpUserId;
}
public void setHelpPassword(String string) {
helpPassword = string;
}
public void setHelpUserId(String string) {
helpUserId = string;
}
public String getAgentMaxQuietTimeAllowed() {
return agentMaxQuietTimeAllowed;
}
public void setAgentMaxQuietTimeAllowed(String string) {
this.agentMaxQuietTimeAllowed = string;
}
public String getAgentMaxQuietTimeAllowedVal() {
return agentMaxQuietTimeAllowedVal;
}
public void setAgentMaxQuietTimeAllowedVal(String string) {
this.agentMaxQuietTimeAllowedVal = string;
}
public boolean getEnableAgentAutoUpdate() {
return this.enableAgentAutoUpdate;
}
public void setEnableAgentAutoUpdate(boolean b) {
this.enableAgentAutoUpdate = b;
}
public boolean getEnableDebugMode() {
return this.enableDebugMode;
}
public void setEnableDebugMode(boolean b) {
this.enableDebugMode = b;
}
public boolean getEnableExperimentalFeatures() {
return this.enableExperimentalFeatures;
}
public void setEnableExperimentalFeatures(boolean b) {
this.enableExperimentalFeatures = b;
}
public String getMaintIntervalVal() {
return maintIntervalVal;
}
public void setMaintIntervalVal(String v) {
maintIntervalVal = v;
}
public String getMaintInterval() {
return maintInterval;
}
public void setMaintInterval(String s) {
maintInterval = s;
}
public String getRtPurgeVal() {
return rtPurgeVal;
}
public void setRtPurgeVal(String v) {
rtPurgeVal = v;
}
public String getRtPurge() {
return rtPurge;
}
public void setRtPurge(String s) {
rtPurge = s;
}
public String getAlertPurgeVal() {
return alertPurgeVal;
}
public void setAlertPurgeVal(String v) {
alertPurgeVal = v;
}
public String getAlertPurge() {
return alertPurge;
}
public void setAlertPurge(String s) {
alertPurge = s;
}
public String getEventPurgeVal() {
return eventPurgeVal;
}
public void setEventPurgeVal(String eventPurgeVal) {
this.eventPurgeVal = eventPurgeVal;
}
public String getEventPurge() {
return eventPurge;
}
public void setEventPurge(String eventPurge) {
this.eventPurge = eventPurge;
}
public String getTraitPurgeVal() {
return traitPurgeVal;
}
public void setTraitPurgeVal(String traitPurgeVal) {
this.traitPurgeVal = traitPurgeVal;
}
public String getTraitPurge() {
return traitPurge;
}
public void setTraitPurge(String traitPurge) {
this.traitPurge = traitPurge;
}
public String getAvailPurgeVal() {
return availPurgeVal;
}
public void setAvailPurgeVal(String availPurgeVal) {
this.availPurgeVal = availPurgeVal;
}
public String getAvailPurge() {
return availPurge;
}
public void setAvailPurge(String availPurge) {
this.availPurge = availPurge;
}
public String getBaselineFrequencyVal() {
return baselineFrequencyVal;
}
public void setBaselineFrequencyVal(String v) {
baselineFrequencyVal = v;
}
public String getBaselineFrequency() {
return baselineFrequency;
}
public void setBaselineFrequency(String s) {
baselineFrequency = s;
}
public String getBaselineDataSetVal() {
return baselineDataSetVal;
}
public void setBaselineDataSetVal(String v) {
baselineDataSetVal = v;
}
public String getBaselineDataSet() {
return baselineDataSet;
}
public void setBaselineDataSet(String s) {
baselineDataSet = s;
}
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(String string) {
baseUrl = string;
}
public Boolean getLdapEnabled() {
return ldapEnabled;
}
public void setLdapEnabled(Boolean b) {
if (b.booleanValue()) {
ldapEnabled = Boolean.TRUE;
}
}
public String getLdapUrl() {
return ldapUrl;
}
public void setLdapUrl(String s) {
ldapUrl = s;
}
public boolean getLdapSsl() {
return ldapSsl;
}
public void setLdapSsl(boolean b) {
ldapSsl = b;
}
public String getLdapLoginProperty() {
return ldapLoginProperty;
}
public void setLdapLoginProperty(String s) {
ldapLoginProperty = s;
}
public String getLdapSearchBase() {
return ldapSearchBase;
}
public void setLdapSearchBase(String s) {
ldapSearchBase = s;
}
public String getLdapSearchFilter() {
return ldapSearchFilter;
}
public void setLdapSearchFilter(String s) {
ldapSearchFilter = s;
}
public String getLdapGroupFilter() {
return ldapGroupFilter;
}
public void setLdapGroupFilter(String s) {
ldapGroupFilter = s;
}
public String getLdapGroupMember() {
return ldapGroupMember;
}
public void setLdapGroupMember(String s) {
ldapGroupMember = s;
}
public String getLdapUsername() {
return ldapUsername;
}
public void setLdapUsername(String s) {
ldapUsername = s;
}
public String getLdapPassword() {
return ldapPassword;
}
public void setLdapPassword(String s) {
ldapPassword = s;
}
public boolean getReindex() {
return reindex;
}
public void setReindex(boolean reindex) {
this.reindex = reindex;
}
public boolean isAllowResourceGenericPropertiesUpgrade() {
return allowResourceGenericPropertiesUpgrade;
}
public void setAllowResourceGenericPropertiesUpgrade(boolean allowResourceGenericPropertiesUpgrade) {
this.allowResourceGenericPropertiesUpgrade = allowResourceGenericPropertiesUpgrade;
}
/* (non-Javadoc)
* @see org.apache.struts.action.ActionForm#validate(org.apache.struts.action.ActionMapping,
* javax.servlet.http.HttpServletRequest)
*/
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = super.validate(mapping, request);
if (errors == null) {
errors = new ActionErrors();
}
if (!empty(baselineDataSetVal)) {
try {
long freq = Long.parseLong(baselineDataSetVal);
// 1h table holds at most 14 days worth of data, make sure we don't set a dataset more than that
if (freq > 14) {
ActionMessage errorMessage = new ActionMessage("admin.settings.BadBaselineDataSetVal");
errors.add("baselineDataSetVal", errorMessage);
}
} catch (Exception e) {
ActionMessage errorMessage = new ActionMessage("admin.settings.BadBaselineDataSetVal");
errors.add("baselineDataSetVal", errorMessage);
}
}
if (!empty(agentMaxQuietTimeAllowedVal)) {
try {
long val = Long.parseLong(agentMaxQuietTimeAllowedVal);
// we should never allow a quiet time threshold to be less than 2 minutes
if (val < 2) {
ActionMessage errorMessage = new ActionMessage("admin.settings.BadAgentMaxQuietTimeAllowedVal");
errors.add("agentMaxQuietTimeAllowedVal", errorMessage);
}
} catch (Exception e) {
ActionMessage errorMessage = new ActionMessage("admin.settings.BadAgentMaxQuietTimeAllowedVal");
errors.add("agentMaxQuietTimeAllowedVal", errorMessage);
}
}
checkForBadNumber(errors, this.maintIntervalVal, "maintIntervalVal");
checkForBadNumber(errors, this.rtPurgeVal, "rtPurgeVal");
checkForBadNumber(errors, this.alertPurgeVal, "alertPurgeVal");
checkForBadNumber(errors, this.eventPurgeVal, "eventPurgeVal");
checkForBadNumber(errors, this.traitPurgeVal, "traitPurgeVal");
checkForBadNumber(errors, this.availPurgeVal, "availPurgeVal");
checkForBadNumber(errors, this.baselineFrequencyVal, "baselineFrequencyVal");
if (errors.isEmpty()) {
return null;
} else {
return errors;
}
}
private void checkForBadNumber(ActionErrors errors, String val, String valVariableName) {
if (!empty(val)) {
try {
Long.parseLong(val);
} catch (Exception e) {
ActionMessage errorMessage = new ActionMessage("admin.settings.BadNumber");
errors.add(valVariableName, errorMessage);
}
}
}
private boolean empty(String s) {
return (s == null) || (s.length() == 0);
}
}