Example usage for org.springframework.beans.factory.support BeanDefinitionBuilder getBeanDefinition

List of usage examples for org.springframework.beans.factory.support BeanDefinitionBuilder getBeanDefinition

Introduction

In this page you can find the example usage for org.springframework.beans.factory.support BeanDefinitionBuilder getBeanDefinition.

Prototype

public AbstractBeanDefinition getBeanDefinition() 

Source Link

Document

Validate and return the created BeanDefinition object.

Usage

From source file:org.jdal.vaadin.beans.TableBeanDefinitionParser.java

/**
 * {@inheritDoc}//from   w w  w  .java  2s .  c  o  m
 */
@SuppressWarnings("rawtypes")
public BeanDefinition parse(Element element, ParserContext parserContext) {
    // Defaults
    String entity = null;

    if (element.hasAttribute(ENTITY))
        entity = element.getAttribute(ENTITY);

    String name = StringUtils.uncapitalize(StringUtils.substringAfterLast(entity, "."));

    if (element.hasAttribute(ID))
        name = element.getAttribute(ID);

    parserContext.pushContainingComponent(
            new CompositeComponentDefinition(name, parserContext.extractSource(element)));

    // Bean names
    String pageableTableBeanName = name + PAGEABLE_TABLE_SUFFIX;
    String tableBeanName = name + TABLE_SUFFIX;
    String dataSource = name + SERVICE_SUFFIX;
    String paginator = PAGINATOR_VIEW;
    String editor = name + EDITOR_SUFFIX;
    String actions = DefaultsBeanDefinitionParser.DEFAULT_TABLE_ACTIONS;
    String guiFactory = DefaultsBeanDefinitionParser.DEFAULT_GUI_FACTORY;
    String scope = BeanDefinition.SCOPE_PROTOTYPE;
    String pageableTableClass = DEFAULT_PAGEABLE_TABLE_CLASS;
    String tableClass = DEFAULT_TABLE_CLASS;

    if (element.hasAttribute(DATA_SOURCE))
        dataSource = element.getAttribute(DATA_SOURCE);

    if (element.hasAttribute(PAGINATOR))
        paginator = element.getAttribute(PAGINATOR);

    if (element.hasAttribute(ACTIONS))
        actions = element.getAttribute(ACTIONS);

    if (element.hasAttribute(GUI_FACTORY))
        guiFactory = element.getAttribute(GUI_FACTORY);

    if (element.hasAttribute(EDITOR))
        editor = element.getAttribute(EDITOR);

    if (element.hasAttribute(SCOPE))
        scope = element.getAttribute(SCOPE);

    if (element.hasAttribute(PAGEABLE_TABLE_CLASS))
        pageableTableClass = element.getAttribute(PAGEABLE_TABLE_CLASS);

    if (element.hasAttribute(TABLE_CLASS))
        tableClass = element.getAttribute(TABLE_CLASS);

    // create PageableTable
    BeanDefinitionBuilder bdb = BeanDefinitionBuilder.genericBeanDefinition(pageableTableClass);
    bdb.setScope(scope);
    bdb.addPropertyReference(DATA_SOURCE, dataSource);
    bdb.addPropertyReference(PAGINATOR_VIEW, paginator);
    bdb.addPropertyValue(NAME, pageableTableBeanName);
    bdb.addPropertyReference(TABLE, tableBeanName);
    bdb.addPropertyReference(GUI_FACTORY, guiFactory);
    bdb.addPropertyValue(EDITOR_NAME, editor);
    bdb.addPropertyValue(ENTITY_CLASS, entity);

    BeanDefinitionUtils.addPropertyReferenceIfNeeded(bdb, element, TABLE_SERVICE);
    BeanDefinitionUtils.addPropertyReferenceIfNeeded(bdb, element, FILTER);
    BeanDefinitionUtils.addPropertyReferenceIfNeeded(bdb, element, MESSAGE_SOURCE);
    BeanDefinitionUtils.addPropertyReferenceIfNeeded(bdb, element, FILTER_FORM);
    BeanDefinitionUtils.addPropertyValueIfNeeded(bdb, element, SORT_PROPERTY);
    BeanDefinitionUtils.addPropertyValueIfNeeded(bdb, element, ORDER);
    BeanDefinitionUtils.addPropertyValueIfNeeded(bdb, element, PAGE_SIZE);
    BeanDefinitionUtils.addPropertyValueIfNeeded(bdb, element, NATIVE_BUTTONS);
    BeanDefinitionUtils.addPropertyValueIfNeeded(bdb, element, PROPAGATE_SERVICE);

    if (!element.hasAttribute(USE_ACTIONS) || "true".equals(element.getAttribute(USE_ACTIONS)))
        bdb.addPropertyReference(ACTIONS, actions);

    parserContext.getDelegate().parseBeanDefinitionAttributes(element, pageableTableBeanName, null,
            bdb.getBeanDefinition());

    BeanDefinitionHolder holder = new BeanDefinitionHolder(bdb.getBeanDefinition(), pageableTableBeanName);

    // Test Decorators like aop:scoped-proxy
    NodeList childNodes = element.getChildNodes();
    for (int i = 0; i < childNodes.getLength(); i++) {
        Node n = childNodes.item(i);
        if (Node.ELEMENT_NODE != n.getNodeType() || COLUMNS.equals(n.getLocalName()))
            continue;

        NamespaceHandler handler = parserContext.getReaderContext().getNamespaceHandlerResolver()
                .resolve(n.getNamespaceURI());
        if (handler != null) {
            holder = handler.decorate(n, holder, parserContext);
        }
    }

    parserContext.registerBeanComponent(new BeanComponentDefinition(holder));

    // create ConfigurableTable
    bdb = BeanDefinitionBuilder.genericBeanDefinition(tableClass);
    bdb.setScope(BeanDefinition.SCOPE_PROTOTYPE);

    BeanDefinitionUtils.addPropertyReferenceIfNeeded(bdb, element, FIELD_FACTORY);
    BeanDefinitionUtils.addPropertyValueIfNeeded(bdb, element, MULTISELECT);

    if (element.hasAttribute(SELECTABLE)) {
        bdb.addPropertyValue(SELECTABLE, element.getAttribute(SELECTABLE));
    } else {
        // set selectable by default
        bdb.addPropertyValue(SELECTABLE, true);
    }

    // parse columns
    NodeList nl = element.getElementsByTagNameNS(element.getNamespaceURI(), COLUMNS);

    if (nl.getLength() > 0) {
        List columns = parserContext.getDelegate().parseListElement((Element) nl.item(0),
                bdb.getRawBeanDefinition());
        bdb.addPropertyValue(COLUMNS, columns);
    }

    registerBeanDefinition(element, parserContext, tableBeanName, bdb);

    parserContext.popAndRegisterContainingComponent();

    return null;
}

From source file:org.xacml4j.spring.pdp.PolicyDecisionPointDefinitionParser.java

@Override
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
    BeanDefinitionBuilder factory = BeanDefinitionBuilder
            .rootBeanDefinition(PolicyDecisionPointFactoryBean.class);
    factory.addConstructorArgValue(element.getAttribute("id"));
    List<Element> childElements = DomUtils.getChildElementsByTagName(element,
            new String[] { "PolicyIdReference", "PolicySetIdReference" });
    if (childElements != null && childElements.size() > 0) {
        parseChildComponents(childElements, factory);
    }/*from   w w  w  . ja  v  a  2s  .  co  m*/
    String pipRef = element.getAttribute("pip");
    factory.addPropertyReference("policyInformationPoint", pipRef);
    String repositoryRef = element.getAttribute("repository");
    factory.addPropertyReference("policyRepository", repositoryRef);
    String auditorRef = element.getAttribute("auditor");
    if (StringUtils.hasText(auditorRef)) {
        factory.addPropertyReference("decisionAuditor", auditorRef);
    }
    String handlers = element.getAttribute("handlers");
    if (StringUtils.hasText(handlers)) {
        factory.addPropertyReference("handlers", handlers);
    }
    String xpathProvider = element.getAttribute("xpath-provider");
    if (StringUtils.hasText(xpathProvider)) {
        factory.addPropertyReference("xpathProvider", xpathProvider);
    }
    String decisionCache = element.getAttribute("decisionCache");
    if (StringUtils.hasText(decisionCache)) {
        factory.addPropertyReference("decisionCache", decisionCache);
    }
    String decisionCacheTTL = element.getAttribute("decisionCacheTTL");
    if (StringUtils.hasText(decisionCache)) {
        factory.addPropertyValue("decisionCacheTTL", decisionCacheTTL);
    }
    return factory.getBeanDefinition();
}

From source file:org.drools.container.spring.namespace.KnowledgeAgentDefinitionParser.java

@Override
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {

    BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(KnowledgeAgentBeanFactory.class);

    String id = element.getAttribute("id");
    emptyAttributeCheck(element.getLocalName(), "id", id);
    factory.addPropertyValue("id", id);

    String kbase = element.getAttribute("kbase");
    if (StringUtils.hasText(kbase)) {
        factory.addPropertyReference("kbase", kbase);
    }/*from w w w . j a v  a2 s .c o m*/

    String newInstance = element.getAttribute("new-instance");
    if (StringUtils.hasText(newInstance)) {
        factory.addPropertyValue("newInstance", newInstance);
    }

    String useKbaseClassloader = element.getAttribute("use-kbase-classloader");
    if (!useKbaseClassloader.trim().equals("")) {
        factory.addPropertyValue("useKbaseClassloader", useKbaseClassloader);
    }

    ManagedList resources = KnowledgeBaseDefinitionParser.getResources(element, parserContext, factory);

    if (resources != null) {
        factory.addPropertyValue("resources", resources);
    }

    // inject the kagent into any stateless sessions
    for (String beanName : parserContext.getRegistry().getBeanDefinitionNames()) {
        BeanDefinition def = parserContext.getRegistry().getBeanDefinition(beanName);
        if (StatelessKnowledgeSessionBeanFactory.class.getName().equals(def.getBeanClassName())) {
            PropertyValue pvalue = def.getPropertyValues().getPropertyValue("kbase");
            RuntimeBeanReference tbf = (RuntimeBeanReference) pvalue.getValue();
            if (kbase.equals(tbf.getBeanName())) {
                def.getPropertyValues().addPropertyValue("knowledgeAgent", new RuntimeBeanReference(id));
            }
        }
    }

    return factory.getBeanDefinition();
}

From source file:org.mule.transport.zmq.config.InboundEndpointDefinitionParser.java

public BeanDefinition parseChild(Element element, ParserContext parserContent) {
    BeanDefinitionBuilder builder = BeanDefinitionBuilder
            .rootBeanDefinition(InboundEndpointMessageSource.class.getName());
    String configRef = element.getAttribute("config-ref");
    if ((configRef != null) && (!StringUtils.isBlank(configRef))) {
        builder.addPropertyValue("moduleObject", configRef);
    }//from  w w w  .j  ava  2 s  .c  om
    if (element.hasAttribute("exchange-pattern")) {
        builder.addPropertyValue("exchangePattern", element.getAttribute("exchange-pattern"));
    }
    if (element.hasAttribute("socket-operation")) {
        builder.addPropertyValue("socketOperation", element.getAttribute("socket-operation"));
    }
    if ((element.getAttribute("address") != null) && (!StringUtils.isBlank(element.getAttribute("address")))) {
        builder.addPropertyValue("address", element.getAttribute("address"));
    }
    if ((element.getAttribute("filter") != null) && (!StringUtils.isBlank(element.getAttribute("filter")))) {
        builder.addPropertyValue("filter", element.getAttribute("filter"));
    }
    if ((element.getAttribute("identity") != null)
            && (!StringUtils.isBlank(element.getAttribute("identity")))) {
        builder.addPropertyValue("identity", element.getAttribute("identity"));
    }
    if ((element.getAttribute("multipart") != null)
            && (!StringUtils.isBlank(element.getAttribute("multipart")))) {
        builder.addPropertyValue("multipart", element.getAttribute("multipart"));
    }
    if ((element.getAttribute("retryMax") != null)
            && (!StringUtils.isBlank(element.getAttribute("retryMax")))) {
        builder.addPropertyValue("retryMax", element.getAttribute("retryMax"));
    }

    BeanDefinition definition = builder.getBeanDefinition();
    definition.setAttribute(MuleHierarchicalBeanDefinitionParserDelegate.MULE_NO_RECURSE, Boolean.TRUE);
    MutablePropertyValues propertyValues = parserContent.getContainingBeanDefinition().getPropertyValues();

    propertyValues.addPropertyValue("messageSource", definition);

    return definition;
}

