All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.geronimo.jcache.simple.SimpleConfiguration Maven / Gradle / Ivy

/*
 * 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.geronimo.jcache.simple;

import static java.util.Collections.unmodifiableSet;

import java.util.HashSet;
import java.util.Set;

import javax.cache.configuration.CacheEntryListenerConfiguration;
import javax.cache.configuration.CompleteConfiguration;
import javax.cache.configuration.Configuration;
import javax.cache.configuration.Factory;
import javax.cache.expiry.EternalExpiryPolicy;
import javax.cache.expiry.ExpiryPolicy;
import javax.cache.integration.CacheLoader;
import javax.cache.integration.CacheWriter;

public class SimpleConfiguration implements CompleteConfiguration {

    private final Class keyType;

    private final Class valueType;

    private final boolean storeByValue;

    private final boolean readThrough;

    private final boolean writeThrough;

    private final Factory> cacheLoaderFactory;

    private final Factory> cacheWristerFactory;

    private final Factory expiryPolicyFactory;

    private final Set> cacheEntryListenerConfigurations;

    private volatile boolean statisticsEnabled;

    private volatile boolean managementEnabled;

    public SimpleConfiguration(final Configuration configuration, final Class keyType, final Class valueType) {
        this.keyType = keyType;
        this.valueType = valueType;
        if (configuration instanceof CompleteConfiguration) {
            final CompleteConfiguration cConfiguration = (CompleteConfiguration) configuration;
            storeByValue = configuration.isStoreByValue();
            readThrough = cConfiguration.isReadThrough();
            writeThrough = cConfiguration.isWriteThrough();
            statisticsEnabled = cConfiguration.isStatisticsEnabled();
            managementEnabled = cConfiguration.isManagementEnabled();
            cacheLoaderFactory = cConfiguration.getCacheLoaderFactory();
            cacheWristerFactory = cConfiguration.getCacheWriterFactory();
            this.expiryPolicyFactory = cConfiguration.getExpiryPolicyFactory();
            cacheEntryListenerConfigurations = new HashSet<>();

            final Iterable> entryListenerConfigurations = cConfiguration
                    .getCacheEntryListenerConfigurations();
            if (entryListenerConfigurations != null) {
                for (final CacheEntryListenerConfiguration kvCacheEntryListenerConfiguration : entryListenerConfigurations) {
                    cacheEntryListenerConfigurations.add(kvCacheEntryListenerConfiguration);
                }
            }
        } else {
            expiryPolicyFactory = EternalExpiryPolicy.factoryOf();
            storeByValue = true;
            readThrough = false;
            writeThrough = false;
            statisticsEnabled = false;
            managementEnabled = false;
            cacheLoaderFactory = null;
            cacheWristerFactory = null;
            cacheEntryListenerConfigurations = new HashSet<>();
        }
    }

    @Override
    public Class getKeyType() {
        return keyType == null ? (Class) Object.class : keyType;
    }

    @Override
    public Class getValueType() {
        return valueType == null ? (Class) Object.class : valueType;
    }

    @Override
    public boolean isStoreByValue() {
        return storeByValue;
    }

    @Override
    public boolean isReadThrough() {
        return readThrough;
    }

    @Override
    public boolean isWriteThrough() {
        return writeThrough;
    }

    @Override
    public boolean isStatisticsEnabled() {
        return statisticsEnabled;
    }

    @Override
    public boolean isManagementEnabled() {
        return managementEnabled;
    }

    @Override
    public Iterable> getCacheEntryListenerConfigurations() {
        return unmodifiableSet(cacheEntryListenerConfigurations);
    }

    @Override
    public Factory> getCacheLoaderFactory() {
        return cacheLoaderFactory;
    }

    @Override
    public Factory> getCacheWriterFactory() {
        return cacheWristerFactory;
    }

    @Override
    public Factory getExpiryPolicyFactory() {
        return expiryPolicyFactory;
    }

    public synchronized void addListener(final CacheEntryListenerConfiguration cacheEntryListenerConfiguration) {
        cacheEntryListenerConfigurations.add(cacheEntryListenerConfiguration);
    }

    public synchronized void removeListener(final CacheEntryListenerConfiguration cacheEntryListenerConfiguration) {
        cacheEntryListenerConfigurations.remove(cacheEntryListenerConfiguration);
    }

    public void statisticsEnabled() {
        statisticsEnabled = true;
    }

    public void managementEnabled() {
        managementEnabled = true;
    }

    public void statisticsDisabled() {
        statisticsEnabled = false;
    }

    public void managementDisabled() {
        managementEnabled = false;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy