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

Java tutorial

Introduction

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

Source

/* 
 * Created on Mar 8, 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.util.ObjectUtils;

/**
 * <p>
 * Creates a XML element representing a cache setup strategy.
 * </p>
 * 
 * @author Alex Ruiz
 */
public class CacheSetupStrategyElementBuilder implements XmlElementBuilder {

    static class CacheKeyGeneratorElementBuilder implements XmlElementBuilder {
        public Element toXml() {
            return new DomElementStub("cacheKeyGenerator");
        }
    }

    static class CachingListenerElementBuilder implements XmlElementBuilder {
        public String refId = "";

        public Element toXml() {
            Element element = new DomElementStub("cachingListener");
            element.setAttribute("refId", refId);
            return element;
        }
    }

    static class CachingModelElementBuilder implements XmlElementBuilder {
        public String target = "";

        public Element toXml() {
            Element element = new DomElementStub("caching");
            element.setAttribute("target", target);
            return element;
        }
    }

    static class FlushingModelElementBuilder implements XmlElementBuilder {
        public String target = "";

        public Element toXml() {
            Element element = new DomElementStub("flushing");
            element.setAttribute("target", target);
            return element;
        }
    }

    CacheKeyGeneratorElementBuilder cacheKeyGeneratorElementBuilder;

    String cacheProviderId = "";

    CachingListenerElementBuilder[] cachingListenerElementBuilders;

    CachingModelElementBuilder[] cachingModelElementBuilders;

    FlushingModelElementBuilder[] flushingModelElementBuilders;

    /**
     * @see XmlElementBuilder#toXml()
     */
    public Element toXml() {
        Element root = new DomElementStub("abstract");
        root.setAttribute("providerId", cacheProviderId);

        if (!ObjectUtils.isEmpty(cachingListenerElementBuilders)) {
            Element listeners = new DomElementStub("cachingListeners");
            appendChildren(listeners, cachingListenerElementBuilders);

            root.appendChild(listeners);
        }

        if (cacheKeyGeneratorElementBuilder != null) {
            root.appendChild(cacheKeyGeneratorElementBuilder.toXml());
        }
        appendChildren(root, cachingModelElementBuilders);
        appendChildren(root, flushingModelElementBuilders);

        return root;
    }

    void setDefaultCachingListenerElementBuilders(int count) {
        CachingListenerElementBuilder[] builders = new CachingListenerElementBuilder[count];
        String refIdPrefix = "listener_";

        for (int i = 0; i < count; i++) {
            CachingListenerElementBuilder builder = new CachingListenerElementBuilder();
            builder.refId = refIdPrefix + i;
            builders[i] = builder;
        }

        cachingListenerElementBuilders = builders;
    }

    void setDefaultCachingModelElementBuilders(int count) {
        CachingModelElementBuilder[] builders = new CachingModelElementBuilder[count];
        String targetPrefix = "target_";

        for (int i = 0; i < count; i++) {
            CachingModelElementBuilder builder = new CachingModelElementBuilder();
            builder.target = targetPrefix + i;
            builders[i] = builder;
        }

        cachingModelElementBuilders = builders;
    }

    void setDefaultFlushingModelElementBuilders(int count) {
        FlushingModelElementBuilder[] builders = new FlushingModelElementBuilder[count];
        String targetPrefix = "target_";

        for (int i = 0; i < count; i++) {
            FlushingModelElementBuilder builder = new FlushingModelElementBuilder();
            builder.target = targetPrefix + i;
            builders[i] = builder;
        }

        flushingModelElementBuilders = builders;
    }

    private void appendChildren(Element parent, XmlElementBuilder[] children) {
        if (!ObjectUtils.isEmpty(children)) {
            int size = children.length;
            for (int i = 0; i < size; i++) {
                parent.appendChild(children[i].toXml());
            }
        }
    }
}