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

org.unlaxer.context.ParserContextScopeTree Maven / Gradle / Ivy

package org.unlaxer.context;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

import org.unlaxer.Name;
import org.unlaxer.parser.Parser;

public interface ParserContextScopeTree{
	
	public static final Name nameLess = Name.of(ParserContextScopeTree.class);
	
	public Map> getParserContextScopeTreeMap();
	
	public default Optional get(Parser parser){
		return get(parser,nameLess);
	}
	
	default Map getParserContextScopeTreeMap(Parser parser){
		
		return getParserContextScopeTreeMap()
			.computeIfAbsent(parser, parser_->new HashMap<>());
	}
	
	public default Optional get(Parser parser , Name name){
		Map map = getParserContextScopeTreeMap(parser);
		return Optional.of(map.get(name));
	}
	
	public default  Optional get(Parser parser , Class specifiedClass){
		return get(parser, nameLess , specifiedClass);
	}

	public default  Optional get(Parser parser , Name name , Class specifiedClass){
		Map map = getParserContextScopeTreeMap(parser);
		Object object = map.get(name);
		if(object == null){
			return Optional.empty();
		}
		return Optional.of(specifiedClass.cast(object));
	}
	
	public default void put(Parser parser , Object object){
		put(parser, nameLess, object);
	}
	
	public default void put(Parser parser , Name name , Object object){
		Map map = getParserContextScopeTreeMap(parser);
		map.put(name, object);
	}
	
	public default Optional remove(Parser parser){
		return remove(parser,nameLess);
		
	}
	
	public default Optional remove(Parser parser , Name name){
		Map map = getParserContextScopeTreeMap(parser);
		return Optional.of(map.remove(name));
	}
	
	public default void removeAll(Parser parser){
		Map map = getParserContextScopeTreeMap(parser);
		map.clear();
		getParserContextScopeTreeMap().remove(parser);
	}
	
	public default boolean containsKey(Parser parser , Name name){
		Map map = getParserContextScopeTreeMap(parser);
		return map.containsKey(name);
	}
	
	public default boolean containsValue(Parser parser , Object object){
		Map map = getParserContextScopeTreeMap(parser);
		return map.containsValue(object);
	}
	
	public default boolean containsParser(Parser parser){
		return getParserContextScopeTreeMap().containsKey(parser);
	}
}