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

org.unlaxer.parser.HasChildrenParser Maven / Gradle / Ivy

package org.unlaxer.parser;

import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public interface HasChildrenParser extends Parser{
	
	public Parsers getChildren();
	
	public default HasChildrenParser newFiltered(Predicate cutFilter){
		
		Predicate passFilter = cutFilter.negate();
		List newChildren = getChildren().stream()
			.filter(passFilter)
			.collect(Collectors.toList());
		
		return createWith(Parsers.of(newChildren));
	}
	
	public default HasChildrenParser newWithoutRecursive(Predicate cutFilter){
		
		List newChildren = getChildren().stream()
			.map(childParser->newWithRecursiveChild(childParser, cutFilter))
			.filter(Optional::isPresent)
			.map(Optional::get)
			.collect(Collectors.toList());
		
		return createWith(Parsers.of(newChildren));
	}
	
	default Optional newWithRecursiveChild(Parser target , Predicate cutFilter){
		if(cutFilter.test(target)){
			return Optional.empty();
		}
		if(target instanceof HasChildrenParser){
			HasChildrenParser hasChildParser = ((HasChildrenParser) target);
			@SuppressWarnings("unchecked")
			List children = (List) hasChildParser.getChildren().stream()
				.map(childParser->{
					if(cutFilter.test(target)){
						return Optional.empty();
					}
					if(childParser instanceof HasChildrenParser){
						return Optional.of(((HasChildrenParser)childParser).newWithoutRecursive(cutFilter));
					}
					return Optional.of(target);
				})
				.filter(Optional::isPresent)
				.map(Optional::get)
				.collect(Collectors.toList());
			return Optional.of(createWith(Parsers.of(children)));
		}
		return Optional.of(target);
	}

	
	HasChildrenParser createWith(Parsers children);

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy