Package org.jboss.cache.config

Source Code of org.jboss.cache.config.XmlParsingConfigurationRegistry

/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/

package org.jboss.cache.config;

import java.util.HashSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;

import org.jboss.cache.factories.CacheConfigsXmlParser;

/**
* {@link ConfigurationRegistry} that obtains its initial set of configurations
* by parsing an XML document.
*
* @author <a href="brian.stansberry@jboss.com">Brian Stansberry</a>
* @version $Revision: 1 $
*/
public class XmlParsingConfigurationRegistry implements ConfigurationRegistry
{   
    private CacheConfigsXmlParser parser;
    private String configResource;
    private Map<String, Configuration> configs = new Hashtable<String, Configuration>();
    private boolean started;
   
    public XmlParsingConfigurationRegistry(String configResource)
    {       
        parser = new CacheConfigsXmlParser();
        this.configResource = configResource;
    }
   
    public void start() throws Exception
    {
        if (!started)
        {
            if (configResource != null)
               configs.putAll(parser.parseConfigs(configResource));
            started = true;
        }
    }
   
    public void stop()
    {
        if (started)
        {
            synchronized (configs)
            {
                configs.clear();
            }
            started = false;
        }
    }
   
    public String getConfigResource()
    {
        return configResource;
    }

    public Set<String> getConfigurationNames()
    {
        return new HashSet<String>(configs.keySet());
    }
   
    public void registerConfiguration(String configName, Configuration config)
       throws CloneNotSupportedException
    {
        synchronized (configs) {
            if (configs.containsKey(configName))
                throw new IllegalStateException(configName + " already registered");
            configs.put(configName, config.clone());
        }
    }
   
    public void unregisterConfiguration(String configName)
    {
        synchronized (configs) {
            if (configs.remove(configName) == null)
                throw new IllegalStateException(configName + " not registered");           
        }
    }
   
    public Configuration getConfiguration(String configName)
    {
       Configuration config = null;
       synchronized (configs)
       {
          config = configs.get(configName);
       }
      
       if (config == null)
          throw new IllegalArgumentException("unknown config " + configName);
       
       // Don't hand out a ref to our master copy
       try
       {
          return config.clone();
       }
       catch (CloneNotSupportedException e)
       {
          // This should not happen, as we already cloned the config
          throw new RuntimeException("Could not clone configuration " + configName, e);
       }
    }
}
TOP

Related Classes of org.jboss.cache.config.XmlParsingConfigurationRegistry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.