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

com.github.fluentxml4j.internal.query.SelectMultipleFromNodeImpl Maven / Gradle / Ivy

package com.github.fluentxml4j.internal.query;

import com.github.fluentxml4j.FluentXmlProcessingException;
import com.github.fluentxml4j.query.SelectMultipleFromNode;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathException;
import javax.xml.xpath.XPathExpression;
import java.util.Iterator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

class SelectMultipleFromNodeImpl implements SelectMultipleFromNode
{
	private Node baseNode;
	private XPathExpression xPathExpression;
	private Function nodeConverter;

	SelectMultipleFromNodeImpl(Node baseNode, XPathExpression xPathExpression, Function nodeConverter)
	{
		this.baseNode = baseNode;
		this.xPathExpression = xPathExpression;
		this.nodeConverter = nodeConverter;
	}

	@Override
	public Iterator iterator()
	{
		return iterate().iterator();
	}

	@Deprecated
	@Override
	public Iterable iterate()
	{
		NodeList nodeList = asNodeList();
		return () -> new NodeListIterator<>(nodeList, this.nodeConverter);
	}

	@Override
	public Stream asStream()
	{
		return StreamSupport.stream(iterate().spliterator(), true);
	}

	@Override
	public NodeList asNodeList()
	{
		try
		{
			return (NodeList) this.xPathExpression.evaluate(this.baseNode, XPathConstants.NODESET);
		}
		catch (XPathException ex)
		{
			throw new FluentXmlProcessingException(ex);
		}
	}

	@Override
	public List asList()
	{
		return asStream().collect(Collectors.toList());
	}

	@Override
	public int count()
	{
		return asNodeList().getLength();
	}

	@Override
	public boolean empty()
	{
		return count() == 0;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy