/* | |
* | |
* Apache Geronimo JCache Spec 1.0 | |
* | |
* Copyright (C) 2003 - 2014 The Apache Software Foundation | |
* | |
* 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 javax.cache.configuration; | |
import javax.cache.expiry.EternalExpiryPolicy; | |
import javax.cache.expiry.ExpiryPolicy; | |
import javax.cache.integration.CacheLoader; | |
import javax.cache.integration.CacheWriter; | |
import java.util.HashSet; | |
public class MutableConfiguration<K, V> implements CompleteConfiguration<K, V> { | |
public static final long serialVersionUID = 201405L; | |
protected Class<K> keyType; | |
protected Class<V> valueType; | |
protected HashSet<CacheEntryListenerConfiguration<K, V>> listenerConfigurations; | |
protected Factory<CacheLoader<K, V>> cacheLoaderFactory; | |
protected Factory<CacheWriter<? super K, ? super V>> cacheWriterFactory; | |
protected Factory<ExpiryPolicy> expiryPolicyFactory; | |
protected boolean isReadThrough; | |
protected boolean isWriteThrough; | |
protected boolean isStatisticsEnabled; | |
protected boolean isStoreByValue; | |
protected boolean isManagementEnabled; | |
public MutableConfiguration() { | |
this.keyType = (Class<K>) Object.class; | |
this.valueType = (Class<V>) Object.class; | |
this.listenerConfigurations = new HashSet<CacheEntryListenerConfiguration<K, V>>(); | |
this.cacheLoaderFactory = null; | |
this.cacheWriterFactory = null; | |
this.expiryPolicyFactory = EternalExpiryPolicy.factoryOf(); | |
this.isReadThrough = false; | |
this.isWriteThrough = false; | |
this.isStatisticsEnabled = false; | |
this.isStoreByValue = true; | |
this.isManagementEnabled = false; | |
} | |
public MutableConfiguration(CompleteConfiguration<K, V> configuration) { | |
this.keyType = configuration.getKeyType(); | |
this.valueType = configuration.getValueType(); | |
listenerConfigurations = new HashSet<CacheEntryListenerConfiguration<K, V>>(); | |
for (final CacheEntryListenerConfiguration<K, V> definition : configuration.getCacheEntryListenerConfigurations()) { | |
addCacheEntryListenerConfiguration(definition); | |
} | |
this.cacheLoaderFactory = configuration.getCacheLoaderFactory(); | |
this.cacheWriterFactory = configuration.getCacheWriterFactory(); | |
if (configuration.getExpiryPolicyFactory() == null) { | |
this.expiryPolicyFactory = EternalExpiryPolicy.factoryOf(); | |
} else { | |
this.expiryPolicyFactory = configuration.getExpiryPolicyFactory(); | |
} | |
this.isReadThrough = configuration.isReadThrough(); | |
this.isWriteThrough = configuration.isWriteThrough(); | |
this.isStatisticsEnabled = configuration.isStatisticsEnabled(); | |
this.isStoreByValue = configuration.isStoreByValue(); | |
this.isManagementEnabled = configuration.isManagementEnabled(); | |
} | |
@Override | |
public Class<K> getKeyType() { | |
return keyType; | |
} | |
@Override | |
public Class<V> getValueType() { | |
return valueType; | |
} | |
public MutableConfiguration<K, V> setTypes(final Class<K> keyType, final Class<V> valueType) { | |
if (keyType == null || valueType == null) { | |
throw new NullPointerException("keyType and/or valueType can't be null"); | |
} else { | |
this.keyType = keyType; | |
this.valueType = valueType; | |
return this; | |
} | |
} | |
@Override | |
public Iterable<CacheEntryListenerConfiguration<K, V>> getCacheEntryListenerConfigurations() { | |
return listenerConfigurations; | |
} | |
public MutableConfiguration<K, V> addCacheEntryListenerConfiguration(final CacheEntryListenerConfiguration<K, V> cacheEntryListenerConfiguration) { | |
if (cacheEntryListenerConfiguration == null) { | |
throw new NullPointerException("CacheEntryListenerConfiguration can't be null"); | |
} | |
boolean alreadyExists = false; | |
for (final CacheEntryListenerConfiguration<? super K, ? super V> c : listenerConfigurations) { | |
if (c.equals(cacheEntryListenerConfiguration)) { | |
alreadyExists = true; | |
} | |
} | |
if (!alreadyExists) { | |
this.listenerConfigurations.add(cacheEntryListenerConfiguration); | |
} else { | |
throw new IllegalArgumentException("A CacheEntryListenerConfiguration can " + | |
"be registered only once"); | |
} | |
return this; | |
} | |
public MutableConfiguration<K, V> removeCacheEntryListenerConfiguration(final CacheEntryListenerConfiguration<K, V> cacheEntryListenerConfiguration) { | |
if (cacheEntryListenerConfiguration == null) { | |
throw new NullPointerException("CacheEntryListenerConfiguration can't be null"); | |
} | |
listenerConfigurations.remove(cacheEntryListenerConfiguration); | |
return this; | |
} | |
@Override | |
public Factory<CacheLoader<K, V>> getCacheLoaderFactory() { | |
return this.cacheLoaderFactory; | |
} | |
public MutableConfiguration<K, V> setCacheLoaderFactory(final Factory<? extends CacheLoader<K, V>> factory) { | |
this.cacheLoaderFactory = (Factory<CacheLoader<K, V>>) factory; | |
return this; | |
} | |
@Override | |
public Factory<CacheWriter<? super K, ? super V>> getCacheWriterFactory() { | |
return this.cacheWriterFactory; | |
} | |
public MutableConfiguration<K, V> setCacheWriterFactory(final Factory<? extends | |
CacheWriter<? super K, ? super V>> factory) { | |
this.cacheWriterFactory = (Factory<CacheWriter<? super K, ? super V>>) factory; | |
return this; | |
} | |
public Factory<ExpiryPolicy> getExpiryPolicyFactory() { | |
return this.expiryPolicyFactory; | |
} | |
public MutableConfiguration<K, V> setExpiryPolicyFactory(final Factory<? extends ExpiryPolicy> factory) { | |
if (factory == null) { | |
this.expiryPolicyFactory = EternalExpiryPolicy.factoryOf(); | |
} else { | |
this.expiryPolicyFactory = (Factory<ExpiryPolicy>) factory; | |
} | |
return this; | |
} | |
@Override | |
public boolean isReadThrough() { | |
return this.isReadThrough; | |
} | |
public MutableConfiguration<K, V> setReadThrough(final boolean isReadThrough) { | |
this.isReadThrough = isReadThrough; | |
return this; | |
} | |
@Override | |
public boolean isWriteThrough() { | |
return this.isWriteThrough; | |
} | |
public MutableConfiguration<K, V> setWriteThrough(final boolean isWriteThrough) { | |
this.isWriteThrough = isWriteThrough; | |
return this; | |
} | |
@Override | |
public boolean isStoreByValue() { | |
return this.isStoreByValue; | |
} | |
public MutableConfiguration<K, V> setStoreByValue(final boolean isStoreByValue) { | |
this.isStoreByValue = isStoreByValue; | |
return this; | |
} | |
@Override | |
public boolean isStatisticsEnabled() { | |
return this.isStatisticsEnabled; | |
} | |
public MutableConfiguration<K, V> setStatisticsEnabled(final boolean enabled) { | |
this.isStatisticsEnabled = enabled; | |
return this; | |
} | |
@Override | |
public boolean isManagementEnabled() { | |
return this.isManagementEnabled; | |
} | |
public MutableConfiguration<K, V> setManagementEnabled(final boolean enabled) { | |
this.isManagementEnabled = enabled; | |
return this; | |
} | |
@Override | |
public int hashCode() { | |
final int prime = 31; | |
int result = 1; | |
result = prime * result + keyType.hashCode(); | |
result = prime * result + valueType.hashCode(); | |
result = prime * result + ((listenerConfigurations == null) ? 0 : listenerConfigurations.hashCode()); | |
result = prime * result + ((cacheLoaderFactory == null) ? 0 : cacheLoaderFactory.hashCode()); | |
result = prime * result + ((cacheWriterFactory == null) ? 0 : cacheWriterFactory.hashCode()); | |
result = prime * result + ((expiryPolicyFactory == null) ? 0 : expiryPolicyFactory.hashCode()); | |
result = prime * result + (isReadThrough ? 1231 : 1237); | |
result = prime * result + (isStatisticsEnabled ? 1231 : 1237); | |
result = prime * result + (isStoreByValue ? 1231 : 1237); | |
result = prime * result + (isWriteThrough ? 1231 : 1237); | |
return result; | |
} | |
@Override | |
public boolean equals(final Object object) { | |
if (this == object) { | |
return true; | |
} | |
if (object == null) { | |
return false; | |
} | |
if (!(object instanceof MutableConfiguration)) { | |
return false; | |
} | |
final MutableConfiguration<?, ?> other = (MutableConfiguration<?, ?>) object; | |
if (!keyType.equals(other.keyType)) { | |
return false; | |
} | |
if (!valueType.equals(other.valueType)) { | |
return false; | |
} | |
if (!listenerConfigurations.equals(other.listenerConfigurations)) { | |
return false; | |
} | |
if (cacheLoaderFactory == null) { | |
if (other.cacheLoaderFactory != null) { | |
return false; | |
} | |
} else if (!cacheLoaderFactory.equals(other.cacheLoaderFactory)) { | |
return false; | |
} | |
if (cacheWriterFactory == null) { | |
if (other.cacheWriterFactory != null) { | |
return false; | |
} | |
} else if (!cacheWriterFactory.equals(other.cacheWriterFactory)) { | |
return false; | |
} | |
if (expiryPolicyFactory == null) { | |
if (other.expiryPolicyFactory != null) { | |
return false; | |
} | |
} else if (!expiryPolicyFactory.equals(other.expiryPolicyFactory)) { | |
return false; | |
} | |
if (isReadThrough != other.isReadThrough) { | |
return false; | |
} | |
if (isStatisticsEnabled != other.isStatisticsEnabled) { | |
return false; | |
} | |
if (isStoreByValue != other.isStoreByValue) { | |
return false; | |
} | |
if (isWriteThrough != other.isWriteThrough) { | |
return false; | |
} | |
return true; | |
} | |
} |