📄 validatorresources.java
字号:
*/
public void addFormSet(FormSet fs) {
String key = this.buildKey(fs);
if (key.length() == 0) {// there can only be one default formset
if (getLog().isWarnEnabled() && defaultFormSet != null) {
// warn the user he might not get the expected results
getLog().warn("Overriding default FormSet definition.");
}
defaultFormSet = fs;
} else {
FormSet formset = (FormSet) hFormSets.get(key);
if (formset == null) {// it hasn't been included yet
if (getLog().isDebugEnabled()) {
getLog().debug("Adding FormSet '" + fs.toString() + "'.");
}
} else if (getLog().isWarnEnabled()) {// warn the user he might not
// get the expected results
getLog()
.warn("Overriding FormSet definition. Duplicate for locale: "
+ key);
}
hFormSets.put(key, fs);
}
}
/**
* Add a global constant to the resource.
* @param name The constant name.
* @param value The constant value.
*/
public void addConstant(String name, String value) {
if (getLog().isDebugEnabled()) {
getLog().debug("Adding Global Constant: " + name + "," + value);
}
this.hConstants.put(name, value);
}
/**
* Add a <code>ValidatorAction</code> to the resource. It also creates an
* instance of the class based on the <code>ValidatorAction</code>s
* classname and retrieves the <code>Method</code> instance and sets them
* in the <code>ValidatorAction</code>.
* @param va The validator action.
*/
public void addValidatorAction(ValidatorAction va) {
va.init();
this.hActions.put(va.getName(), va);
if (getLog().isDebugEnabled()) {
getLog().debug("Add ValidatorAction: " + va.getName() + "," + va.getClassname());
}
}
/**
* Get a <code>ValidatorAction</code> based on it's name.
* @param key The validator action key.
* @return The validator action.
*/
public ValidatorAction getValidatorAction(String key) {
return (ValidatorAction) hActions.get(key);
}
/**
* Get an unmodifiable <code>Map</code> of the <code>ValidatorAction</code>s.
* @return Map of validator actions.
*/
public Map getValidatorActions() {
return Collections.unmodifiableMap(hActions);
}
/**
* Builds a key to store the <code>FormSet</code> under based on it's
* language, country, and variant values.
* @param fs The Form Set.
* @return generated key for a formset.
*/
protected String buildKey(FormSet fs) {
return
this.buildLocale(fs.getLanguage(), fs.getCountry(), fs.getVariant());
}
/**
* Assembles a Locale code from the given parts.
*/
private String buildLocale(String lang, String country, String variant) {
String key = ((lang != null && lang.length() > 0) ? lang : "");
key += ((country != null && country.length() > 0) ? "_" + country : "");
key += ((variant != null && variant.length() > 0) ? "_" + variant : "");
return key;
}
/**
* <p>Gets a <code>Form</code> based on the name of the form and the
* <code>Locale</code> that most closely matches the <code>Locale</code>
* passed in. The order of <code>Locale</code> matching is:</p>
* <ol>
* <li>language + country + variant</li>
* <li>language + country</li>
* <li>language</li>
* <li>default locale</li>
* </ol>
* @param locale The Locale.
* @param formKey The key for the Form.
* @return The validator Form.
* @since Validator 1.1
*/
public Form getForm(Locale locale, String formKey) {
return this.getForm(locale.getLanguage(), locale.getCountry(), locale
.getVariant(), formKey);
}
/**
* <p>Gets a <code>Form</code> based on the name of the form and the
* <code>Locale</code> that most closely matches the <code>Locale</code>
* passed in. The order of <code>Locale</code> matching is:</p>
* <ol>
* <li>language + country + variant</li>
* <li>language + country</li>
* <li>language</li>
* <li>default locale</li>
* </ol>
* @param language The locale's language.
* @param country The locale's country.
* @param variant The locale's language variant.
* @param formKey The key for the Form.
* @return The validator Form.
* @since Validator 1.1
*/
public Form getForm(String language, String country, String variant,
String formKey) {
Form form = null;
// Try language/country/variant
String key = this.buildLocale(language, country, variant);
if (key.length() > 0) {
FormSet formSet = (FormSet)hFormSets.get(key);
if (formSet != null) {
form = formSet.getForm(formKey);
}
}
String localeKey = key;
// Try language/country
if (form == null) {
key = buildLocale(language, country, null);
if (key.length() > 0) {
FormSet formSet = (FormSet)hFormSets.get(key);
if (formSet != null) {
form = formSet.getForm(formKey);
}
}
}
// Try language
if (form == null) {
key = buildLocale(language, null, null);
if (key.length() > 0) {
FormSet formSet = (FormSet)hFormSets.get(key);
if (formSet != null) {
form = formSet.getForm(formKey);
}
}
}
// Try default formset
if (form == null) {
form = defaultFormSet.getForm(formKey);
key = "default";
}
if (form == null) {
if (getLog().isWarnEnabled()) {
getLog().warn("Form '" + formKey + "' not found for locale '" +
localeKey + "'");
}
} else {
if (getLog().isDebugEnabled()) {
getLog().debug("Form '" + formKey + "' found in formset '" +
key + "' for locale '" + localeKey + "'");
}
}
return form;
}
/**
* Process the <code>ValidatorResources</code> object. Currently sets the
* <code>FastHashMap</code> s to the 'fast' mode and call the processes
* all other resources. <strong>Note </strong>: The framework calls this
* automatically when ValidatorResources is created from an XML file. If you
* create an instance of this class by hand you <strong>must </strong> call
* this method when finished.
*/
public void process() {
hFormSets.setFast(true);
hConstants.setFast(true);
hActions.setFast(true);
this.processForms();
}
/**
* <p>Process the <code>Form</code> objects. This clones the <code>Field</code>s
* that don't exist in a <code>FormSet</code> compared to its parent
* <code>FormSet</code>.</p>
*/
private void processForms() {
if (defaultFormSet == null) {// it isn't mandatory to have a
// default formset
defaultFormSet = new FormSet();
}
defaultFormSet.process(hConstants);
// Loop through FormSets and merge if necessary
for (Iterator i = hFormSets.keySet().iterator(); i.hasNext();) {
String key = (String) i.next();
FormSet fs = (FormSet) hFormSets.get(key);
fs.merge(getParent(fs));
}
// Process Fully Constructed FormSets
for (Iterator i = hFormSets.values().iterator(); i.hasNext();) {
FormSet fs = (FormSet) i.next();
if (!fs.isProcessed()) {
fs.process(hConstants);
}
}
}
/**
* Finds the given formSet's parent. ex: A formSet with locale en_UK_TEST1
* has a direct parent in the formSet with locale en_UK. If it doesn't
* exist, find the formSet with locale en, if no found get the
* defaultFormSet.
*
* @param fs
* the formSet we want to get the parent from
* @return fs's parent
*/
private FormSet getParent(FormSet fs) {
FormSet parent = null;
if (fs.getType() == FormSet.LANGUAGE_FORMSET) {
parent = defaultFormSet;
} else if (fs.getType() == FormSet.COUNTRY_FORMSET) {
parent = (FormSet) hFormSets.get(buildLocale(fs.getLanguage(),
null, null));
if (parent == null) {
parent = defaultFormSet;
}
} else if (fs.getType() == FormSet.VARIANT_FORMSET) {
parent = (FormSet) hFormSets.get(buildLocale(fs.getLanguage(), fs
.getCountry(), null));
if (parent == null) {
parent = (FormSet) hFormSets.get(buildLocale(fs.getLanguage(),
null, null));
if (parent == null) {
parent = defaultFormSet;
}
}
}
return parent;
}
/**
* <p>Gets a <code>FormSet</code> based on the language, country
* and variant.</p>
* @param language The locale's language.
* @param country The locale's country.
* @param variant The locale's language variant.
* @return The FormSet for a locale.
* @since Validator 1.2
*/
FormSet getFormSet(String language, String country, String variant) {
String key = buildLocale(language, country, variant);
if (key.length() == 0) {
return defaultFormSet;
}
return (FormSet)hFormSets.get(key);
}
/**
* Returns a Map of String locale keys to Lists of their FormSets.
* @return Map of Form sets
* @since Validator 1.2.0
*/
protected Map getFormSets() {
return hFormSets;
}
/**
* Returns a Map of String constant names to their String values.
* @return Map of Constants
* @since Validator 1.2.0
*/
protected Map getConstants() {
return hConstants;
}
/**
* Returns a Map of String ValidatorAction names to their ValidatorAction.
* @return Map of Validator Actions
* @since Validator 1.2.0
*/
protected Map getActions() {
return hActions;
}
/**
* Accessor method for Log instance.
*
* The Log instance variable is transient and
* accessing it through this method ensures it
* is re-initialized when this instance is
* de-serialized.
*
* @return The Log instance.
*/
private Log getLog() {
if (log == null) {
log = LogFactory.getLog(ValidatorResources.class);
}
return log;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -