All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hazelcast.spring.HazelcastConfigBeanDefinitionParser Maven / Gradle / Ivy

/*
 * Copyright (c) 2008-2016, 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.spring;

import com.hazelcast.config.AwsConfig;
import com.hazelcast.config.CacheDeserializedValues;
import com.hazelcast.config.CachePartitionLostListenerConfig;
import com.hazelcast.config.CacheSimpleConfig;
import com.hazelcast.config.CacheSimpleConfig.ExpiryPolicyFactoryConfig;
import com.hazelcast.config.CacheSimpleConfig.ExpiryPolicyFactoryConfig.DurationConfig;
import com.hazelcast.config.CacheSimpleConfig.ExpiryPolicyFactoryConfig.TimedExpiryPolicyFactoryConfig;
import com.hazelcast.config.CacheSimpleConfig.ExpiryPolicyFactoryConfig.TimedExpiryPolicyFactoryConfig.ExpiryPolicyType;
import com.hazelcast.config.CacheSimpleEntryListenerConfig;
import com.hazelcast.config.Config;
import com.hazelcast.config.CredentialsFactoryConfig;
import com.hazelcast.config.EntryListenerConfig;
import com.hazelcast.config.EvictionConfig;
import com.hazelcast.config.EvictionPolicy;
import com.hazelcast.config.ExecutorConfig;
import com.hazelcast.config.GroupConfig;
import com.hazelcast.config.HotRestartConfig;
import com.hazelcast.config.HotRestartPersistenceConfig;
import com.hazelcast.config.InMemoryFormat;
import com.hazelcast.config.InterfacesConfig;
import com.hazelcast.config.InvalidConfigurationException;
import com.hazelcast.config.ItemListenerConfig;
import com.hazelcast.config.JobTrackerConfig;
import com.hazelcast.config.JoinConfig;
import com.hazelcast.config.ListConfig;
import com.hazelcast.config.ListenerConfig;
import com.hazelcast.config.LoginModuleConfig;
import com.hazelcast.config.ManagementCenterConfig;
import com.hazelcast.config.MapAttributeConfig;
import com.hazelcast.config.MapConfig;
import com.hazelcast.config.MapIndexConfig;
import com.hazelcast.config.MapPartitionLostListenerConfig;
import com.hazelcast.config.MapStoreConfig;
import com.hazelcast.config.MaxSizeConfig;
import com.hazelcast.config.MemberAttributeConfig;
import com.hazelcast.config.MemberGroupConfig;
import com.hazelcast.config.MultiMapConfig;
import com.hazelcast.config.MulticastConfig;
import com.hazelcast.config.NativeMemoryConfig;
import com.hazelcast.config.NearCacheConfig;
import com.hazelcast.config.NetworkConfig;
import com.hazelcast.config.PartitionGroupConfig;
import com.hazelcast.config.PermissionConfig;
import com.hazelcast.config.PermissionConfig.PermissionType;
import com.hazelcast.config.PermissionPolicyConfig;
import com.hazelcast.config.PredicateConfig;
import com.hazelcast.config.QueryCacheConfig;
import com.hazelcast.config.QueueConfig;
import com.hazelcast.config.QueueStoreConfig;
import com.hazelcast.config.QuorumConfig;
import com.hazelcast.config.QuorumListenerConfig;
import com.hazelcast.config.ReplicatedMapConfig;
import com.hazelcast.config.SSLConfig;
import com.hazelcast.config.SecurityConfig;
import com.hazelcast.config.SecurityInterceptorConfig;
import com.hazelcast.config.ServiceConfig;
import com.hazelcast.config.ServicesConfig;
import com.hazelcast.config.SetConfig;
import com.hazelcast.config.SymmetricEncryptionConfig;
import com.hazelcast.config.TcpIpConfig;
import com.hazelcast.config.TopicConfig;
import com.hazelcast.config.WanReplicationConfig;
import com.hazelcast.config.WanReplicationRef;
import com.hazelcast.config.WanTargetClusterConfig;
import com.hazelcast.memory.MemorySize;
import com.hazelcast.memory.MemoryUnit;
import com.hazelcast.nio.ClassLoaderUtil;
import com.hazelcast.quorum.QuorumType;
import com.hazelcast.spi.ServiceConfigurationParser;
import com.hazelcast.util.ExceptionUtil;
import com.hazelcast.util.StringUtil;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.support.ManagedSet;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.util.Assert;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import static com.hazelcast.util.StringUtil.upperCaseInternal;

/**
 * BeanDefinitionParser for Hazelcast Config Configuration
 * 

*

* Sample Spring XML for Hazelcast Config: *

 * <hz:config>
 *  <hz:map name="map1">
 *      <hz:near-cache time-to-live-seconds="0" max-idle-seconds="60"
 *          eviction-policy="LRU" max-size="5000"  invalidate-on-change="true"/>
 *
 *  <hz:map-store enabled="true" class-name="com.foo.DummyStore"
 *          write-delay-seconds="0"/>
 *  </hz:map>
 *  <hz:map name="map2">
 *      <hz:map-store enabled="true" implementation="dummyMapStore"
 *          write-delay-seconds="0"/>
 *  </hz:map>
 *
 *  <bean id="dummyMapStore" class="com.foo.DummyStore" />
 * </hz:config>
 * 
*/ public class HazelcastConfigBeanDefinitionParser extends AbstractHazelcastBeanDefinitionParser { protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { final SpringXmlConfigBuilder springXmlConfigBuilder = new SpringXmlConfigBuilder(parserContext); springXmlConfigBuilder.handleConfig(element); return springXmlConfigBuilder.getBeanDefinition(); } private class SpringXmlConfigBuilder extends SpringXmlBuilderHelper { private final ParserContext parserContext; private ManagedMap mapConfigManagedMap; private ManagedMap cacheConfigManagedMap; private ManagedMap queueManagedMap; private ManagedMap listManagedMap; private ManagedMap setManagedMap; private ManagedMap topicManagedMap; private ManagedMap multiMapManagedMap; private ManagedMap executorManagedMap; private ManagedMap wanReplicationManagedMap; private ManagedMap jobTrackerManagedMap; private ManagedMap replicatedMapManagedMap; private ManagedMap quorumManagedMap; public SpringXmlConfigBuilder(ParserContext parserContext) { this.parserContext = parserContext; this.configBuilder = BeanDefinitionBuilder.rootBeanDefinition(Config.class); this.mapConfigManagedMap = createManagedMap("mapConfigs"); this.cacheConfigManagedMap = createManagedMap("cacheConfigs"); this.queueManagedMap = createManagedMap("queueConfigs"); this.listManagedMap = createManagedMap("listConfigs"); this.setManagedMap = createManagedMap("setConfigs"); this.topicManagedMap = createManagedMap("topicConfigs"); this.multiMapManagedMap = createManagedMap("multiMapConfigs"); this.executorManagedMap = createManagedMap("executorConfigs"); this.wanReplicationManagedMap = createManagedMap("wanReplicationConfigs"); this.jobTrackerManagedMap = createManagedMap("jobTrackerConfigs"); this.replicatedMapManagedMap = createManagedMap("replicatedMapConfigs"); this.quorumManagedMap = createManagedMap("quorumConfigs"); } private ManagedMap createManagedMap(String configName) { ManagedMap managedMap = new ManagedMap(); this.configBuilder.addPropertyValue(configName, managedMap); return managedMap; } public AbstractBeanDefinition getBeanDefinition() { return configBuilder.getBeanDefinition(); } public void handleConfig(final Element element) { if (element != null) { handleCommonBeanAttributes(element, configBuilder, parserContext); for (Node node : childElements(element)) { final String nodeName = cleanNodeName(node); if ("network".equals(nodeName)) { handleNetwork(node); } else if ("group".equals(nodeName)) { handleGroup(node); } else if ("properties".equals(nodeName)) { handleProperties(node); } else if ("executor-service".equals(nodeName)) { handleExecutor(node); } else if ("queue".equals(nodeName)) { handleQueue(node); } else if ("map".equals(nodeName)) { handleMap(node); } else if ("cache".equals(nodeName)) { handleCache(node); } else if ("multimap".equals(nodeName)) { handleMultiMap(node); } else if ("list".equals(nodeName)) { handleList(node); } else if ("set".equals(nodeName)) { handleSet(node); } else if ("topic".equals(nodeName)) { handleTopic(node); } else if ("jobtracker".equals(nodeName)) { handleJobTracker(node); } else if ("replicatedmap".equals(nodeName)) { handleReplicatedMap(node); } else if ("wan-replication".equals(nodeName)) { handleWanReplication(node); } else if ("partition-group".equals(nodeName)) { handlePartitionGroup(node); } else if ("serialization".equals(nodeName)) { handleSerialization(node); } else if ("native-memory".equals(nodeName)) { handleNativeMemory(node); } else if ("security".equals(nodeName)) { handleSecurity(node); } else if ("member-attributes".equals(nodeName)) { handleMemberAttributes(node); } else if ("instance-name".equals(nodeName)) { configBuilder.addPropertyValue(xmlToJavaName(nodeName), getTextContent(node)); } else if ("listeners".equals(nodeName)) { final List listeners = parseListeners(node, ListenerConfig.class); configBuilder.addPropertyValue("listenerConfigs", listeners); } else if ("lite-member".equals(nodeName)) { handleLiteMember(node); } else if ("license-key".equals(nodeName)) { configBuilder.addPropertyValue(xmlToJavaName(nodeName), getTextContent(node)); } else if ("management-center".equals(nodeName)) { handleManagementCenter(node); } else if ("services".equals(nodeName)) { handleServices(node); } else if ("spring-aware".equals(nodeName)) { handleSpringAware(); } else if ("quorum".equals(nodeName)) { handleQuorum(node); } else if ("hot-restart-persistence".equals(nodeName)) { handleHotRestartPersistence(node); } } } } private void handleHotRestartPersistence(Node node) { BeanDefinitionBuilder hotRestartConfigBuilder = createBeanBuilder(HotRestartPersistenceConfig.class); fillAttributeValues(node, hotRestartConfigBuilder); for (Node child : childElements(node)) { String name = cleanNodeName(child); if ("base-dir".equals(name)) { String value = getTextContent(child); hotRestartConfigBuilder.addPropertyValue("baseDir", value); } } configBuilder.addPropertyValue("hotRestartPersistenceConfig", hotRestartConfigBuilder.getBeanDefinition()); } private void handleQuorum(final org.w3c.dom.Node node) { BeanDefinitionBuilder quorumConfigBuilder = createBeanBuilder(QuorumConfig.class); final AbstractBeanDefinition beanDefinition = quorumConfigBuilder.getBeanDefinition(); final String name = getAttribute(node, "name"); quorumConfigBuilder.addPropertyValue("name", name); Node attrEnabled = node.getAttributes().getNamedItem("enabled"); final boolean enabled = attrEnabled != null ? getBooleanValue(getTextContent(attrEnabled)) : false; quorumConfigBuilder.addPropertyValue("enabled", enabled); for (org.w3c.dom.Node n : childElements(node)) { final String value = getTextContent(n).trim(); final String nodeName = cleanNodeName(n); if ("quorum-size".equals(nodeName)) { quorumConfigBuilder.addPropertyValue("size", getIntegerValue("quorum-size", value)); } else if ("quorum-listeners".equals(nodeName)) { ManagedList listeners = parseListeners(n, QuorumListenerConfig.class); quorumConfigBuilder.addPropertyValue("listenerConfigs", listeners); } else if ("quorum-type".equals(nodeName)) { quorumConfigBuilder.addPropertyValue("type", QuorumType.valueOf(value)); } else if ("quorum-function-class-name".equals(nodeName)) { quorumConfigBuilder.addPropertyValue(xmlToJavaName(nodeName), value); } } quorumManagedMap.put(name, beanDefinition); } private void handleLiteMember(Node node) { Node attrEnabled = node.getAttributes().getNamedItem("enabled"); configBuilder.addPropertyValue(xmlToJavaName(cleanNodeName(node)), getTextContent(attrEnabled)); } public void handleServices(Node node) { BeanDefinitionBuilder servicesConfigBuilder = createBeanBuilder(ServicesConfig.class); final AbstractBeanDefinition beanDefinition = servicesConfigBuilder.getBeanDefinition(); fillAttributeValues(node, servicesConfigBuilder); ManagedList serviceConfigManagedList = new ManagedList(); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("service".equals(nodeName)) { serviceConfigManagedList.add(handleService(child)); } } servicesConfigBuilder.addPropertyValue("serviceConfigs", serviceConfigManagedList); configBuilder.addPropertyValue("servicesConfig", beanDefinition); } private AbstractBeanDefinition handleService(Node node) { BeanDefinitionBuilder serviceConfigBuilder = createBeanBuilder(ServiceConfig.class); final AbstractBeanDefinition beanDefinition = serviceConfigBuilder.getBeanDefinition(); fillAttributeValues(node, serviceConfigBuilder); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("name".equals(nodeName)) { serviceConfigBuilder.addPropertyValue(xmlToJavaName(nodeName), getTextContent(child)); } else if ("class-name".equals(nodeName)) { serviceConfigBuilder.addPropertyValue(xmlToJavaName(nodeName), getTextContent(child)); } else if ("properties".equals(nodeName)) { handleProperties(child, serviceConfigBuilder); } else if ("configuration".equals(nodeName)) { final Node parser = child.getAttributes().getNamedItem("parser"); final String name = getTextContent(parser); try { ServiceConfigurationParser serviceConfigurationParser = ClassLoaderUtil.newInstance(getClass().getClassLoader(), name); Object obj = serviceConfigurationParser.parse((Element) child); serviceConfigBuilder.addPropertyValue(xmlToJavaName("config-object"), obj); } catch (Exception e) { ExceptionUtil.sneakyThrow(e); } } } return beanDefinition; } public void handleReplicatedMap(Node node) { BeanDefinitionBuilder replicatedMapConfigBuilder = createBeanBuilder(ReplicatedMapConfig.class); final Node attName = node.getAttributes().getNamedItem("name"); final String name = getTextContent(attName); fillAttributeValues(node, replicatedMapConfigBuilder); for (Node childNode : childElements(node)) { if ("entry-listeners".equals(cleanNodeName(childNode))) { ManagedList listeners = parseListeners(childNode, EntryListenerConfig.class); replicatedMapConfigBuilder.addPropertyValue("listenerConfigs", listeners); } } replicatedMapManagedMap.put(name, replicatedMapConfigBuilder.getBeanDefinition()); } public void handleNetwork(Node node) { BeanDefinitionBuilder networkConfigBuilder = createBeanBuilder(NetworkConfig.class); final AbstractBeanDefinition beanDefinition = networkConfigBuilder.getBeanDefinition(); fillAttributeValues(node, networkConfigBuilder); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("join".equals(nodeName)) { handleJoin(child, networkConfigBuilder); } else if ("interfaces".equals(nodeName)) { handleInterfaces(child, networkConfigBuilder); } else if ("symmetric-encryption".equals(nodeName)) { handleSymmetricEncryption(child, networkConfigBuilder); } else if ("ssl".equals(nodeName)) { handleSSLConfig(child, networkConfigBuilder); } else if ("socket-interceptor".equals(nodeName)) { handleSocketInterceptorConfig(child, networkConfigBuilder); } else if ("outbound-ports".equals(nodeName)) { handleOutboundPorts(child, networkConfigBuilder); } else if ("reuse-address".equals(nodeName)) { handleReuseAddress(child, networkConfigBuilder); } } configBuilder.addPropertyValue("networkConfig", beanDefinition); } /* protected void handleViaReflection(org.w3c.dom.Node child) { final String methodName = xmlToJavaName("handle-" + cleanNodeName(child)); final Method method; try { method = getClass().getMethod(methodName, new Class[]{org.w3c.dom.Node.class}); } catch (NoSuchMethodException e) { e.printStackTrace(); return; } try { method.invoke(this, new Object[]{child}); } catch (Exception e) { e.printStackTrace(); } } */ public void handleGroup(Node node) { createAndFillBeanBuilder(node, GroupConfig.class, "groupConfig", configBuilder); } public void handleProperties(Node node) { handleProperties(node, configBuilder); } public void handleInterfaces(Node node, final BeanDefinitionBuilder networkConfigBuilder) { BeanDefinitionBuilder builder = createBeanBuilder(InterfacesConfig.class); final AbstractBeanDefinition beanDefinition = builder.getBeanDefinition(); final NamedNodeMap atts = node.getAttributes(); if (atts != null) { for (int a = 0; a < atts.getLength(); a++) { final Node att = atts.item(a); final String name = xmlToJavaName(att.getNodeName()); final String value = att.getNodeValue(); builder.addPropertyValue(name, value); } } ManagedList interfacesSet = new ManagedList(); for (Node n : childElements(node)) { String name = xmlToJavaName(cleanNodeName(n)); String value = getTextContent(n); if ("interface".equals(name)) { interfacesSet.add(value); } } builder.addPropertyValue("interfaces", interfacesSet); networkConfigBuilder.addPropertyValue("interfaces", beanDefinition); } public void handleJoin(Node node, BeanDefinitionBuilder networkConfigBuilder) { BeanDefinitionBuilder joinConfigBuilder = createBeanBuilder(JoinConfig.class); final AbstractBeanDefinition beanDefinition = joinConfigBuilder.getBeanDefinition(); for (Node child : childElements(node)) { final String name = cleanNodeName(child); if ("multicast".equals(name)) { handleMulticast(child, joinConfigBuilder); } else if ("tcp-ip".equals(name)) { handleTcpIp(child, joinConfigBuilder); } else if ("aws".equals(name)) { handleAws(child, joinConfigBuilder); } else if ("discovery-strategies".equals(name)) { handleDiscoveryStrategies(child, joinConfigBuilder); } } networkConfigBuilder.addPropertyValue("join", beanDefinition); } private void handleOutboundPorts(final Node node, final BeanDefinitionBuilder networkConfigBuilder) { ManagedList outboundPorts = new ManagedList(); for (Node child : childElements(node)) { final String name = cleanNodeName(child); if ("ports".equals(name)) { String value = getTextContent(child); outboundPorts.add(value); } } networkConfigBuilder.addPropertyValue("outboundPortDefinitions", outboundPorts); } private void handleReuseAddress(final Node node, final BeanDefinitionBuilder networkConfigBuilder) { String value = node.getTextContent(); networkConfigBuilder.addPropertyValue("reuseAddress", value); } private void handleSSLConfig(final Node node, final BeanDefinitionBuilder networkConfigBuilder) { BeanDefinitionBuilder sslConfigBuilder = createBeanBuilder(SSLConfig.class); final String implAttribute = "factory-implementation"; fillAttributeValues(node, sslConfigBuilder, implAttribute); Node implNode = node.getAttributes().getNamedItem(implAttribute); String implementation = implNode != null ? getTextContent(implNode) : null; if (implementation != null) { sslConfigBuilder.addPropertyReference(xmlToJavaName(implAttribute), implementation); } for (Node child : childElements(node)) { final String name = cleanNodeName(child); if ("properties".equals(name)) { handleProperties(child, sslConfigBuilder); } } networkConfigBuilder.addPropertyValue("SSLConfig", sslConfigBuilder.getBeanDefinition()); } public void handleSymmetricEncryption(Node node, BeanDefinitionBuilder networkConfigBuilder) { createAndFillBeanBuilder(node, SymmetricEncryptionConfig.class, "symmetricEncryptionConfig", networkConfigBuilder); } public void handleExecutor(Node node) { createAndFillListedBean(node, ExecutorConfig.class, "name", executorManagedMap); } public void handleMulticast(Node node, BeanDefinitionBuilder joinConfigBuilder) { createAndFillBeanBuilder(node, MulticastConfig.class, "multicastConfig", joinConfigBuilder); } public void handleTcpIp(Node node, BeanDefinitionBuilder joinConfigBuilder) { final BeanDefinitionBuilder builder = createAndFillBeanBuilder(node, TcpIpConfig.class, "tcpIpConfig", joinConfigBuilder, "interface", "member", "members"); final ManagedList members = new ManagedList(); for (Node n : childElements(node)) { String name = xmlToJavaName(cleanNodeName(n)); if ("member".equals(name) || "members".equals(name) || "interface".equals(name)) { String value = getTextContent(n); members.add(value); } } builder.addPropertyValue("members", members); } public void handleAws(Node node, BeanDefinitionBuilder joinConfigBuilder) { createAndFillBeanBuilder(node, AwsConfig.class, "awsConfig", joinConfigBuilder); } public void handleQueue(Node node) { BeanDefinitionBuilder queueConfigBuilder = createBeanBuilder(QueueConfig.class); final Node attName = node.getAttributes().getNamedItem("name"); final String name = getTextContent(attName); fillAttributeValues(node, queueConfigBuilder); for (Node childNode : childElements(node)) { final String nodeName = cleanNodeName(childNode); if ("item-listeners".equals(nodeName)) { ManagedList listeners = parseListeners(childNode, ItemListenerConfig.class); queueConfigBuilder.addPropertyValue("itemListenerConfigs", listeners); } else if ("queue-store".equals(nodeName)) { handleQueueStoreConfig(childNode, queueConfigBuilder); } } queueManagedMap.put(name, queueConfigBuilder.getBeanDefinition()); } public void handleQueueStoreConfig(Node node, BeanDefinitionBuilder queueConfigBuilder) { BeanDefinitionBuilder queueStoreConfigBuilder = createBeanBuilder(QueueStoreConfig.class); final AbstractBeanDefinition beanDefinition = queueStoreConfigBuilder.getBeanDefinition(); for (Node child : childElements(node)) { if ("properties".equals(cleanNodeName(child))) { handleProperties(child, queueStoreConfigBuilder); break; } } final String implAttrName = "store-implementation"; final String factoryImplAttrName = "factory-implementation"; fillAttributeValues(node, queueStoreConfigBuilder, implAttrName, factoryImplAttrName); final NamedNodeMap attributes = node.getAttributes(); final Node implRef = attributes.getNamedItem(implAttrName); final Node factoryImplRef = attributes.getNamedItem(factoryImplAttrName); if (factoryImplRef != null) { queueStoreConfigBuilder.addPropertyReference(xmlToJavaName(factoryImplAttrName), getTextContent(factoryImplRef)); } if (implRef != null) { queueStoreConfigBuilder.addPropertyReference(xmlToJavaName(implAttrName), getTextContent(implRef)); } queueConfigBuilder.addPropertyValue("queueStoreConfig", beanDefinition); } public void handleList(Node node) { BeanDefinitionBuilder listConfigBuilder = createBeanBuilder(ListConfig.class); final Node attName = node.getAttributes().getNamedItem("name"); final String name = getTextContent(attName); fillAttributeValues(node, listConfigBuilder); for (Node childNode : childElements(node)) { if ("item-listeners".equals(cleanNodeName(childNode))) { ManagedList listeners = parseListeners(childNode, ItemListenerConfig.class); listConfigBuilder.addPropertyValue("itemListenerConfigs", listeners); } } listManagedMap.put(name, listConfigBuilder.getBeanDefinition()); } public void handleSet(Node node) { BeanDefinitionBuilder setConfigBuilder = createBeanBuilder(SetConfig.class); final Node attName = node.getAttributes().getNamedItem("name"); final String name = getTextContent(attName); fillAttributeValues(node, setConfigBuilder); for (Node childNode : childElements(node)) { if ("item-listeners".equals(cleanNodeName(childNode))) { ManagedList listeners = parseListeners(childNode, ItemListenerConfig.class); setConfigBuilder.addPropertyValue("itemListenerConfigs", listeners); } } setManagedMap.put(name, setConfigBuilder.getBeanDefinition()); } public void handleMap(Node node) { BeanDefinitionBuilder mapConfigBuilder = createBeanBuilder(MapConfig.class); final AbstractBeanDefinition beanDefinition = mapConfigBuilder.getBeanDefinition(); final Node attName = node.getAttributes().getNamedItem("name"); final String name = getTextContent(attName); mapConfigBuilder.addPropertyValue("name", name); fillAttributeValues(node, mapConfigBuilder, "maxSize", "maxSizePolicy"); final BeanDefinitionBuilder maxSizeConfigBuilder = createBeanBuilder(MaxSizeConfig.class); final AbstractBeanDefinition maxSizeConfigBeanDefinition = maxSizeConfigBuilder.getBeanDefinition(); mapConfigBuilder.addPropertyValue("maxSizeConfig", maxSizeConfigBeanDefinition); final Node maxSizeNode = node.getAttributes().getNamedItem("max-size"); if (maxSizeNode != null) { maxSizeConfigBuilder.addPropertyValue("size", getTextContent(maxSizeNode)); } final Node maxSizePolicyNode = node.getAttributes().getNamedItem("max-size-policy"); if (maxSizePolicyNode != null) { maxSizeConfigBuilder .addPropertyValue(xmlToJavaName(cleanNodeName(maxSizePolicyNode)) , MaxSizeConfig.MaxSizePolicy.valueOf(getTextContent(maxSizePolicyNode))); } final Node cacheDeserializedValueNode = node.getAttributes().getNamedItem("cache-deserialized-values"); if (cacheDeserializedValueNode != null) { String cacheDeserializedValueContent = getTextContent(cacheDeserializedValueNode); CacheDeserializedValues value = CacheDeserializedValues.parseString(cacheDeserializedValueContent); mapConfigBuilder.addPropertyValue("cacheDeserializedValues", value); } for (Node childNode : childElements(node)) { final String nodeName = cleanNodeName(childNode); if ("map-store".equals(nodeName)) { handleMapStoreConfig(childNode, mapConfigBuilder); } else if ("near-cache".equals(nodeName)) { handleNearCacheConfig(childNode, mapConfigBuilder); } else if ("wan-replication-ref".equals(nodeName)) { handleWanReplicationRef(mapConfigBuilder, childNode); } else if ("indexes".equals(nodeName)) { ManagedList indexes = new ManagedList(); for (Node indexNode : childElements(childNode)) { final BeanDefinitionBuilder indexConfBuilder = createBeanBuilder(MapIndexConfig.class); fillAttributeValues(indexNode, indexConfBuilder); indexes.add(indexConfBuilder.getBeanDefinition()); } mapConfigBuilder.addPropertyValue("mapIndexConfigs", indexes); } else if ("attributes".equals(nodeName)) { ManagedList attributes = new ManagedList(); for (Node attributeNode : childElements(childNode)) { final BeanDefinitionBuilder attributeConfBuilder = createBeanBuilder(MapAttributeConfig.class); fillAttributeValues(attributeNode, attributeConfBuilder); attributes.add(attributeConfBuilder.getBeanDefinition()); } mapConfigBuilder.addPropertyValue("mapAttributeConfigs", attributes); } else if ("entry-listeners".equals(nodeName)) { ManagedList listeners = parseListeners(childNode, EntryListenerConfig.class); mapConfigBuilder.addPropertyValue("entryListenerConfigs", listeners); } else if ("quorum-ref".equals(nodeName)) { mapConfigBuilder.addPropertyValue("quorumName", getTextContent(node)); } else if ("query-caches".equals(nodeName)) { ManagedList queryCaches = getQueryCaches(childNode); mapConfigBuilder.addPropertyValue("queryCacheConfigs", queryCaches); } else if ("partition-lost-listeners".endsWith(nodeName)) { ManagedList listeners = parseListeners(childNode, MapPartitionLostListenerConfig.class); mapConfigBuilder.addPropertyValue("partitionLostListenerConfigs", listeners); } else if ("hot-restart".equals(nodeName)) { handleHotRestartConfig(mapConfigBuilder, childNode); } } mapConfigManagedMap.put(name, beanDefinition); } private void handleHotRestartConfig(BeanDefinitionBuilder configBuilder, Node node) { BeanDefinitionBuilder hotRestartConfigBuilder = createBeanBuilder(HotRestartConfig.class); fillAttributeValues(node, hotRestartConfigBuilder); configBuilder.addPropertyValue("hotRestartConfig", hotRestartConfigBuilder.getBeanDefinition()); } private ManagedList getQueryCaches(Node childNode) { ManagedList queryCaches = new ManagedList(); for (Node queryCacheNode : childElements(childNode)) { BeanDefinitionBuilder beanDefinitionBuilder = parseQueryCaches(queryCacheNode); queryCaches.add(beanDefinitionBuilder.getBeanDefinition()); } return queryCaches; } private BeanDefinitionBuilder parseQueryCaches(Node queryCacheNode) { final BeanDefinitionBuilder builder = createBeanBuilder(QueryCacheConfig.class); for (Node node : childElements(queryCacheNode)) { String nodeName = cleanNodeName(node); String textContent = getTextContent(node); NamedNodeMap attrs = queryCacheNode.getAttributes(); String cacheName = getTextContent(attrs.getNamedItem("name")); builder.addPropertyValue("name", cacheName); if ("predicate".equals(nodeName)) { BeanDefinitionBuilder predicateBuilder = createBeanBuilder(PredicateConfig.class); String predicateType = getTextContent(node.getAttributes().getNamedItem("type")); if ("sql".equals(predicateType)) { predicateBuilder.addPropertyValue("sql", textContent); } else if ("class-name".equals(predicateType)) { predicateBuilder.addPropertyValue("className", textContent); } builder.addPropertyValue("predicateConfig", predicateBuilder.getBeanDefinition()); } else if ("entry-listeners".equals(nodeName)) { ManagedList listeners = new ManagedList(); final String implementationAttr = "implementation"; for (Node listenerNode : childElements(node)) { BeanDefinitionBuilder listenerConfBuilder = createBeanBuilder(EntryListenerConfig.class); fillAttributeValues(listenerNode, listenerConfBuilder, implementationAttr); Node implementationNode = listenerNode.getAttributes().getNamedItem(implementationAttr); if (implementationNode != null) { listenerConfBuilder.addPropertyReference(implementationAttr, getTextContent(implementationNode)); } listeners.add(listenerConfBuilder.getBeanDefinition()); } builder.addPropertyValue("entryListenerConfigs", listeners); } else if ("include-value".equals(nodeName)) { boolean includeValue = getBooleanValue(textContent); builder.addPropertyValue("includeValue", includeValue); } else if ("batch-size".equals(nodeName)) { int batchSize = getIntegerValue("batch-size", textContent.trim() ); builder.addPropertyValue("batchSize", batchSize); } else if ("buffer-size".equals(nodeName)) { int bufferSize = getIntegerValue("buffer-size", textContent.trim() ); builder.addPropertyValue("bufferSize", bufferSize); } else if ("delay-seconds".equals(nodeName)) { int delaySeconds = getIntegerValue("delay-seconds", textContent.trim() ); builder.addPropertyValue("delaySeconds", delaySeconds); } else if ("in-memory-format".equals(nodeName)) { String value = textContent.trim(); builder.addPropertyValue("inMemoryFormat", InMemoryFormat.valueOf(upperCaseInternal(value))); } else if ("coalesce".equals(nodeName)) { boolean coalesce = getBooleanValue(textContent); builder.addPropertyValue("coalesce", coalesce); } else if ("populate".equals(nodeName)) { boolean populate = getBooleanValue(textContent); builder.addPropertyValue("populate", populate); } else if ("indexes".equals(nodeName)) { ManagedList indexes = new ManagedList(); for (Node indexNode : childElements(node)) { final BeanDefinitionBuilder indexConfBuilder = createBeanBuilder(MapIndexConfig.class); fillAttributeValues(indexNode, indexConfBuilder); indexes.add(indexConfBuilder.getBeanDefinition()); } builder.addPropertyValue("indexConfigs", indexes); } else if ("eviction".equals(nodeName)) { builder.addPropertyValue("evictionConfig", getEvictionConfig(node)); } } return builder; } public void handleCache(Node node) { BeanDefinitionBuilder cacheConfigBuilder = createBeanBuilder(CacheSimpleConfig.class); final Node attName = node.getAttributes().getNamedItem("name"); final String name = getTextContent(attName); fillAttributeValues(node, cacheConfigBuilder); for (Node childNode : childElements(node)) { if ("eviction".equals(cleanNodeName(childNode))) { EvictionConfig evictionConfig = getEvictionConfig(childNode); EvictionPolicy evictionPolicy = evictionConfig.getEvictionPolicy(); if (evictionPolicy == null || evictionPolicy == EvictionPolicy.NONE) { throw new InvalidConfigurationException("Eviction policy of cache cannot be null or \"NONE\""); } cacheConfigBuilder.addPropertyValue("evictionConfig", evictionConfig); } else if ("expiry-policy-factory".equals(cleanNodeName(childNode))) { cacheConfigBuilder.addPropertyValue("expiryPolicyFactoryConfig", getExpiryPolicyFactoryConfig(childNode)); } else if ("cache-entry-listeners".equals(cleanNodeName(childNode))) { ManagedList listeners = new ManagedList(); for (Node listenerNode : childElements(childNode)) { final BeanDefinitionBuilder listenerConfBuilder = createBeanBuilder(CacheSimpleEntryListenerConfig.class); fillAttributeValues(listenerNode, listenerConfBuilder); listeners.add(listenerConfBuilder.getBeanDefinition()); } cacheConfigBuilder.addPropertyValue("cacheEntryListeners", listeners); } else if ("wan-replication-ref".equals(cleanNodeName(childNode))) { handleWanReplicationRef(cacheConfigBuilder, childNode); } else if ("partition-lost-listeners".equals(cleanNodeName(childNode))) { ManagedList listeners = parseListeners(childNode, CachePartitionLostListenerConfig.class); cacheConfigBuilder.addPropertyValue("partitionLostListenerConfigs", listeners); } else if ("quorum-ref".equals(cleanNodeName(childNode))) { cacheConfigBuilder.addPropertyValue("quorumName", getTextContent(childNode)); } else if ("partition-lost-listeners".equals(cleanNodeName(childNode))) { ManagedList listeners = parseListeners(childNode, CachePartitionLostListenerConfig.class); cacheConfigBuilder.addPropertyValue("partitionLostListenerConfigs", listeners); } else if ("merge-policy".equals(cleanNodeName(childNode))) { cacheConfigBuilder.addPropertyValue("mergePolicy", getTextContent(childNode)); } else if ("hot-restart".equals(cleanNodeName(childNode))) { handleHotRestartConfig(cacheConfigBuilder, childNode); } } cacheConfigManagedMap.put(name, cacheConfigBuilder.getBeanDefinition()); } public void handleWanReplication(Node node) { final BeanDefinitionBuilder wanRepConfigBuilder = createBeanBuilder(WanReplicationConfig.class); final AbstractBeanDefinition beanDefinition = wanRepConfigBuilder.getBeanDefinition(); final Node attName = node.getAttributes().getNamedItem("name"); final String name = getTextContent(attName); wanRepConfigBuilder.addPropertyValue("name", name); final Node attSnapshotEnabled = node.getAttributes().getNamedItem("snapshot-enabled"); final boolean snapshotEnabled = getBooleanValue(getTextContent(attSnapshotEnabled)); wanRepConfigBuilder.addPropertyValue("snapshotEnabled", snapshotEnabled); final ManagedList targetClusters = new ManagedList(); for (Node n : childElements(node)) { final String nName = cleanNodeName(n); if ("target-cluster".equals(nName)) { final BeanDefinitionBuilder targetClusterConfigBuilder = createBeanBuilder( WanTargetClusterConfig.class); final AbstractBeanDefinition childBeanDefinition = targetClusterConfigBuilder.getBeanDefinition(); fillAttributeValues(n, targetClusterConfigBuilder, Collections.emptyList()); for (Node childNode : childElements(n)) { final String childNodeName = cleanNodeName(childNode); if ("replication-impl".equals(childNodeName)) { targetClusterConfigBuilder .addPropertyValue(xmlToJavaName(childNodeName), getTextContent(childNode)); } else if ("replication-impl-object".equals(childNodeName)) { Node refName = childNode.getAttributes().getNamedItem("ref"); targetClusterConfigBuilder .addPropertyReference(xmlToJavaName(childNodeName), getTextContent(refName)); } else if ("end-points".equals(childNodeName)) { final ManagedList addresses = new ManagedList(); for (Node addressNode : childElements(childNode)) { if ("address".equals(cleanNodeName(addressNode))) { addresses.add(getTextContent(addressNode)); } } targetClusterConfigBuilder.addPropertyValue("endpoints", addresses); } else if ("acknowledge-type".equals(childNodeName)) { targetClusterConfigBuilder .addPropertyValue(xmlToJavaName(childNodeName), getTextContent(childNode)); } else if ("queue-full-behavior".equals(childNodeName)) { targetClusterConfigBuilder .addPropertyValue(xmlToJavaName(childNodeName), getTextContent(childNode)); } else if ("batch-size".equals(childNodeName)) { targetClusterConfigBuilder .addPropertyValue(xmlToJavaName(childNodeName), getTextContent(childNode)); } else if ("batch-max-delay-millis".equals(childNodeName)) { targetClusterConfigBuilder .addPropertyValue(xmlToJavaName(childNodeName), getTextContent(childNode)); } else if ("queue-capacity".equals(childNodeName)) { targetClusterConfigBuilder .addPropertyValue(xmlToJavaName(childNodeName), getTextContent(childNode)); } else if ("response-timeout-millis".equals(childNodeName)) { targetClusterConfigBuilder .addPropertyValue(xmlToJavaName(childNodeName), getTextContent(childNode)); } } targetClusters.add(childBeanDefinition); } } wanRepConfigBuilder.addPropertyValue("targetClusterConfigs", targetClusters); wanReplicationManagedMap.put(name, beanDefinition); } private void handlePartitionGroup(final Node node) { final BeanDefinitionBuilder partitionConfigBuilder = createBeanBuilder(PartitionGroupConfig.class); fillAttributeValues(node, partitionConfigBuilder); ManagedList memberGroups = new ManagedList(); for (Node child : childElements(node)) { final String name = cleanNodeName(child); if ("member-group".equals(name)) { BeanDefinitionBuilder memberGroupBuilder = createBeanBuilder(MemberGroupConfig.class); ManagedList interfaces = new ManagedList(); for (Node n : childElements(child)) { if ("interface".equals(cleanNodeName(n))) { interfaces.add(getTextContent(n)); } } memberGroupBuilder.addPropertyValue("interfaces", interfaces); memberGroups.add(memberGroupBuilder.getBeanDefinition()); } } partitionConfigBuilder.addPropertyValue("memberGroupConfigs", memberGroups); configBuilder.addPropertyValue("partitionGroupConfig", partitionConfigBuilder.getBeanDefinition()); } private void handleManagementCenter(final Node node) { createAndFillBeanBuilder(node, ManagementCenterConfig.class, "managementCenterConfig", configBuilder); } public void handleNearCacheConfig(Node node, BeanDefinitionBuilder configBuilder) { BeanDefinitionBuilder nearCacheConfigBuilder = createBeanBuilder(NearCacheConfig.class); fillAttributeValues(node, nearCacheConfigBuilder); for (Node childNode : childElements(node)) { final String nodeName = cleanNodeName(childNode); if ("eviction".equals(nodeName)) { handleEvictionConfig(childNode, nearCacheConfigBuilder); } } configBuilder.addPropertyValue("nearCacheConfig", nearCacheConfigBuilder.getBeanDefinition()); } private void handleEvictionConfig(Node node, BeanDefinitionBuilder configBuilder) { configBuilder.addPropertyValue("evictionConfig", getEvictionConfig(node)); } private ExpiryPolicyFactoryConfig getExpiryPolicyFactoryConfig(Node node) { final String className = getAttribute(node, "class-name"); if (!StringUtil.isNullOrEmpty(className)) { return new ExpiryPolicyFactoryConfig(className); } else { TimedExpiryPolicyFactoryConfig timedExpiryPolicyFactoryConfig = null; for (org.w3c.dom.Node n : childElements(node)) { final String nodeName = cleanNodeName(n); if ("timed-expiry-policy-factory".equals(nodeName)) { final String expiryPolicyTypeStr = getAttribute(n, "expiry-policy-type"); final String durationAmountStr = getAttribute(n, "duration-amount"); final String timeUnitStr = getAttribute(n, "time-unit"); final ExpiryPolicyType expiryPolicyType = ExpiryPolicyType.valueOf(upperCaseInternal(expiryPolicyTypeStr)); if (expiryPolicyType != ExpiryPolicyType.ETERNAL && (StringUtil.isNullOrEmpty(durationAmountStr) || StringUtil.isNullOrEmpty(timeUnitStr))) { throw new InvalidConfigurationException( "Both of the \"duration-amount\" or \"time-unit\" attributes " + "are required for expiry policy factory configuration " + "(except \"ETERNAL\" expiry policy type)"); } DurationConfig durationConfig = null; if (expiryPolicyType != ExpiryPolicyType.ETERNAL) { final long durationAmount = Long.parseLong(durationAmountStr); final TimeUnit timeUnit = TimeUnit.valueOf(upperCaseInternal(timeUnitStr)); durationConfig = new DurationConfig(durationAmount, timeUnit); } timedExpiryPolicyFactoryConfig = new TimedExpiryPolicyFactoryConfig(expiryPolicyType, durationConfig); } } if (timedExpiryPolicyFactoryConfig == null) { throw new InvalidConfigurationException( "One of the \"class-name\" or \"timed-expire-policy-factory\" configuration " + "is needed for expiry policy factory configuration"); } else { return new ExpiryPolicyFactoryConfig(timedExpiryPolicyFactoryConfig); } } } public void handleMapStoreConfig(Node node, BeanDefinitionBuilder mapConfigBuilder) { BeanDefinitionBuilder mapStoreConfigBuilder = createBeanBuilder(MapStoreConfig.class); final AbstractBeanDefinition beanDefinition = mapStoreConfigBuilder.getBeanDefinition(); for (Node child : childElements(node)) { if ("properties".equals(cleanNodeName(child))) { handleProperties(child, mapStoreConfigBuilder); break; } } final String implAttrName = "implementation"; final String factoryImplAttrName = "factory-implementation"; final String initialModeAttrName = "initial-mode"; fillAttributeValues(node, mapStoreConfigBuilder, implAttrName, factoryImplAttrName, "initialMode"); final NamedNodeMap attrs = node.getAttributes(); final Node implRef = attrs.getNamedItem(implAttrName); final Node factoryImplRef = attrs.getNamedItem(factoryImplAttrName); final Node initialMode = attrs.getNamedItem(initialModeAttrName); if (factoryImplRef != null) { mapStoreConfigBuilder .addPropertyReference(xmlToJavaName(factoryImplAttrName), getTextContent(factoryImplRef)); } if (implRef != null) { mapStoreConfigBuilder.addPropertyReference(xmlToJavaName(implAttrName), getTextContent(implRef)); } if (initialMode != null) { final MapStoreConfig.InitialLoadMode mode = MapStoreConfig.InitialLoadMode.valueOf(upperCaseInternal(getTextContent(initialMode))); mapStoreConfigBuilder.addPropertyValue("initialLoadMode", mode); } mapConfigBuilder.addPropertyValue("mapStoreConfig", beanDefinition); } public void handleMultiMap(Node node) { BeanDefinitionBuilder multiMapConfigBuilder = createBeanBuilder(MultiMapConfig.class); final Node attName = node.getAttributes().getNamedItem("name"); final String name = getTextContent(attName); fillAttributeValues(node, multiMapConfigBuilder); for (Node childNode : childElements(node)) { if ("entry-listeners".equals(cleanNodeName(childNode))) { ManagedList listeners = parseListeners(childNode, EntryListenerConfig.class); multiMapConfigBuilder.addPropertyValue("entryListenerConfigs", listeners); } } multiMapManagedMap.put(name, multiMapConfigBuilder.getBeanDefinition()); } public void handleTopic(Node node) { BeanDefinitionBuilder topicConfigBuilder = createBeanBuilder(TopicConfig.class); final Node attName = node.getAttributes().getNamedItem("name"); final String name = getTextContent(attName); fillAttributeValues(node, topicConfigBuilder); for (Node childNode : childElements(node)) { if ("message-listeners".equals(cleanNodeName(childNode))) { ManagedList listeners = parseListeners(childNode, ListenerConfig.class); topicConfigBuilder.addPropertyValue("messageListenerConfigs", listeners); } else if ("statistics-enabled".equals(cleanNodeName(childNode))) { final String statisticsEnabled = getTextContent(childNode); topicConfigBuilder.addPropertyValue("statisticsEnabled", statisticsEnabled); } else if ("global-ordering-enabled".equals(cleanNodeName(childNode))) { final String globalOrderingEnabled = getTextContent(childNode); topicConfigBuilder.addPropertyValue("globalOrderingEnabled", globalOrderingEnabled); } } topicManagedMap.put(name, topicConfigBuilder.getBeanDefinition()); } public void handleJobTracker(Node node) { BeanDefinitionBuilder jobTrackerConfigBuilder = createBeanBuilder(JobTrackerConfig.class); final Node attName = node.getAttributes().getNamedItem("name"); final String name = getTextContent(attName); fillAttributeValues(node, jobTrackerConfigBuilder); jobTrackerManagedMap.put(name, jobTrackerConfigBuilder.getBeanDefinition()); } private void handleSecurity(final Node node) { final BeanDefinitionBuilder securityConfigBuilder = createBeanBuilder(SecurityConfig.class); final AbstractBeanDefinition beanDefinition = securityConfigBuilder.getBeanDefinition(); fillAttributeValues(node, securityConfigBuilder); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("member-credentials-factory".equals(nodeName)) { handleCredentialsFactory(child, securityConfigBuilder); } else if ("member-login-modules".equals(nodeName)) { handleLoginModules(child, securityConfigBuilder, true); } else if ("client-login-modules".equals(nodeName)) { handleLoginModules(child, securityConfigBuilder, false); } else if ("client-permission-policy".equals(nodeName)) { handlePermissionPolicy(child, securityConfigBuilder); } else if ("client-permissions".equals(nodeName)) { handleSecurityPermissions(child, securityConfigBuilder); } else if ("security-interceptors".equals(nodeName)) { handleSecurityInterceptors(child, securityConfigBuilder); } } configBuilder.addPropertyValue("securityConfig", beanDefinition); } private void handleMemberAttributes(final Node node) { final BeanDefinitionBuilder memberAttributeConfigBuilder = createBeanBuilder(MemberAttributeConfig.class); final AbstractBeanDefinition beanDefinition = memberAttributeConfigBuilder.getBeanDefinition(); ManagedMap attributes = new ManagedMap(); for (Node n : childElements(node)) { final String name = cleanNodeName(n); if (!"attribute".equals(name)) { continue; } final String attributeName = getTextContent(n.getAttributes().getNamedItem("name")).trim(); final String attributeType = getTextContent(n.getAttributes().getNamedItem("type")).trim(); final String value = getTextContent(n); final Object oValue; if ("string".equals(attributeType)) { oValue = value; } else if ("boolean".equals(attributeType)) { oValue = Boolean.parseBoolean(value); } else if ("byte".equals(attributeType)) { oValue = Byte.parseByte(value); } else if ("double".equals(attributeType)) { oValue = Double.parseDouble(value); } else if ("float".equals(attributeType)) { oValue = Float.parseFloat(value); } else if ("int".equals(attributeType)) { oValue = Integer.parseInt(value); } else if ("long".equals(attributeType)) { oValue = Long.parseLong(value); } else if ("short".equals(attributeType)) { oValue = Short.parseShort(value); } else { oValue = value; } attributes.put(attributeName, oValue); } memberAttributeConfigBuilder.addPropertyValue("attributes", attributes); configBuilder.addPropertyValue("memberAttributeConfig", beanDefinition); } private void handleNativeMemory(final Node node) { final BeanDefinitionBuilder nativeMemoryConfigBuilder = createBeanBuilder(NativeMemoryConfig.class); final AbstractBeanDefinition beanDefinition = nativeMemoryConfigBuilder.getBeanDefinition(); fillAttributeValues(node, nativeMemoryConfigBuilder); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("size".equals(nodeName)) { handleMemorySizeConfig(child, nativeMemoryConfigBuilder); } } configBuilder.addPropertyValue("nativeMemoryConfig", beanDefinition); } private void handleMemorySizeConfig(Node node, BeanDefinitionBuilder nativeMemoryConfigBuilder) { BeanDefinitionBuilder memorySizeConfigBuilder = createBeanBuilder(MemorySize.class); final NamedNodeMap attrs = node.getAttributes(); final Node value = attrs.getNamedItem("value"); final Node unit = attrs.getNamedItem("unit"); memorySizeConfigBuilder.addConstructorArgValue(getTextContent(value)); memorySizeConfigBuilder.addConstructorArgValue(MemoryUnit.valueOf(getTextContent(unit))); nativeMemoryConfigBuilder.addPropertyValue("size", memorySizeConfigBuilder.getBeanDefinition()); } private void handleSecurityInterceptors(final Node node, final BeanDefinitionBuilder securityConfigBuilder) { final List lms = new ManagedList(); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("interceptor".equals(nodeName)) { final BeanDefinitionBuilder siConfigBuilder = createBeanBuilder(SecurityInterceptorConfig.class); final AbstractBeanDefinition beanDefinition = siConfigBuilder.getBeanDefinition(); final NamedNodeMap attrs = child.getAttributes(); Node classNameNode = attrs.getNamedItem("class-name"); String className = classNameNode != null ? getTextContent(classNameNode) : null; Node implNode = attrs.getNamedItem("implementation"); String implementation = implNode != null ? getTextContent(implNode) : null; Assert.isTrue(className != null || implementation != null, "One of 'class-name' or 'implementation' attributes is required " + "to create SecurityInterceptorConfig!"); siConfigBuilder.addPropertyValue("className", className); if (implementation != null) { siConfigBuilder.addPropertyReference("implementation", implementation); } lms.add(beanDefinition); } } securityConfigBuilder.addPropertyValue("securityInterceptorConfigs", lms); } private void handleCredentialsFactory(final Node node, final BeanDefinitionBuilder securityConfigBuilder) { final BeanDefinitionBuilder credentialsConfigBuilder = createBeanBuilder(CredentialsFactoryConfig.class); final AbstractBeanDefinition beanDefinition = credentialsConfigBuilder.getBeanDefinition(); final NamedNodeMap attrs = node.getAttributes(); Node classNameNode = attrs.getNamedItem("class-name"); String className = classNameNode != null ? getTextContent(classNameNode) : null; Node implNode = attrs.getNamedItem("implementation"); String implementation = implNode != null ? getTextContent(implNode) : null; credentialsConfigBuilder.addPropertyValue("className", className); if (implementation != null) { credentialsConfigBuilder.addPropertyReference("implementation", implementation); } Assert.isTrue(className != null || implementation != null, "One of 'class-name' or 'implementation' " + "attributes is required to create CredentialsFactory!"); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("properties".equals(nodeName)) { handleProperties(child, credentialsConfigBuilder); break; } } securityConfigBuilder.addPropertyValue("memberCredentialsConfig", beanDefinition); } private void handleLoginModules(final Node node, final BeanDefinitionBuilder securityConfigBuilder, boolean member) { final List lms = new ManagedList(); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("login-module".equals(nodeName)) { handleLoginModule(child, lms); } } if (member) { securityConfigBuilder.addPropertyValue("memberLoginModuleConfigs", lms); } else { securityConfigBuilder.addPropertyValue("clientLoginModuleConfigs", lms); } } private void handleLoginModule(final Node node, List list) { final BeanDefinitionBuilder lmConfigBuilder = createBeanBuilder(LoginModuleConfig.class); final AbstractBeanDefinition beanDefinition = lmConfigBuilder.getBeanDefinition(); fillAttributeValues(node, lmConfigBuilder); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("properties".equals(nodeName)) { handleProperties(child, lmConfigBuilder); break; } } list.add(beanDefinition); } private void handlePermissionPolicy(final Node node, final BeanDefinitionBuilder securityConfigBuilder) { final BeanDefinitionBuilder permPolicyConfigBuilder = createBeanBuilder(PermissionPolicyConfig.class); final AbstractBeanDefinition beanDefinition = permPolicyConfigBuilder.getBeanDefinition(); final NamedNodeMap attrs = node.getAttributes(); Node classNameNode = attrs.getNamedItem("class-name"); String className = classNameNode != null ? getTextContent(classNameNode) : null; Node implNode = attrs.getNamedItem("implementation"); String implementation = implNode != null ? getTextContent(implNode) : null; permPolicyConfigBuilder.addPropertyValue("className", className); if (implementation != null) { permPolicyConfigBuilder.addPropertyReference("implementation", implementation); } Assert.isTrue(className != null || implementation != null, "One of 'class-name' or 'implementation' " + "attributes is required to create PermissionPolicy!"); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("properties".equals(nodeName)) { handleProperties(child, permPolicyConfigBuilder); break; } } securityConfigBuilder.addPropertyValue("clientPolicyConfig", beanDefinition); } private void handleSecurityPermissions(final Node node, final BeanDefinitionBuilder securityConfigBuilder) { final Set permissions = new ManagedSet(); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); PermissionType type = PermissionType.getType(nodeName); if (type == null) { continue; } handleSecurityPermission(child, permissions, type); } securityConfigBuilder.addPropertyValue("clientPermissionConfigs", permissions); } private void handleSecurityPermission(final Node node, final Set permissions, PermissionType type) { final BeanDefinitionBuilder permissionConfigBuilder = createBeanBuilder(PermissionConfig.class); final AbstractBeanDefinition beanDefinition = permissionConfigBuilder.getBeanDefinition(); permissionConfigBuilder.addPropertyValue("type", type); final NamedNodeMap attrs = node.getAttributes(); Node nameNode = attrs.getNamedItem("name"); String name = nameNode != null ? getTextContent(nameNode) : "*"; permissionConfigBuilder.addPropertyValue("name", name); Node principalNode = attrs.getNamedItem("principal"); String principal = principalNode != null ? getTextContent(principalNode) : "*"; permissionConfigBuilder.addPropertyValue("principal", principal); final List endpoints = new ManagedList(); final List actions = new ManagedList(); for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("endpoints".equals(nodeName)) { handleSecurityPermissionEndpoints(child, endpoints); } else if ("actions".equals(nodeName)) { handleSecurityPermissionActions(child, actions); } } permissionConfigBuilder.addPropertyValue("endpoints", endpoints); permissionConfigBuilder.addPropertyValue("actions", actions); permissions.add(beanDefinition); } private void handleSecurityPermissionEndpoints(final Node node, final List endpoints) { for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("endpoint".equals(nodeName)) { endpoints.add(getTextContent(child)); } } } private void handleSecurityPermissionActions(final Node node, final List actions) { for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("action".equals(nodeName)) { actions.add(getTextContent(child)); } } } private void handleWanReplicationRef(BeanDefinitionBuilder beanDefinitionBuilder, Node childNode) { final BeanDefinitionBuilder wanReplicationRefBuilder = createBeanBuilder(WanReplicationRef.class); final AbstractBeanDefinition wanReplicationRefBeanDefinition = wanReplicationRefBuilder .getBeanDefinition(); fillValues(childNode, wanReplicationRefBuilder); for (Node node : childElements(childNode)) { final String nodeName = cleanNodeName(node); if (nodeName.equals("filters")) { final List filters = new ManagedList(); handleFilters(node, filters); wanReplicationRefBuilder.addPropertyValue("filters", filters); } } beanDefinitionBuilder.addPropertyValue("wanReplicationRef", wanReplicationRefBeanDefinition); } private void handleFilters(Node node, List filters) { for (Node child : childElements(node)) { final String nodeName = cleanNodeName(child); if ("filter-impl".equals(nodeName)) { filters.add(getTextContent(child)); } } } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy