Search in sources :

Example 1 with ManagedList

use of cn.taketoday.beans.factory.support.ManagedList in project today-infrastructure by TAKETODAY.

the class ScheduledTasksBeanDefinitionParser method doParse.

@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
    // lazy scheduled tasks are a contradiction in terms -> force to false
    builder.setLazyInit(false);
    ManagedList<RuntimeBeanReference> cronTaskList = new ManagedList<>();
    ManagedList<RuntimeBeanReference> fixedDelayTaskList = new ManagedList<>();
    ManagedList<RuntimeBeanReference> fixedRateTaskList = new ManagedList<>();
    ManagedList<RuntimeBeanReference> triggerTaskList = new ManagedList<>();
    NodeList childNodes = element.getChildNodes();
    int length = childNodes.getLength();
    for (int i = 0; i < length; i++) {
        Node child = childNodes.item(i);
        if (!isScheduledElement(child, parserContext)) {
            continue;
        }
        Element taskElement = (Element) child;
        String ref = taskElement.getAttribute("ref");
        String method = taskElement.getAttribute("method");
        // Check that 'ref' and 'method' are specified
        if (!StringUtils.hasText(ref) || !StringUtils.hasText(method)) {
            parserContext.getReaderContext().error("Both 'ref' and 'method' are required", taskElement);
            // Continue with the possible next task element
            continue;
        }
        String cronAttribute = taskElement.getAttribute("cron");
        String triggerAttribute = taskElement.getAttribute("trigger");
        String fixedRateAttribute = taskElement.getAttribute("fixed-rate");
        String fixedDelayAttribute = taskElement.getAttribute("fixed-delay");
        String initialDelayAttribute = taskElement.getAttribute("initial-delay");
        boolean hasCronAttribute = StringUtils.hasText(cronAttribute);
        boolean hasTriggerAttribute = StringUtils.hasText(triggerAttribute);
        boolean hasFixedRateAttribute = StringUtils.hasText(fixedRateAttribute);
        boolean hasFixedDelayAttribute = StringUtils.hasText(fixedDelayAttribute);
        boolean hasInitialDelayAttribute = StringUtils.hasText(initialDelayAttribute);
        if (!(hasCronAttribute || hasFixedDelayAttribute || hasFixedRateAttribute || hasTriggerAttribute)) {
            parserContext.getReaderContext().error("one of the 'cron', 'fixed-delay', 'fixed-rate', or 'trigger' attributes is required", taskElement);
            // with the possible next task element
            continue;
        }
        if (hasInitialDelayAttribute && (hasCronAttribute || hasTriggerAttribute)) {
            parserContext.getReaderContext().error("the 'initial-delay' attribute may not be used with cron and trigger tasks", taskElement);
            // with the possible next task element
            continue;
        }
        String runnableName = runnableReference(ref, method, taskElement, parserContext).getBeanName();
        if (hasFixedDelayAttribute) {
            fixedDelayTaskList.add(intervalTaskReference(runnableName, initialDelayAttribute, fixedDelayAttribute, taskElement, parserContext));
        }
        if (hasFixedRateAttribute) {
            fixedRateTaskList.add(intervalTaskReference(runnableName, initialDelayAttribute, fixedRateAttribute, taskElement, parserContext));
        }
        if (hasCronAttribute) {
            cronTaskList.add(cronTaskReference(runnableName, cronAttribute, taskElement, parserContext));
        }
        if (hasTriggerAttribute) {
            String triggerName = new RuntimeBeanReference(triggerAttribute).getBeanName();
            triggerTaskList.add(triggerTaskReference(runnableName, triggerName, taskElement, parserContext));
        }
    }
    String schedulerRef = element.getAttribute("scheduler");
    if (StringUtils.hasText(schedulerRef)) {
        builder.addPropertyReference("taskScheduler", schedulerRef);
    }
    builder.addPropertyValue("cronTasksList", cronTaskList);
    builder.addPropertyValue("triggerTasksList", triggerTaskList);
    builder.addPropertyValue("fixedRateTasksList", fixedRateTaskList);
    builder.addPropertyValue("fixedDelayTasksList", fixedDelayTaskList);
}
Also used : NodeList(org.w3c.dom.NodeList) Node(org.w3c.dom.Node) Element(org.w3c.dom.Element) ManagedList(cn.taketoday.beans.factory.support.ManagedList) RuntimeBeanReference(cn.taketoday.beans.factory.config.RuntimeBeanReference)

Example 2 with ManagedList

use of cn.taketoday.beans.factory.support.ManagedList in project today-infrastructure by TAKETODAY.

the class DatabasePopulatorConfigUtils method createDatabasePopulator.

private static BeanDefinition createDatabasePopulator(Element element, List<Element> scripts, String execution) {
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(CompositeDatabasePopulator.class);
    boolean ignoreFailedDrops = element.getAttribute("ignore-failures").equals("DROPS");
    boolean continueOnError = element.getAttribute("ignore-failures").equals("ALL");
    ManagedList<BeanMetadataElement> delegates = new ManagedList<>();
    for (Element scriptElement : scripts) {
        String executionAttr = scriptElement.getAttribute("execution");
        if (!StringUtils.hasText(executionAttr)) {
            executionAttr = "INIT";
        }
        if (!execution.equals(executionAttr)) {
            continue;
        }
        BeanDefinitionBuilder delegate = BeanDefinitionBuilder.genericBeanDefinition(ResourceDatabasePopulator.class);
        delegate.addPropertyValue("ignoreFailedDrops", ignoreFailedDrops);
        delegate.addPropertyValue("continueOnError", continueOnError);
        // Use a factory bean for the resources so they can be given an order if a pattern is used
        BeanDefinitionBuilder resourcesFactory = BeanDefinitionBuilder.genericBeanDefinition(SortedResourcesFactoryBean.class);
        resourcesFactory.addConstructorArgValue(new TypedStringValue(scriptElement.getAttribute("location")));
        delegate.addPropertyValue("scripts", resourcesFactory.getBeanDefinition());
        if (StringUtils.isNotEmpty(scriptElement.getAttribute("encoding"))) {
            delegate.addPropertyValue("sqlScriptEncoding", new TypedStringValue(scriptElement.getAttribute("encoding")));
        }
        String separator = getSeparator(element, scriptElement);
        if (separator != null) {
            delegate.addPropertyValue("separator", new TypedStringValue(separator));
        }
        delegates.add(delegate.getBeanDefinition());
    }
    builder.addPropertyValue("populators", delegates);
    return builder.getBeanDefinition();
}
Also used : BeanMetadataElement(cn.taketoday.beans.BeanMetadataElement) BeanDefinitionBuilder(cn.taketoday.beans.factory.support.BeanDefinitionBuilder) Element(org.w3c.dom.Element) BeanMetadataElement(cn.taketoday.beans.BeanMetadataElement) ManagedList(cn.taketoday.beans.factory.support.ManagedList) TypedStringValue(cn.taketoday.beans.factory.config.TypedStringValue)

Example 3 with ManagedList

use of cn.taketoday.beans.factory.support.ManagedList in project today-framework by TAKETODAY.

the class ComponentBeanDefinitionParser method parseChildComponents.

private static void parseChildComponents(List<Element> childElements, BeanDefinitionBuilder factory) {
    ManagedList<BeanDefinition> children = new ManagedList<>(childElements.size());
    for (Element element : childElements) {
        children.add(parseComponentElement(element));
    }
    factory.addPropertyValue("children", children);
}
Also used : Element(org.w3c.dom.Element) ManagedList(cn.taketoday.beans.factory.support.ManagedList) BeanDefinition(cn.taketoday.beans.factory.config.BeanDefinition) AbstractBeanDefinition(cn.taketoday.beans.factory.support.AbstractBeanDefinition)

