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

com.vladsch.flexmark.html2md.converter.DelegatingNodeRendererFactoryWrapper Maven / Gradle / Ivy

package com.vladsch.flexmark.html2md.converter;

import com.vladsch.flexmark.util.data.DataHolder;
import com.vladsch.flexmark.util.dependency.Dependent;
import org.jetbrains.annotations.Nullable;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Function;

/**
 * Factory for instantiating new node renderers with dependencies
 */
class DelegatingNodeRendererFactoryWrapper implements Function, Dependent, DelegatingNodeRendererFactory {
    final private HtmlNodeRendererFactory nodeRendererFactory;
    private List nodeRenderers;
    private Set> myDelegates = null;

    public DelegatingNodeRendererFactoryWrapper(List nodeRenderers, HtmlNodeRendererFactory nodeRendererFactory) {
        this.nodeRendererFactory = nodeRendererFactory;
        this.nodeRenderers = nodeRenderers;
    }

    @Override
    public HtmlNodeRenderer apply(DataHolder options) {
        return nodeRendererFactory.apply(options);
    }

    public HtmlNodeRendererFactory getFactory() {
        return nodeRendererFactory;
    }

    @Override
    public Set> getDelegates() {
        return nodeRendererFactory instanceof DelegatingNodeRendererFactory ? ((DelegatingNodeRendererFactory) nodeRendererFactory).getDelegates() : null;
    }

    @Nullable
    @Override
    final public Set> getAfterDependents() {
        return null;
    }

    @Nullable
    @Override
    public Set> getBeforeDependents() {
        if (myDelegates == null && nodeRenderers != null) {
            Set> delegates = getDelegates();
            if (delegates != null) {
                myDelegates = new HashSet<>();
                for (DelegatingNodeRendererFactoryWrapper factory : nodeRenderers) {
                    if (delegates.contains(factory.getFactory().getClass())) {
                        myDelegates.add(factory.getFactory().getClass());
                    }
                }
            }

            // release reference
            nodeRenderers = null;
        }
        return myDelegates;
    }

    @Override
    final public boolean affectsGlobalScope() {
        return false;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy