org.springmodules.cache.config.AbstractCacheManagerAndProviderFacadeParser.java Source code

Java tutorial

Introduction

Here is the source code for org.springmodules.cache.config.AbstractCacheManagerAndProviderFacadeParser.java

Source

/* 
 * Created on Feb 3, 2006
 *
 * Licensed 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.
 *
 * Copyright @2006 the original author or authors.
 */
package org.springmodules.cache.config;

import org.w3c.dom.Element;

import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.PropertyValue;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceEditor;
import org.springframework.util.StringUtils;

/**
 * <p>
 * Template that handles the parsing of the XML tag "config". Creates and
 * registers and implementation of
 * <code>{@link org.springmodules.cache.provider.CacheProviderFacade}</code>
 * and a cache manager in the provided registry of bean definitions.
 * </p>
 * 
 * @author Alex Ruiz
 */
public abstract class AbstractCacheManagerAndProviderFacadeParser extends AbstractCacheProviderFacadeParser {

    /**
     * Parses the given XML element containing the properties of the cache manager
     * to register in the given registry of bean definitions.
     * 
     * @param element
     *          the XML element to parse
     * @param registry
     *          the registry of bean definitions
     * 
     * @see AbstractCacheProviderFacadeParser#doParse(String, Element,
     *      BeanDefinitionRegistry)
     */
    protected final void doParse(String cacheProviderFacadeId, Element element, BeanDefinitionRegistry registry) {
        String id = "cacheManager";
        Class clazz = getCacheManagerClass();
        RootBeanDefinition cacheManager = new RootBeanDefinition(clazz);
        MutablePropertyValues cacheManagerProperties = new MutablePropertyValues();
        cacheManager.setPropertyValues(cacheManagerProperties);

        PropertyValue configLocation = parseConfigLocationProperty(element);
        cacheManagerProperties.addPropertyValue(configLocation);
        registry.registerBeanDefinition(id, cacheManager);

        BeanDefinition cacheProviderFacade = registry.getBeanDefinition(cacheProviderFacadeId);
        cacheProviderFacade.getPropertyValues().addPropertyValue("cacheManager", new RuntimeBeanReference(id));
    }

    /**
     * @return the class of the cache manager to create
     */
    protected abstract Class getCacheManagerClass();

    /**
     * Parses the given XML element to obtain the value of the property
     * <code>configLocation</code>. This property specifies the location of the
     * configuration file to use to configure the cache manager.
     * 
     * @param element
     *          the XML element to parse
     * @return the value of the property <code>configLocation</code>
     */
    private PropertyValue parseConfigLocationProperty(Element element) {
        Resource resource = null;

        String configLocation = element.getAttribute("configLocation");
        if (StringUtils.hasText(configLocation)) {
            ResourceEditor resourceEditor = new ResourceEditor();
            resourceEditor.setAsText(configLocation);
            resource = (Resource) resourceEditor.getValue();
        }

        return new PropertyValue("configLocation", resource);
    }

}