blob: 61cd4b7ed761006e02d82abee3b27042cb79d850 [file] [log] [blame]
/*
* 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.Map;
import java.util.Properties;
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.configuration.Configuration;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.spi.annotations.Component;
import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultComponent;
/**
* Represents the component that manages {@link JCacheEndpoint}.
*/
@Component("jcache")
public class JCacheComponent extends DefaultComponent {
private String cachingProvider;
private Configuration cacheConfiguration;
private String cacheConfigurationPropertiesRef;
private Map cacheConfigurationProperties;
private String configurationUri;
public JCacheComponent() {
}
public JCacheComponent(CamelContext context) {
super(context);
}
@Override
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
String cacheName = remaining;
JCacheConfiguration configuration = new JCacheConfiguration(getCamelContext(), cacheName);
configuration.setCachingProvider(cachingProvider);
configuration.setCacheConfiguration(cacheConfiguration);
configuration.setCacheConfigurationProperties(loadProperties());
configuration.setConfigurationUri(configurationUri);
setProperties(configuration, parameters);
return new JCacheEndpoint(uri, this, configuration);
}
private Properties loadProperties() {
Properties answer = null;
if (cacheConfigurationProperties != null) {
answer = new Properties();
answer.putAll(cacheConfigurationProperties);
}
if (answer == null && cacheConfigurationPropertiesRef != null) {
Map map = CamelContextHelper.mandatoryLookup(getCamelContext(), cacheConfigurationPropertiesRef, Map.class);
answer = new Properties();
answer.putAll(map);
}
return answer;
}
/**
* 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;
}
/**
* Properties to configure jcache
*/
public Map getCacheConfigurationProperties() {
return cacheConfigurationProperties;
}
public void setCacheConfigurationProperties(Map cacheConfigurationProperties) {
this.cacheConfigurationProperties = cacheConfigurationProperties;
}
public String getCacheConfigurationPropertiesRef() {
return cacheConfigurationPropertiesRef;
}
/**
* References to an existing {@link Properties} or {@link Map} to lookup in the registry to use for configuring jcache.
*/
public void setCacheConfigurationPropertiesRef(String cacheConfigurationPropertiesRef) {
this.cacheConfigurationPropertiesRef = cacheConfigurationPropertiesRef;
}
/**
* An implementation specific URI for the {@link CacheManager}
*/
public String getConfigurationUri() {
return configurationUri;
}
public void setConfigurationUri(String configurationUri) {
this.configurationUri = configurationUri;
}
}