Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.springframework.data.gemfire.config.GatewayHubParser Maven / Gradle / Ivy
/*
* Copyright 2010-2013 the original author or authors.
*
* 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 org.springframework.data.gemfire.config;
import java.util.List;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.data.gemfire.wan.GatewayHubFactoryBean;
import org.springframework.data.gemfire.wan.GatewayProxy;
import org.springframework.util.CollectionUtils;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
/**
* Parser for the <gateway-hub> SDG XML namespace element used to create GemFire GatewayHubs.
*
* @author David Turanski
* @author John Blum
* @see org.springframework.beans.factory.config.BeanDefinition
* @see org.springframework.beans.factory.support.BeanDefinitionBuilder
* @see org.springframework.beans.factory.support.ManagedList
* @see org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser
* @see org.springframework.beans.factory.xml.ParserContext
* @see org.springframework.data.gemfire.wan.GatewayHubFactoryBean
* @see org.springframework.data.gemfire.wan.GatewayProxy
*/
class GatewayHubParser extends AbstractSimpleBeanDefinitionParser {
@Override
protected Class getBeanClass(Element element) {
return GatewayHubFactoryBean.class;
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
builder.addConstructorArgReference(ParsingUtils.resolveCacheReference(element.getAttribute("cache-ref")));
builder.setLazyInit(false);
ParsingUtils.setPropertyValue(element, builder, "bind-address");
ParsingUtils.setPropertyValue(element, builder, "manual-start");
ParsingUtils.setPropertyValue(element, builder, "max-connections");
ParsingUtils.setPropertyValue(element, builder, "max-time-between-pings", "maximumTimeBetweenPings");
ParsingUtils.setPropertyValue(element, builder, "port");
ParsingUtils.setPropertyValue(element, builder, "socket-buffer-size");
ParsingUtils.setPropertyValue(element, builder, "startup-policy");
parseGateways(element, parserContext, builder);
}
private void parseGateways(Element element, ParserContext parserContext, BeanDefinitionBuilder gatewayHubBuilder) {
List gatewayElements = DomUtils.getChildElementsByTagName(element, "gateway");
if (!CollectionUtils.isEmpty(gatewayElements)) {
ManagedList gateways = new ManagedList();
for (Element gatewayElement : gatewayElements) {
BeanDefinitionBuilder gatewayBuilder = BeanDefinitionBuilder.genericBeanDefinition(GatewayProxy.class);
ParsingUtils.setPropertyValue(gatewayElement, gatewayBuilder, "gateway-id", "id");
ParsingUtils.setPropertyValue(gatewayElement, gatewayBuilder, "concurrency-level");
ParsingUtils.setPropertyValue(gatewayElement, gatewayBuilder, "order-policy");
ParsingUtils.setPropertyValue(gatewayElement, gatewayBuilder, "socket-buffer-size");
ParsingUtils.setPropertyValue(gatewayElement, gatewayBuilder, "socket-read-timeout");
parseGatewayEndpoints(gatewayElement, gatewayBuilder);
parseGatewayListeners(gatewayElement, parserContext, gatewayBuilder);
parseGatewayQueue(gatewayElement, gatewayBuilder);
gateways.add(gatewayBuilder.getBeanDefinition());
}
gatewayHubBuilder.addPropertyValue("gateways", gateways);
}
}
private void parseGatewayEndpoints(Element gatewayElement, BeanDefinitionBuilder gatewayBuilder) {
List endpointElements = DomUtils.getChildElementsByTagName(gatewayElement, "gateway-endpoint");
if (!CollectionUtils.isEmpty(endpointElements)) {
ManagedList endpoints = new ManagedList();
for (Element endpointElement : endpointElements) {
BeanDefinitionBuilder endpointBuilder = BeanDefinitionBuilder.genericBeanDefinition(
GatewayProxy.GatewayEndpoint.class);
ParsingUtils.setPropertyValue(endpointElement, endpointBuilder, "endpoint-id", "id");
ParsingUtils.setPropertyValue(endpointElement, endpointBuilder, "host");
ParsingUtils.setPropertyValue(endpointElement, endpointBuilder, "port");
endpoints.add(endpointBuilder.getBeanDefinition());
}
gatewayBuilder.addPropertyValue("endpoints", endpoints);
}
}
private void parseGatewayListeners(Element gatewayElement, ParserContext parserContext,
BeanDefinitionBuilder gatewayBuilder) {
Element gatewayListenerElement = DomUtils.getChildElementByTagName(gatewayElement, "gateway-listener");
if (gatewayListenerElement != null) {
gatewayBuilder.addPropertyValue("listeners", ParsingUtils.parseRefOrNestedBeanDeclaration(
parserContext, gatewayListenerElement, gatewayBuilder));
}
}
private void parseGatewayQueue(Element gatewayElement, BeanDefinitionBuilder gatewayBuilder) {
Element gatewayQueueElement = DomUtils.getChildElementByTagName(gatewayElement, "gateway-queue");
if (gatewayQueueElement != null) {
BeanDefinitionBuilder queueBuilder = BeanDefinitionBuilder.genericBeanDefinition(
GatewayProxy.GatewayQueue.class);
ParsingUtils.setPropertyValue(gatewayQueueElement, queueBuilder, "alert-threshold");
ParsingUtils.setPropertyValue(gatewayQueueElement, queueBuilder, "batch-size");
ParsingUtils.setPropertyValue(gatewayQueueElement, queueBuilder, "batch-time-interval");
ParsingUtils.setPropertyValue(gatewayQueueElement, queueBuilder, "disk-store-ref");
ParsingUtils.setPropertyValue(gatewayQueueElement, queueBuilder, "enable-batch-conflation");
ParsingUtils.setPropertyValue(gatewayQueueElement, queueBuilder, "maximum-queue-memory");
ParsingUtils.setPropertyValue(gatewayQueueElement, queueBuilder, "persistent");
/* Make sure any disk store is created first */
if (gatewayQueueElement.hasAttribute("disk-store-ref")) {
gatewayBuilder.getBeanDefinition().setDependsOn(new String[] {
gatewayQueueElement.getAttribute("disk-store-ref") });
}
gatewayBuilder.addPropertyValue("queue", queueBuilder.getBeanDefinition());
}
}
}