/**
* 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.infinispan;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
import org.infinispan.commons.api.BasicCacheContainer;
import org.infinispan.context.Flag;
@UriParams
public class InfinispanConfiguration implements Cloneable {
@UriParam
private String hosts;
@UriParam(label = "producer", defaultValue = "PUT")
private InfinispanOperation operation = InfinispanOperation.PUT;
@Deprecated
@UriParam(label = "consumer", defaultValue = "PUT")
private String command = "PUT";
@UriParam(label = "consumer", defaultValue = "true")
private boolean sync = true;
@UriParam(label = "consumer", javaType = "java.lang.String")
private Set<String> eventTypes;
@UriParam(label = "consumer")
private InfinispanCustomListener customListener;
@UriParam(label = "consumer", defaultValue = "false")
private boolean clusteredListener;
@UriParam
private InfinispanQueryBuilder queryBuilder;
@UriParam(label = "advanced", javaType = "java.lang.String")
private Flag[] flags;
@UriParam(label = "advanced")
private String configurationUri;
@UriParam(label = "advanced")
private Map<String, String> configurationProperties;
@UriParam(label = "advanced")
private BasicCacheContainer cacheContainer;
@UriParam(label = "advanced")
private Object cacheContainerConfiguration;
@UriParam(label = "advanced")
private Object resultHeader;
public String getCommand() {
return operation.toString();
}
/**
* The operation to perform.
*
* @deprecated replaced by @{link setOperation}
*/
public void setCommand(String command) {
if (command.startsWith(InfinispanConstants.OPERATION)) {
command = command.substring(InfinispanConstants.OPERATION.length()).toUpperCase();
}
setOperation(InfinispanOperation.valueOf(command));
}
public InfinispanOperation getOperation() {
return operation;
}
/**
* The operation to perform.
*/
public void setOperation(InfinispanOperation operation) {
this.operation = operation;
}
public InfinispanOperation getOperationOrDefault() {
return this.operation != null ? operation : InfinispanOperation.PUT;
}
/**
* Specifies the host of the cache on Infinispan instance
*/
public String getHosts() {
return hosts;
}
public void setHosts(String hosts) {
this.hosts = hosts;
}
/**
* Specifies the cache Container to connect
*/
public BasicCacheContainer getCacheContainer() {
return cacheContainer;
}
public void setCacheContainer(BasicCacheContainer cacheContainer) {
this.cacheContainer = cacheContainer;
}
/**
* If true, the consumer will receive notifications synchronously
*/
public boolean isSync() {
return sync;
}
public void setSync(boolean sync) {
this.sync = sync;
}
/**
* If true, the listener will be installed for the entire cluster
*/
public boolean isClusteredListener() {
return clusteredListener;
}
public void setClusteredListener(boolean clusteredListener) {
this.clusteredListener = clusteredListener;
}
public Set<String> getEventTypes() {
return eventTypes;
}
/**
* Specifies the set of event types to register by the consumer. Multiple event can be separated by comma.
* <p/>
* The possible event types are: CACHE_ENTRY_ACTIVATED, CACHE_ENTRY_PASSIVATED, CACHE_ENTRY_VISITED, CACHE_ENTRY_LOADED,
* CACHE_ENTRY_EVICTED, CACHE_ENTRY_CREATED, CACHE_ENTRY_REMOVED, CACHE_ENTRY_MODIFIED, TRANSACTION_COMPLETED,
* TRANSACTION_REGISTERED, CACHE_ENTRY_INVALIDATED, DATA_REHASHED, TOPOLOGY_CHANGED, PARTITION_STATUS_CHANGED
*/
public void setEventTypes(Set<String> eventTypes) {
this.eventTypes = eventTypes;
}
/**
* Specifies the set of event types to register by the consumer. Multiple event can be separated by comma.
* <p/>
* The possible event types are: CACHE_ENTRY_ACTIVATED, CACHE_ENTRY_PASSIVATED, CACHE_ENTRY_VISITED, CACHE_ENTRY_LOADED,
* CACHE_ENTRY_EVICTED, CACHE_ENTRY_CREATED, CACHE_ENTRY_REMOVED, CACHE_ENTRY_MODIFIED, TRANSACTION_COMPLETED,
* TRANSACTION_REGISTERED, CACHE_ENTRY_INVALIDATED, DATA_REHASHED, TOPOLOGY_CHANGED, PARTITION_STATUS_CHANGED
*/
public void setEventTypes(String eventTypes) {
this.eventTypes = new HashSet<>(Arrays.asList(eventTypes.split(",")));
}
/**
* Returns the custom listener in use, if provided
*/
public InfinispanCustomListener getCustomListener() {
return customListener;
}
public void setCustomListener(InfinispanCustomListener customListener) {
this.customListener = customListener;
}
public boolean hasCustomListener() {
return customListener != null;
}
public InfinispanQueryBuilder getQueryBuilder() {
return queryBuilder;
}
/**
* Specifies the query builder.
*/
public void setQueryBuilder(InfinispanQueryBuilder queryBuilder) {
this.queryBuilder = queryBuilder;
}
public boolean hasQueryBuilder() {
return queryBuilder != null;
}
public Flag[] getFlags() {
return flags;
}
/**
* A comma separated list of Flag to be applied by default on each cache
* invocation, not applicable to remote caches.
*/
public void setFlags(String flagsAsString) {
String[] flagsArray = flagsAsString.split(",");
this.flags = new Flag[flagsArray.length];
for (int i = 0; i < flagsArray.length; i++) {
this.flags[i] = Flag.valueOf(flagsArray[i]);
}
}
public void setFlags(Flag... flags) {
this.flags = flags;
}
public boolean hasFlags() {
return flags != null && flags.length > 0;
}
/**
* An implementation specific URI for the CacheManager
*/
public String getConfigurationUri() {
return configurationUri;
}
public void setConfigurationUri(String configurationUri) {
this.configurationUri = configurationUri;
}
public Map<String, String> getConfigurationProperties() {
return configurationProperties;
}
/**
* Implementation specific properties for the CacheManager
*/
public void setConfigurationProperties(Map<String, String> configurationProperties) {
this.configurationProperties = configurationProperties;
}
/**
* Adds an implementation specific property for the CacheManager
*/
public void addConfigurationProperty(String key, String value) {
if (this.configurationProperties == null) {
this.configurationProperties = new HashMap<>();
}
this.configurationProperties.put(key, value);
}
public Object getCacheContainerConfiguration() {
return cacheContainerConfiguration;
}
/**
* The CacheContainer configuration
*/
public void setCacheContainerConfiguration(Object cacheContainerConfiguration) {
this.cacheContainerConfiguration = cacheContainerConfiguration;
}
public InfinispanConfiguration copy() {
try {
return (InfinispanConfiguration)super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeCamelException(e);
}
}
public Object getResultHeader() {
return resultHeader;
}
/**
* Store the operation result in a header instead of the message body.
*
* By default, resultHeader == null and the query result is stored in the
* message body, any existing content in the message body is discarded. If
* resultHeader is set, the value is used as the name of the header to store
* the query result and the original message body is preserved.
*
* This value can be overridden by an in message header named:
*
* CamelInfinispanOperationResultHeader
*/
public void setResultHeader(Object resultHeader) {
this.resultHeader = resultHeader;
}
}