From source file:com.dangdang.ddframe.job.lite.spring.namespace.parser.common.AbstractJobBeanDefinitionParser.java

private BeanDefinition createJobConfiguration(final Element element) {
    BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(getJobConfigurationDTO());
    String jobName = element.getAttribute(ID_ATTRIBUTE);
    factory.addConstructorArgValue(jobName);
    factory.addConstructorArgValue(element.getAttribute(CRON_ATTRIBUTE));
    factory.addConstructorArgValue(element.getAttribute(SHARDING_TOTAL_COUNT_ATTRIBUTE));
    addPropertyValueIfNotEmpty(SHARDING_ITEM_PARAMETERS_ATTRIBUTE, "shardingItemParameters", element, factory);
    addPropertyValueIfNotEmpty(JOB_PARAMETER_ATTRIBUTE, "jobParameter", element, factory);
    addPropertyValueIfNotEmpty(MONITOR_EXECUTION_ATTRIBUTE, "monitorExecution", element, factory);
    addPropertyValueIfNotEmpty(MONITOR_PORT_ATTRIBUTE, "monitorPort", element, factory);
    addPropertyValueIfNotEmpty(MAX_TIME_DIFF_SECONDS_ATTRIBUTE, "maxTimeDiffSeconds", element, factory);
    addPropertyValueIfNotEmpty(FAILOVER_ATTRIBUTE, "failover", element, factory);
    addPropertyValueIfNotEmpty(MISFIRE_ATTRIBUTE, "misfire", element, factory);
    addPropertyValueIfNotEmpty(JOB_SHARDING_STRATEGY_CLASS_ATTRIBUTE, "jobShardingStrategyClass", element,
            factory);/*from  w  w  w. ja  v  a 2s  .  c  o  m*/
    addPropertyValueIfNotEmpty(DESCRIPTION_ATTRIBUTE, "description", element, factory);
    addPropertyValueIfNotEmpty(DISABLED_ATTRIBUTE, "disabled", element, factory);
    addPropertyValueIfNotEmpty(OVERWRITE_ATTRIBUTE, "overwrite", element, factory);
    addPropertyValueIfNotEmpty(EXECUTOR_SERVICE_HANDLER_ATTRIBUTE, "executorServiceHandler", element, factory);
    addPropertyValueIfNotEmpty(JOB_EXCEPTION_HANDLER_ATTRIBUTE, "jobExceptionHandler", element, factory);
    setPropertiesValue(element, factory);
    return factory.getBeanDefinition();
}

From source file:com.mtgi.analytics.aop.config.v11.BtHttpRequestsBeanDefinitionParser.java

@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {

    //compile required constructor arguments from attributes and nested elements.  first up, event type.
    builder.addConstructorArg(element.getAttribute(ATT_EVENT_TYPE));

    //manager ID from enclosing tag, or ref attribute.
    String managerId = parserContext.isNested()
            ? (String) parserContext.getContainingBeanDefinition().getAttribute("id")
            : element.getAttribute(BtNamespaceConstants.ATT_TRACKING_MANAGER);
    builder.addConstructorArgReference(managerId);

    //parameter list to include in event data, if any.
    String paramList = element.getAttribute(ATT_PARAMETERS);
    builder.addConstructorArg(parseList(paramList));

    //parameter list to include in event name, if any
    String nameList = element.getAttribute(ATT_NAME_PARAMETERS);
    builder.addConstructorArg(parseList(nameList));

    //URI patterns, if any.  can be specified as attribute or nested elements.
    ArrayList<Pattern> accum = new ArrayList<Pattern>();
    if (element.hasAttribute(ATT_URI_PATTERN))
        accum.add(Pattern.compile(element.getAttribute(ATT_URI_PATTERN)));

    NodeList nl = element.getElementsByTagNameNS("*", ATT_URI_PATTERN);
    for (int i = 0; i < nl.getLength(); ++i) {
        Element e = (Element) nl.item(i);
        String pattern = e.getTextContent();
        if (StringUtils.hasText(pattern))
            accum.add(Pattern.compile(pattern));
    }//from w w  w.  jav  a2s. com

    if (accum.isEmpty())
        builder.addConstructorArg(null);
    else
        builder.addConstructorArg(accum.toArray(new Pattern[accum.size()]));

    if (parserContext.isNested())
        parserContext.getReaderContext().registerWithGeneratedName(builder.getBeanDefinition());
}