Example 4 with ManagedList

use of cn.taketoday.beans.factory.support.ManagedList in project today-framework by TAKETODAY.

the class ScheduledTasksBeanDefinitionParser method doParse.

@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
    // lazy scheduled tasks are a contradiction in terms -> force to false
    builder.setLazyInit(false);
    ManagedList<RuntimeBeanReference> cronTaskList = new ManagedList<>();
    ManagedList<RuntimeBeanReference> fixedDelayTaskList = new ManagedList<>();
    ManagedList<RuntimeBeanReference> fixedRateTaskList = new ManagedList<>();
    ManagedList<RuntimeBeanReference> triggerTaskList = new ManagedList<>();
    NodeList childNodes = element.getChildNodes();
    int length = childNodes.getLength();
    for (int i = 0; i < length; i++) {
        Node child = childNodes.item(i);
        if (!isScheduledElement(child, parserContext)) {
            continue;
        }
        Element taskElement = (Element) child;
        String ref = taskElement.getAttribute("ref");
        String method = taskElement.getAttribute("method");
        // Check that 'ref' and 'method' are specified
        if (!StringUtils.hasText(ref) || !StringUtils.hasText(method)) {
            parserContext.getReaderContext().error("Both 'ref' and 'method' are required", taskElement);
            // Continue with the possible next task element
            continue;
        }
        String cronAttribute = taskElement.getAttribute("cron");
        String triggerAttribute = taskElement.getAttribute("trigger");
        String fixedRateAttribute = taskElement.getAttribute("fixed-rate");
        String fixedDelayAttribute = taskElement.getAttribute("fixed-delay");
        String initialDelayAttribute = taskElement.getAttribute("initial-delay");
        boolean hasCronAttribute = StringUtils.hasText(cronAttribute);
        boolean hasTriggerAttribute = StringUtils.hasText(triggerAttribute);
        boolean hasFixedRateAttribute = StringUtils.hasText(fixedRateAttribute);
        boolean hasFixedDelayAttribute = StringUtils.hasText(fixedDelayAttribute);
        boolean hasInitialDelayAttribute = StringUtils.hasText(initialDelayAttribute);
        if (!(hasCronAttribute || hasFixedDelayAttribute || hasFixedRateAttribute || hasTriggerAttribute)) {
            parserContext.getReaderContext().error("one of the 'cron', 'fixed-delay', 'fixed-rate', or 'trigger' attributes is required", taskElement);
            // with the possible next task element
            continue;
        }
        if (hasInitialDelayAttribute && (hasCronAttribute || hasTriggerAttribute)) {
            parserContext.getReaderContext().error("the 'initial-delay' attribute may not be used with cron and trigger tasks", taskElement);
            // with the possible next task element
            continue;
        }
        String runnableName = runnableReference(ref, method, taskElement, parserContext).getBeanName();
        if (hasFixedDelayAttribute) {
            fixedDelayTaskList.add(intervalTaskReference(runnableName, initialDelayAttribute, fixedDelayAttribute, taskElement, parserContext));
        }
        if (hasFixedRateAttribute) {
            fixedRateTaskList.add(intervalTaskReference(runnableName, initialDelayAttribute, fixedRateAttribute, taskElement, parserContext));
        }
        if (hasCronAttribute) {
            cronTaskList.add(cronTaskReference(runnableName, cronAttribute, taskElement, parserContext));
        }
        if (hasTriggerAttribute) {
            String triggerName = new RuntimeBeanReference(triggerAttribute).getBeanName();
            triggerTaskList.add(triggerTaskReference(runnableName, triggerName, taskElement, parserContext));
        }
    }
    String schedulerRef = element.getAttribute("scheduler");
    if (StringUtils.hasText(schedulerRef)) {
        builder.addPropertyReference("taskScheduler", schedulerRef);
    }
    builder.addPropertyValue("cronTasksList", cronTaskList);
    builder.addPropertyValue("triggerTasksList", triggerTaskList);
    builder.addPropertyValue("fixedRateTasksList", fixedRateTaskList);
    builder.addPropertyValue("fixedDelayTasksList", fixedDelayTaskList);
}
Also used : NodeList(org.w3c.dom.NodeList) Node(org.w3c.dom.Node) Element(org.w3c.dom.Element) ManagedList(cn.taketoday.beans.factory.support.ManagedList) RuntimeBeanReference(cn.taketoday.beans.factory.config.RuntimeBeanReference)

