JCSConfiguration.java
/*
* 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.
*/
/**
* Copyright 2003-2010 Terracotta, Inc.
*
* 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.
*/
package org.apache.commons.jcs3.jcache;
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;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class JCSConfiguration<K, V> implements CompleteConfiguration<K, V>
{
/**
*
*/
private static final long serialVersionUID = 3322514800838658711L;
private final Class<K> keyType;
private final Class<V> valueType;
private final boolean storeByValue;
private final boolean readThrough;
private final boolean writeThrough;
private final Factory<CacheLoader<K, V>> cacheLoaderFactory;
private final Factory<CacheWriter<? super K, ? super V>> cacheWristerFactory;
private final Factory<ExpiryPolicy> expiryPolicyFactory;
private final Set<CacheEntryListenerConfiguration<K, V>> cacheEntryListenerConfigurations;
private volatile boolean statisticsEnabled;
private volatile boolean managementEnabled;
public JCSConfiguration(final Configuration<K, V> configuration, final Class<K> keyType, final Class<V> valueType)
{
this.keyType = keyType;
this.valueType = valueType;
if (configuration instanceof CompleteConfiguration)
{
final CompleteConfiguration<K, V> cConfiguration = (CompleteConfiguration<K, V>) 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<CacheEntryListenerConfiguration<K, V>> entryListenerConfigurations = cConfiguration
.getCacheEntryListenerConfigurations();
if (entryListenerConfigurations != null)
{
for (final CacheEntryListenerConfiguration<K, V> 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<K> getKeyType()
{
return keyType == null ? (Class<K>) Object.class : keyType;
}
@Override
public Class<V> getValueType()
{
return valueType == null ? (Class<V>) 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<CacheEntryListenerConfiguration<K, V>> getCacheEntryListenerConfigurations()
{
return Collections.unmodifiableSet(cacheEntryListenerConfigurations);
}
@Override
public Factory<CacheLoader<K, V>> getCacheLoaderFactory()
{
return cacheLoaderFactory;
}
@Override
public Factory<CacheWriter<? super K, ? super V>> getCacheWriterFactory()
{
return cacheWristerFactory;
}
@Override
public Factory<ExpiryPolicy> getExpiryPolicyFactory()
{
return expiryPolicyFactory;
}
public synchronized void addListener(final CacheEntryListenerConfiguration<K, V> cacheEntryListenerConfiguration)
{
cacheEntryListenerConfigurations.add(cacheEntryListenerConfiguration);
}
public synchronized void removeListener(final CacheEntryListenerConfiguration<K, V> cacheEntryListenerConfiguration)
{
cacheEntryListenerConfigurations.remove(cacheEntryListenerConfiguration);
}
public void statisticsEnabled()
{
statisticsEnabled = true;
}
public void managementEnabled()
{
managementEnabled = true;
}
public void statisticsDisabled()
{
statisticsEnabled = false;
}
public void managementDisabled()
{
managementEnabled = false;
}
}