From source file:org.brekka.stillingar.spring.config.ConfigurationServiceBeanDefinitionParser.java

protected void preparePostProcessor(Element element, ParserContext parserContext) {
    String id = element.getAttribute("id");
    String name = getName(element);
    BeanDefinitionBuilder postProcessor = BeanDefinitionBuilder
            .genericBeanDefinition(ConfigurationBeanPostProcessor.class);
    postProcessor.addConstructorArgValue(name);
    postProcessor.addConstructorArgReference(id);
    Element annotationConfigElement = selectSingleChildElement(element, "annotation-config", true);
    if (annotationConfigElement != null) {
        String marker = annotationConfigElement.getAttribute("marker");
        if (StringUtils.hasLength(marker)) {
            Class<?> theClass = ClassUtils.resolveClassName(marker,
                    Thread.currentThread().getContextClassLoader());
            if (!theClass.isAnnotation()) {
                throw new ConfigurationException(String.format("The class '%s' is not an annotation", marker));
            }// w w  w.  j  ava  2  s .  c  om
            postProcessor.addPropertyValue("markerAnnotation", theClass);
        }
    }
    parserContext.registerBeanComponent(
            new BeanComponentDefinition(postProcessor.getBeanDefinition(), id + "-postProcessor"));
}

From source file:fr.xebia.management.config.ThreadPoolExecutorFactoryDefinitionParser.java

@Override
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ThreadPoolExecutorFactory.class);

    // Mark as infrastructure bean and attach source location.
    builder.setRole(BeanDefinition.ROLE_APPLICATION);
    builder.getRawBeanDefinition().setSource(parserContext.extractSource(element));

    String poolSize = element.getAttribute(POOL_SIZE_ATTRIBUTE);
    if (StringUtils.hasText(poolSize)) {
        builder.addPropertyValue("poolSize", poolSize);
    }//from   w  w  w.  j a v  a 2s.  c  om

    String queueCapacity = element.getAttribute(QUEUE_CAPACITY_ATTRIBUTE);
    if (StringUtils.hasText(queueCapacity)) {
        builder.addPropertyValue("queueCapacity", queueCapacity);
    }

    String keepAlive = element.getAttribute(KEEP_ALIVE_ATTRIBUTE);
    if (StringUtils.hasText(keepAlive)) {
        builder.addPropertyValue("keepAliveTimeInSeconds", keepAlive);
    }

    String rejectionPolicy = element.getAttribute(REJECTION_POLICY_ATTRIBUTE);

    Class<? extends RejectedExecutionHandler> rejectedExecutionHandlerClass;
    if ("ABORT".equals(rejectionPolicy)) {
        rejectedExecutionHandlerClass = AbortPolicy.class;
    } else if ("CALLER_RUNS".equals(rejectionPolicy)) {
        rejectedExecutionHandlerClass = CallerRunsPolicy.class;
    } else if ("DISCARD".equals(rejectionPolicy)) {
        rejectedExecutionHandlerClass = DiscardPolicy.class;
    } else if ("DISCARD_OLDEST".equals(rejectionPolicy)) {
        rejectedExecutionHandlerClass = DiscardOldestPolicy.class;
    } else {
        throw new IllegalArgumentException(
                "Unsupported '" + REJECTION_POLICY_ATTRIBUTE + "': '" + rejectionPolicy + "'");
    }
    builder.addPropertyValue("rejectedExecutionHandlerClass", rejectedExecutionHandlerClass);

    return builder.getBeanDefinition();
}

From source file:org.brekka.stillingar.spring.config.ConfigurationServiceBeanDefinitionParser.java

/**
 * @param element/*from   w  w w.  j  a  va 2 s.c  om*/
 * @return
 */
