| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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 org.apache.commons.validator; |
| |
| import org.apache.commons.digester.AbstractObjectCreationFactory; |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| import org.xml.sax.Attributes; |
| |
| /** |
| * Factory class used by Digester to create FormSet's. |
| * |
| * @since 1.2 |
| */ |
| public class FormSetFactory extends AbstractObjectCreationFactory { |
| |
| /** Logging */ |
| private transient Log log = LogFactory.getLog(FormSetFactory.class); |
| |
| /** |
| * <p>Create or retrieve a <code>FormSet</code> for the specified |
| * attributes.</p> |
| * |
| * @param attributes The sax attributes for the formset element. |
| * @return The FormSet for a locale. |
| * @throws Exception If an error occurs creating the FormSet. |
| */ |
| @Override |
| public Object createObject(final Attributes attributes) throws Exception { |
| |
| final ValidatorResources resources = (ValidatorResources) digester.peek(0); |
| |
| final String language = attributes.getValue("language"); |
| final String country = attributes.getValue("country"); |
| final String variant = attributes.getValue("variant"); |
| |
| return createFormSet(resources, language, country, variant); |
| |
| } |
| |
| /** |
| * <p>Create or retrieve a <code>FormSet</code> based on the language, country |
| * and variant.</p> |
| * |
| * @param resources The validator resources. |
| * @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 1.2 |
| */ |
| private FormSet createFormSet(final ValidatorResources resources, |
| final String language, |
| final String country, |
| final String variant) { |
| |
| // Retrieve existing FormSet for the language/country/variant |
| FormSet formSet = resources.getFormSet(language, country, variant); |
| if (formSet != null) { |
| if (getLog().isDebugEnabled()) { |
| getLog().debug("FormSet[" + formSet.displayKey() + "] found - merging."); |
| } |
| return formSet; |
| } |
| |
| // Create a new FormSet for the language/country/variant |
| formSet = new FormSet(); |
| formSet.setLanguage(language); |
| formSet.setCountry(country); |
| formSet.setVariant(variant); |
| |
| // Add the FormSet to the validator resources |
| resources.addFormSet(formSet); |
| |
| if (getLog().isDebugEnabled()) { |
| getLog().debug("FormSet[" + formSet.displayKey() + "] created."); |
| } |
| |
| return formSet; |
| |
| } |
| |
| /** |
| * 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(FormSetFactory.class); |
| } |
| return log; |
| } |
| |
| } |