Example 5 with ManagedList

use of cn.taketoday.beans.factory.support.ManagedList in project today-framework by TAKETODAY.

the class DatabasePopulatorConfigUtils method createDatabasePopulator.

private static BeanDefinition createDatabasePopulator(Element element, List<Element> scripts, String execution) {
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(CompositeDatabasePopulator.class);
    boolean ignoreFailedDrops = element.getAttribute("ignore-failures").equals("DROPS");
    boolean continueOnError = element.getAttribute("ignore-failures").equals("ALL");
    ManagedList<BeanMetadataElement> delegates = new ManagedList<>();
    for (Element scriptElement : scripts) {
        String executionAttr = scriptElement.getAttribute("execution");
        if (!StringUtils.hasText(executionAttr)) {
            executionAttr = "INIT";
        }
        if (!execution.equals(executionAttr)) {
            continue;
        }
        BeanDefinitionBuilder delegate = BeanDefinitionBuilder.genericBeanDefinition(ResourceDatabasePopulator.class);
        delegate.addPropertyValue("ignoreFailedDrops", ignoreFailedDrops);
        delegate.addPropertyValue("continueOnError", continueOnError);
        // Use a factory bean for the resources so they can be given an order if a pattern is used
        BeanDefinitionBuilder resourcesFactory = BeanDefinitionBuilder.genericBeanDefinition(SortedResourcesFactoryBean.class);
        resourcesFactory.addConstructorArgValue(new TypedStringValue(scriptElement.getAttribute("location")));
        delegate.addPropertyValue("scripts", resourcesFactory.getBeanDefinition());
        if (StringUtils.isNotEmpty(scriptElement.getAttribute("encoding"))) {
            delegate.addPropertyValue("sqlScriptEncoding", new TypedStringValue(scriptElement.getAttribute("encoding")));
        }
        String separator = getSeparator(element, scriptElement);
        if (separator != null) {
            delegate.addPropertyValue("separator", new TypedStringValue(separator));
        }
        delegates.add(delegate.getBeanDefinition());
    }
    builder.addPropertyValue("populators", delegates);
    return builder.getBeanDefinition();
}
Also used : BeanMetadataElement(cn.taketoday.beans.BeanMetadataElement) BeanDefinitionBuilder(cn.taketoday.beans.factory.support.BeanDefinitionBuilder) Element(org.w3c.dom.Element) BeanMetadataElement(cn.taketoday.beans.BeanMetadataElement) ManagedList(cn.taketoday.beans.factory.support.ManagedList) TypedStringValue(cn.taketoday.beans.factory.config.TypedStringValue)

Aggregations

ManagedList (cn.taketoday.beans.factory.support.ManagedList)6 Element (org.w3c.dom.Element)6 BeanMetadataElement (cn.taketoday.beans.BeanMetadataElement)2 BeanDefinition (cn.taketoday.beans.factory.config.BeanDefinition)2 RuntimeBeanReference (cn.taketoday.beans.factory.config.RuntimeBeanReference)2 TypedStringValue (cn.taketoday.beans.factory.config.TypedStringValue)2 AbstractBeanDefinition (cn.taketoday.beans.factory.support.AbstractBeanDefinition)2 BeanDefinitionBuilder (cn.taketoday.beans.factory.support.BeanDefinitionBuilder)2 Node (org.w3c.dom.Node)2 NodeList (org.w3c.dom.NodeList)2