protected AbstractBeanDefinition prepareResourceNameResolver(Element element, Engine engine) {
    Element selectorElement = selectSingleChildElement(element, "selector", true);
    BeanDefinitionBuilder builder = null;
    String prefix = getName(element);
    String extension = engine.getDefaultExtension();
    if (selectorElement != null) {
        Element name = selectSingleChildElement(selectorElement, "name", true);
        if (name != null) {
            prefix = attribute(name, "prefix", prefix);
            extension = attribute(name, "extension", extension);

            Element version = selectSingleChildElement(name, "version", true);
            if (version != null) {
                String pattern = version.getAttribute("pattern");
                Element versionMavenElement = selectSingleChildElement(selectorElement, "maven", true);
                builder = buildMavenVersionedResourceNameResolver(versionMavenElement, pattern, prefix,
                        extension);
            }
        }
    }

    // Failsafe
    if (builder == null) {
        builder = buildBasicResourceNameResolver(prefix, extension);
    }
    return builder.getBeanDefinition();
}

From source file:org.jdal.beans.ServiceBeanDefinitionParser.java

/**
 * {@inheritDoc}/*from   www.  j av a  2s. c om*/
 */
public AbstractBeanDefinition parse(Element element, ParserContext parserContext) {

    // default dao and service classes
    String daoClassName = JPA_DAO_CLASS_NAME;
    String serviceClassName = PERSISTENT_SERVICE_CLASS_NAME;
    String name = null;
    boolean declareService = false;

    if (element.hasAttribute(DAO_CLASS))
        daoClassName = element.getAttribute(DAO_CLASS);

    if (element.hasAttribute(SERVICE_CLASS)) {
        serviceClassName = element.getAttribute(SERVICE_CLASS);
        declareService = true;
    }

    if (element.hasAttribute(NAME))
        name = element.getAttribute(NAME);

    if (element.hasAttribute(ENTITY)) {
        String className = element.getAttribute(ENTITY);
        if (name == null) {
            name = StringUtils
                    .uncapitalize(StringUtils.substringAfterLast(className, PropertyUtils.PROPERTY_SEPARATOR));
        }
        parserContext.pushContainingComponent(
                new CompositeComponentDefinition(name, parserContext.extractSource(element)));

        // Dao
        BeanDefinitionBuilder daoBuilder = BeanDefinitionBuilder.genericBeanDefinition(daoClassName);
        NodeList nl = element.getElementsByTagNameNS(element.getNamespaceURI(), CRITERIA);
        if (nl.getLength() > 0) {
            ManagedMap<String, BeanReference> builders = new ManagedMap<String, BeanReference>(nl.getLength());
            for (int i = 0; i < nl.getLength(); i++) {
                Element e = (Element) nl.item(i);
                builders.put(e.getAttribute(NAME), new RuntimeBeanReference(e.getAttribute(BUILDER)));
            }
            daoBuilder.addPropertyValue(CRITERIA_BUILDER_MAP, builders);
        }

        daoBuilder.addConstructorArgValue(ClassUtils.resolveClassName(className, null));
        daoBuilder.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
        String daoBeanName;

        if (declareService) {
            // use dao suffix
            daoBeanName = name + DAO_SUFFIX;
            registerBeanDefinition(parserContext, daoBuilder, daoBeanName);

            // register service wrapper
            String serviceBeanName = name + SERVICE_SUFFIX;
            BeanDefinitionBuilder serviceBuilder = BeanDefinitionBuilder
                    .genericBeanDefinition(serviceClassName);
            serviceBuilder.addPropertyReference("dao", daoBeanName);
            registerBeanDefinition(parserContext, serviceBuilder, serviceBeanName);
        } else {
            // use service suffix for dao and declare an alias with dao suffix for compatibility with older api.
            daoBeanName = name + SERVICE_SUFFIX;
            String[] aliases = new String[] { name + DAO_SUFFIX };
            BeanComponentDefinition bcd = new BeanComponentDefinition(daoBuilder.getBeanDefinition(),
                    daoBeanName, aliases);
            parserContext.registerBeanComponent(bcd);
        }

        parserContext.popAndRegisterContainingComponent();
    }

    return null;
}