HtmlRenderer(Builder builder) { this.builder = new Builder(builder); // take a copy to avoid after creation side effects this.options = new DataSet(builder); this.htmlOptions = new HtmlRendererOptions(this.options); this.htmlIdGeneratorFactory = builder.htmlIdGeneratorFactory; // resolve renderer dependencies final List<DelegatingNodeRendererFactoryWrapper> nodeRenderers = new ArrayList<DelegatingNodeRendererFactoryWrapper>(builder.nodeRendererFactories.size()); for (int i = builder.nodeRendererFactories.size() - 1; i >= 0; i--) { final NodeRendererFactory nodeRendererFactory = builder.nodeRendererFactories.get(i); final Set<Class<? extends DelegatingNodeRendererFactoryWrapper>>[] myDelegates = new Set[] { null }; nodeRenderers.add(new DelegatingNodeRendererFactoryWrapper(nodeRenderers, nodeRendererFactory)); } // Add as last. This means clients can override the rendering of core nodes if they want by default final CoreNodeRenderer.Factory nodeRendererFactory = new CoreNodeRenderer.Factory(); nodeRenderers.add(new DelegatingNodeRendererFactoryWrapper(nodeRenderers, nodeRendererFactory)); RendererDependencyHandler resolver = new RendererDependencyHandler(); nodeRendererFactories = resolver.resolveDependencies(nodeRenderers).getNodeRendererFactories(); // KLUDGE: but for now works List<AttributeProviderFactory> values = new ArrayList<>(builder.attributeProviderFactories.values()); this.attributeProviderFactories = FlatDependencyHandler.computeDependencies(values); this.linkResolverFactories = FlatDependencyHandler.computeDependencies(builder.linkResolverFactories); }
HtmlRenderer(Builder builder) { this.builder = new Builder(builder); // take a copy to avoid after creation side effects this.options = new DataSet(builder); this.htmlOptions = new HtmlRendererOptions(this.options); this.htmlIdGeneratorFactory = builder.htmlIdGeneratorFactory; // resolve renderer dependencies final List<DelegatingNodeRendererFactoryWrapper> nodeRenderers = new ArrayList<DelegatingNodeRendererFactoryWrapper>(builder.nodeRendererFactories.size()); for (int i = builder.nodeRendererFactories.size() - 1; i >= 0; i--) { final NodeRendererFactory nodeRendererFactory = builder.nodeRendererFactories.get(i); final Set<Class<? extends DelegatingNodeRendererFactoryWrapper>>[] myDelegates = new Set[] { null }; nodeRenderers.add(new DelegatingNodeRendererFactoryWrapper(nodeRenderers, nodeRendererFactory)); } // Add as last. This means clients can override the rendering of core nodes if they want by default final CoreNodeRenderer.Factory nodeRendererFactory = new CoreNodeRenderer.Factory(); nodeRenderers.add(new DelegatingNodeRendererFactoryWrapper(nodeRenderers, nodeRendererFactory)); RendererDependencyHandler resolver = new RendererDependencyHandler(); nodeRendererFactories = resolver.resolveDependencies(nodeRenderers).getNodeRendererFactories(); // KLUDGE: but for now works List<AttributeProviderFactory> values = new ArrayList<>(builder.attributeProviderFactories.values()); this.attributeProviderFactories = FlatDependencyHandler.computeDependencies(values); this.linkResolverFactories = FlatDependencyHandler.computeDependencies(builder.linkResolverFactories); }