class CacheManager {

    public void addCache(String cacheName) throws IllegalStateException, ObjectExistsException, CacheException {
        checkStatus();

        // NPE guard
        if (cacheName == null || cacheName.length() == 0) {
            return;
        }

        if (ehcaches.get(cacheName) != null) {
            throw new ObjectExistsException("Cache " + cacheName + " already exists");
        }
        Ehcache clonedDefaultCache = cloneDefaultCache(cacheName);
        if (clonedDefaultCache == null) {
            throw new CacheException(NO_DEFAULT_CACHE_ERROR_MSG);
        }
        addCache(clonedDefaultCache);
        for (Ehcache ehcache : createDefaultCacheDecorators(clonedDefaultCache)) {
            addOrReplaceDecoratedCache(clonedDefaultCache, ehcache);
        }
    }

    public  CacheManager(Configuration configuration);
    public  CacheManager(String configurationFileName);
    public  CacheManager(URL configurationURL);
    public  CacheManager(InputStream configurationInputStream);
    public  CacheManager();

}