/**
* 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.camel.component.ehcache;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Set;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
import org.apache.camel.util.ObjectHelper;
import org.ehcache.CacheManager;
import org.ehcache.config.CacheConfiguration;
import org.ehcache.config.Configuration;
import org.ehcache.event.EventFiring;
import org.ehcache.event.EventOrdering;
import org.ehcache.event.EventType;
@UriParams
public class EhcacheConfiguration implements Cloneable {
@UriParam(defaultValue = "true")
private boolean createCacheIfNotExist = true;
@UriParam(label = "producer")
private String action;
@UriParam(label = "producer")
private Object key;
@UriParam
private CacheManager cacheManager;
@UriParam
private Configuration cacheManagerConfiguration;
@UriParam
private String configurationUri;
@UriParam(label = "advanced")
private CacheConfiguration<?, ?> configuration;
@UriParam(label = "advanced", javaType = "java.lang.String", defaultValue = "java.lang.Object")
private Class<?> keyType = Object.class;
@UriParam(label = "advanced", javaType = "java.lang.String", defaultValue = "java.lang.Object")
private Class<?> valueType = Object.class;
@UriParam(label = "consumer", defaultValue = "ORDERED")
private EventOrdering eventOrdering = EventOrdering.ORDERED;
@UriParam(label = "consumer", defaultValue = "ASYNCHRONOUS")
private EventFiring eventFiring = EventFiring.ASYNCHRONOUS;
@UriParam(label = "consumer", enums = "EVICTED,EXPIRED,REMOVED,CREATED,UPDATED", defaultValue = "EVICTED,EXPIRED,REMOVED,CREATED,UPDATED")
private Set<EventType> eventTypes = EnumSet.of(EventType.values()[0], EventType.values());
public EhcacheConfiguration() {
}
/**
* URI pointing to the Ehcache XML configuration file's location
*/
public void setConfigurationUri(String configurationUri) {
this.configurationUri = configurationUri;
}
public String getConfigurationUri() {
return configurationUri;
}
public boolean hasConfigurationUri() {
return ObjectHelper.isNotEmpty(configurationUri);
}
/**
* @deprecated use {@link #getConfigurationUri()} instead
*/
@Deprecated
public String getConfigUri() {
return getConfigurationUri();
}
/**
* URI pointing to the Ehcache XML configuration file's location
*
* @deprecated use {@link #setConfigurationUri(String)} instead
*/
@Deprecated
public void setConfigUri(String configUri) {
setConfigurationUri(configUri);
}
public boolean isCreateCacheIfNotExist() {
return createCacheIfNotExist;
}
/**
* Configure if a cache need to be created if it does exist or can't be
* pre-configured.
*/
public void setCreateCacheIfNotExist(boolean createCacheIfNotExist) {
this.createCacheIfNotExist = createCacheIfNotExist;
}
public String getAction() {
return action;
}
/**
* To configure the default cache action. If an action is set in the message
* header, then the operation from the header takes precedence.
*/
public void setAction(String action) {
this.action = action;
}
public Object getKey() {
return key;
}
/**
* To configure the default action key. If a key is set in the message
* header, then the key from the header takes precedence.
*/
public void setKey(Object key) {
this.key = key;
}
public CacheManager getCacheManager() {
return cacheManager;
}
/**
* The cache manager
*/
public void setCacheManager(CacheManager cacheManager) {
this.cacheManager = cacheManager;
}
public boolean hasCacheManager() {
return this.cacheManager != null;
}
public Configuration getCacheManagerConfiguration() {
return cacheManagerConfiguration;
}
/**
* The cache manager configuration
*/
public void setCacheManagerConfiguration(Configuration cacheManagerConfiguration) {
this.cacheManagerConfiguration = cacheManagerConfiguration;
}
public boolean hasCacheManagerConfiguration() {
return this.cacheManagerConfiguration != null;
}
public EventOrdering getEventOrdering() {
return eventOrdering;
}
/**
* Set the the delivery mode (ordered, unordered)
*/
public void setEventOrdering(String eventOrdering) {
setEventOrdering(EventOrdering.valueOf(eventOrdering));
}
public void setEventOrdering(EventOrdering eventOrdering) {
this.eventOrdering = eventOrdering;
}
public EventFiring getEventFiring() {
return eventFiring;
}
/**
* Set the the delivery mode (synchronous, asynchronous)
*/
public void setEventFiring(String eventFiring) {
setEventFiring(EventFiring.valueOf(eventFiring));
}
public void setEventFiring(EventFiring eventFiring) {
this.eventFiring = eventFiring;
}
public Set<EventType> getEventTypes() {
return eventTypes;
}
/**
* Set the type of events to listen for
*/
public void setEventTypes(String eventTypesString) {
Set<EventType> eventTypes = new HashSet<>();
String[] events = eventTypesString.split(",");
for (String event : events) {
eventTypes.add(EventType.valueOf(event));
}
setEventTypes(eventTypes);
}
public void setEventTypes(Set<EventType> eventTypes) {
this.eventTypes = new HashSet<>(eventTypes);
}
// ****************************
// Cache Configuration
// ****************************
/**
* The default cache configuration to be used to create caches.
*/
public <K, V> void setConfiguration(CacheConfiguration<K, V> configuration) {
this.configuration = configuration;
}
public <K, V> CacheConfiguration<K, V> getConfiguration() {
return (CacheConfiguration<K, V>)configuration;
}
public <K, V> CacheConfiguration<K, V> getMandatoryConfiguration() {
return ObjectHelper.notNull(getConfiguration(), "CacheConfiguration");
}
public Class<?> getKeyType() {
return keyType;
}
/**
* The cache key type, default "java.lang.Object"
*/
public void setKeyType(Class<?> keyType) {
this.keyType = keyType;
}
public Class<?> getValueType() {
return valueType;
}
/**
* The cache value type, default "java.lang.Object"
*/
public void setValueType(Class<?> valueType) {
this.valueType = valueType;
}
// ****************************
// Cloneable
// ****************************
public EhcacheConfiguration copy() {
try {
return (EhcacheConfiguration)super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeCamelException(e);
}
}
}