/**
* 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.jcache;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.configuration.Configuration;
import javax.cache.configuration.Factory;
import javax.cache.event.CacheEntryEventFilter;
import javax.cache.event.EventType;
import javax.cache.expiry.ExpiryPolicy;
import javax.cache.integration.CacheLoader;
import javax.cache.integration.CacheWriter;
import org.apache.camel.CamelContext;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
import org.apache.camel.util.EndpointHelper;
@UriParams
public class JCacheConfiguration {
@UriParam(label = "common")
private String cachingProvider;
@UriParam
private Configuration cacheConfiguration;
@UriParam
private Properties cacheConfigurationProperties;
@UriParam
private String configurationUri;
@UriParam(label = "advanced")
private Factory<CacheLoader> cacheLoaderFactory;
@UriParam(label = "advanced")
private Factory<CacheWriter> cacheWriterFactory;
@UriParam(label = "advanced")
private Factory<ExpiryPolicy> expiryPolicyFactory;
@UriParam
private boolean readThrough;
@UriParam
private boolean writeThrough;
@UriParam(defaultValue = "true")
private boolean storeByValue = true;
@UriParam
private boolean statisticsEnabled;
@UriParam
private boolean managementEnabled;
@UriParam(label = "consumer", enums = "CREATED,UPDATED,REMOVED,EXPIRED")
private List<EventType> filteredEvents;
@UriParam(label = "consumer,advanced")
private List<CacheEntryEventFilter> eventFilters;
@UriParam(label = "consumer")
private boolean oldValueRequired;
@UriParam(label = "consumer")
private boolean synchronous;
@UriParam(label = "producer")
private String action;
@UriParam(label = "advanced", defaultValue = "true")
private boolean createCacheIfNotExists = true;
@UriParam(label = "advanced")
private boolean lookupProviders;
private CamelContext camelContext;
private String cacheName;
public JCacheConfiguration() {
this(null, null);
}
public JCacheConfiguration(String cacheName) {
this(null, cacheName);
}
public JCacheConfiguration(CamelContext camelContext, String cacheName) {
this.camelContext = camelContext;
this.cacheName = cacheName;
}
public CamelContext getCamelContext() {
return this.camelContext;
}
public void setCamelContext(CamelContext camelContext) {
this.camelContext = camelContext;
}
public String getCacheName() {
return this.cacheName;
}
public void setCacheName(String cacheName) {
this.cacheName = cacheName;
}
public ClassLoader getApplicationContextClassLoader() {
return this.camelContext != null
? this.camelContext.getApplicationContextClassLoader()
: null;
}
/**
* The fully qualified class name of the {@link javax.cache.spi.CachingProvider}
*/
public String getCachingProvider() {
return cachingProvider;
}
public void setCachingProvider(String cachingProvider) {
this.cachingProvider = cachingProvider;
}
/**
* A {@link Configuration} for the {@link Cache}
*/
public Configuration getCacheConfiguration() {
return cacheConfiguration;
}
public void setCacheConfiguration(Configuration cacheConfiguration) {
this.cacheConfiguration = cacheConfiguration;
}
/**
* The {@link Properties} for the {@link javax.cache.spi.CachingProvider} to
* create the {@link CacheManager}
*/
public Properties getCacheConfigurationProperties() {
return cacheConfigurationProperties;
}
public void setCacheConfigurationProperties(Properties cacheConfigurationProperties) {
this.cacheConfigurationProperties = cacheConfigurationProperties;
}
/**
* An implementation specific URI for the {@link CacheManager}
*/
public String getConfigurationUri() {
return configurationUri;
}
public void setConfigurationUri(String configurationUri) {
this.configurationUri = configurationUri;
}
/**
* The {@link CacheLoader} factory
*/
public Factory<CacheLoader> getCacheLoaderFactory() {
return cacheLoaderFactory;
}
public void setCacheLoaderFactory(Factory<CacheLoader> cacheLoaderFactory) {
this.cacheLoaderFactory = cacheLoaderFactory;
}
/**
* The {@link CacheWriter} factory
*/
public Factory<CacheWriter> getCacheWriterFactory() {
return cacheWriterFactory;
}
public void setCacheWriterFactory(Factory<CacheWriter> cacheWriterFactory) {
this.cacheWriterFactory = cacheWriterFactory;
}
/**
* The {@link ExpiryPolicy} factory
*/
public Factory<ExpiryPolicy> getExpiryPolicyFactory() {
return expiryPolicyFactory;
}
public void setExpiryPolicyFactory(Factory<ExpiryPolicy> expiryPolicyFactory) {
this.expiryPolicyFactory = expiryPolicyFactory;
}
/**
* If read-through caching should be used
*/
public boolean isReadThrough() {
return readThrough;
}
public void setReadThrough(boolean readThrough) {
this.readThrough = readThrough;
}
/**
* If write-through caching should be used
*/
public boolean isWriteThrough() {
return writeThrough;
}
public void setWriteThrough(boolean writeThrough) {
this.writeThrough = writeThrough;
}
/**
* If cache should use store-by-value or store-by-reference semantics
*/
public boolean isStoreByValue() {
return storeByValue;
}
public void setStoreByValue(boolean storeByValue) {
this.storeByValue = storeByValue;
}
/**
* Whether statistics gathering is enabled
*/
public boolean isStatisticsEnabled() {
return statisticsEnabled;
}
public void setStatisticsEnabled(boolean statisticsEnabled) {
this.statisticsEnabled = statisticsEnabled;
}
/**
* Whether management gathering is enabled
*/
public boolean isManagementEnabled() {
return managementEnabled;
}
public void setManagementEnabled(boolean managementEnabled) {
this.managementEnabled = managementEnabled;
}
/**
* Events a consumer should filter. If using filteredEvents option, then eventFilters one will be ignored
*/
public List<EventType> getFilteredEvents() {
return filteredEvents;
}
public void setFilteredEvents(List<EventType> filteredEvents) {
this.filteredEvents = filteredEvents;
}
public void setFilteredEvents(String filteredEvents) {
this.filteredEvents = new ArrayList<>();
for (String event : filteredEvents.split(",")) {
this.filteredEvents.add(EventType.valueOf(event));
}
}
/**
* The CacheEntryEventFilter. If using eventFilters option, then filteredEvents one will be ignored
*/
public List<CacheEntryEventFilter> getEventFilters() {
return eventFilters;
}
public void setEventFilters(List<CacheEntryEventFilter> eventFilters) {
this.eventFilters = new LinkedList<>(eventFilters);
}
public void setEventFilters(String eventFilter) {
this.eventFilters = EndpointHelper.resolveReferenceListParameter(camelContext, eventFilter, CacheEntryEventFilter.class);
}
/**
* if the old value is required for events
*/
public boolean isOldValueRequired() {
return oldValueRequired;
}
public void setOldValueRequired(boolean oldValueRequired) {
this.oldValueRequired = oldValueRequired;
}
/**
* if the the event listener should block the thread causing the event
*/
public boolean isSynchronous() {
return synchronous;
}
public void setSynchronous(boolean synchronous) {
this.synchronous = synchronous;
}
public String getAction() {
return action;
}
/**
* To configure using a cache operation by default. If an operation in the
* message header, then the operation from the header takes precedence.
*/
public void setAction(String action) {
this.action = action;
}
public boolean isCreateCacheIfNotExists() {
return createCacheIfNotExists;
}
/**
* Configure if a cache need to be created if it does exist or can't be
* pre-configured.
*/
public void setCreateCacheIfNotExists(boolean createCacheIfNotExists) {
this.createCacheIfNotExists = createCacheIfNotExists;
}
public boolean isLookupProviders() {
return lookupProviders;
}
/**
* Configure if a camel-cache should try to find implementations of jcache
* api in runtimes like OSGi.
*/
public void setLookupProviders(boolean lookupProviders) {
this.lookupProviders = lookupProviders;
}
}