com.hazelcast.client.config.QueryCacheConfigBuilderHelper Maven / Gradle / Ivy
/*
* Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved.
*
* 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 com.hazelcast.client.config;
import com.hazelcast.config.AbstractXmlConfigHelper;
import com.hazelcast.config.EntryListenerConfig;
import com.hazelcast.config.EvictionConfig;
import com.hazelcast.config.EvictionPolicy;
import com.hazelcast.config.InMemoryFormat;
import com.hazelcast.config.MapIndexConfig;
import com.hazelcast.config.PredicateConfig;
import com.hazelcast.config.QueryCacheConfig;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import static com.hazelcast.util.StringUtil.upperCaseInternal;
/**
* Helper which is used for building {@link QueryCacheConfig} from declarative configurations.
*/
final class QueryCacheConfigBuilderHelper extends AbstractXmlConfigHelper {
QueryCacheConfigBuilderHelper() {
}
void handleQueryCache(ClientConfig clientConfig, Node node) {
for (Node queryCacheNode : childElements(node)) {
if ("query-cache".equals(cleanNodeName(queryCacheNode))) {
NamedNodeMap attrs = queryCacheNode.getAttributes();
String cacheName = getTextContent(attrs.getNamedItem("name"));
String mapName = getTextContent(attrs.getNamedItem("mapName"));
QueryCacheConfig queryCacheConfig = new QueryCacheConfig(cacheName);
for (Node childNode : childElements(queryCacheNode)) {
String textContent = getTextContent(childNode);
String nodeName = cleanNodeName(childNode);
populateQueryCacheConfig(queryCacheConfig, childNode, textContent, nodeName);
}
clientConfig.addQueryCacheConfig(mapName, queryCacheConfig);
}
}
}
private void populateQueryCacheConfig(QueryCacheConfig queryCacheConfig,
Node childNode, String textContent, String nodeName) {
if ("entry-listeners".equals(nodeName)) {
handleEntryListeners(queryCacheConfig, childNode);
} else if ("include-value".equals(nodeName)) {
boolean includeValue = getBooleanValue(textContent);
queryCacheConfig.setIncludeValue(includeValue);
} else if ("batch-size".equals(nodeName)) {
int batchSize = getIntegerValue("batch-size", textContent.trim()
);
queryCacheConfig.setBatchSize(batchSize);
} else if ("buffer-size".equals(nodeName)) {
int bufferSize = getIntegerValue("buffer-size", textContent.trim()
);
queryCacheConfig.setBufferSize(bufferSize);
} else if ("delay-seconds".equals(nodeName)) {
int delaySeconds = getIntegerValue("delay-seconds", textContent.trim()
);
queryCacheConfig.setDelaySeconds(delaySeconds);
} else if ("in-memory-format".equals(nodeName)) {
String value = textContent.trim();
queryCacheConfig.setInMemoryFormat(InMemoryFormat.valueOf(upperCaseInternal(value)));
} else if ("coalesce".equals(nodeName)) {
boolean coalesce = getBooleanValue(textContent);
queryCacheConfig.setCoalesce(coalesce);
} else if ("populate".equals(nodeName)) {
boolean populate = getBooleanValue(textContent);
queryCacheConfig.setPopulate(populate);
} else if ("indexes".equals(nodeName)) {
queryCacheIndexesHandle(childNode, queryCacheConfig);
} else if ("predicate".equals(nodeName)) {
queryCachePredicateHandler(childNode, queryCacheConfig);
} else if ("eviction".equals(nodeName)) {
queryCacheConfig.setEvictionConfig(getEvictionConfig(childNode));
}
}
private EvictionConfig getEvictionConfig(final Node node) {
final EvictionConfig evictionConfig = new EvictionConfig();
final Node size = node.getAttributes().getNamedItem("size");
final Node maxSizePolicy = node.getAttributes().getNamedItem("max-size-policy");
final Node evictionPolicy = node.getAttributes().getNamedItem("eviction-policy");
if (size != null) {
evictionConfig.setSize(Integer.parseInt(getTextContent(size)));
}
if (maxSizePolicy != null) {
evictionConfig.setMaximumSizePolicy(
EvictionConfig.MaxSizePolicy.valueOf(
upperCaseInternal(getTextContent(maxSizePolicy)))
);
}
if (evictionPolicy != null) {
evictionConfig.setEvictionPolicy(
EvictionPolicy.valueOf(
upperCaseInternal(getTextContent(evictionPolicy)))
);
}
return evictionConfig;
}
private void handleEntryListeners(QueryCacheConfig queryCacheConfig, Node childNode) {
for (Node listenerNode : childElements(childNode)) {
if ("entry-listener".equals(cleanNodeName(listenerNode))) {
NamedNodeMap listenerNodeAttributes = listenerNode.getAttributes();
boolean incValue
= getBooleanValue(getTextContent(listenerNodeAttributes.getNamedItem("include-value")));
boolean local
= getBooleanValue(getTextContent(listenerNodeAttributes.getNamedItem("local")));
String listenerClass = getTextContent(listenerNode);
queryCacheConfig.addEntryListenerConfig(
new EntryListenerConfig(listenerClass, local, incValue));
}
}
}
private void queryCachePredicateHandler(Node childNode, QueryCacheConfig queryCacheConfig) {
NamedNodeMap predicateAttributes = childNode.getAttributes();
String predicateType = getTextContent(predicateAttributes.getNamedItem("type"));
String textContent = getTextContent(childNode);
PredicateConfig predicateConfig = new PredicateConfig();
if ("class-name".equals(predicateType)) {
predicateConfig.setClassName(textContent);
} else if ("sql".equals(predicateType)) {
predicateConfig.setSql(textContent);
}
queryCacheConfig.setPredicateConfig(predicateConfig);
}
private void queryCacheIndexesHandle(Node n, QueryCacheConfig queryCacheConfig) {
for (Node indexNode : childElements(n)) {
if ("index".equals(cleanNodeName(indexNode))) {
final NamedNodeMap attrs = indexNode.getAttributes();
boolean ordered = getBooleanValue(getTextContent(attrs.getNamedItem("ordered")));
String attribute = getTextContent(indexNode);
queryCacheConfig.addIndexConfig(new MapIndexConfig(attribute, ordered));
}
}
}
}